Deep.Learning.for.Computer.Vision.with.Python-----chapter11 常见的图像处理卷积核

本文介绍了多种卷积核的应用,包括平滑、锐化、边缘检测等,并通过Python代码展示了如何使用这些卷积核处理图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、卷积核

平滑图像卷积核、锐化图像卷积核、拉普拉斯核(检测边缘)、Sobel 检测x方向和y方向边缘、浮雕滤波器,会使图像呈现出浮雕效果

二、代码演示

keras_cifar10.py:

from skimage.exposure import rescale_intensity
import numpy as np
import argparse
import cv2

def convolve(image,K):
    #获取图像和内核的空间维度(宽和高)
    (iH,iW) = image.shape[:2] # 0,12(通道)
    (kH,kW) = K.shape[:2]
    #将图像四周填充 保持卷积后维度不变
    pad = (kW - 1)//2
    image = cv2.copyMakeBorder(image, pad, pad, pad, pad, cv2.BORDER_REFLECT)
    output = np.zeros((iH,iW), dtype='float')

    for y in np.arange(pad, iH+pad):
        for x in np.arange(pad,iW+pad):
            #以(x,y)为中心
            roi = image[y-pad:y+pad+1,x-pad:x+pad+1]
            k = (roi*K).sum()
            output[y-pad,x-pad] = k
    #卷积,会使像素值超出255  所以先缩放
    output = rescale_intensity(output,in_range=(0,255))
    output = (output*255).astype("uint8")
    return output


#构造平滑图像的卷积核7*7   21*21
smallBlur = np.ones((7,7),dtype='float')*(1.0/(7*7))
largeBlur = np.ones((21,21),dtype='float')*(1.0/(21*21))
#锐化图像卷积核
sharpen = np.array(([0,-1,0],
                    [-1,5,-1],
                    [0,-1,0]),dtype='int')
#拉普拉斯核 检测边缘
laplacian = np.array(([0,1,0],
                      [1,-4,1],
                      [0,1,0]),dtype='int')
#Sobel 检测x方向和y方向边缘
#x方向
sobelX = np.array((
 [-1, 0, 1],
 [-2, 0, 2],
 [-1, 0, 1]), dtype="int")
#y方向
sobelY = np.array((
 [-1, -2, -1],
 [0, 0, 0],
 [1, 2, 1]), dtype="int")
#浮雕滤波器,会使图像呈现出浮雕效果
emboss = np.array((
 [-2, -1, 0],
 [-1, 1, 1],
 [0, 1, 2]), dtype="int")

#卷积核列表
kernelBank = (
("small_blur", smallBlur),
 ("large_blur", largeBlur),
 ("sharpen", sharpen),
 ("laplacian", laplacian),
 ("sobel_x", sobelX),
 ("sobel_y", sobelY),
 ("emboss", emboss))
#此处加载自己的图像
image = cv2.imread("D:/DLCV/DLCV/my_study/datasets/images/dog.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

for (kernelName, K) in kernelBank:
    print("[INFO] applying {} kernel".format(kernelName))
    convolveOutput = convolve(gray, K)
    #cv2.filter2D是OpenCV的卷积函数的更优化的版本
    opencvOutput = cv2.filter2D(gray, -1, K)

    # show the output images
    cv2.imshow("Original", gray)
    cv2.imshow("{} - convole".format(kernelName), convolveOutput)
    cv2.imshow("{} - opencv".format(kernelName), opencvOutput)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值