过滤是信号和图像处理中基本的任务。其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息。过滤可以移除图像中的噪音、提取感兴趣的可视特征、允许图像重采样等等。频域分析将图像分成从低频到高频的不同部分。低频对应图像强度变化小的区域,而高频是图像强度变化非常大的区域。在频率分析领域的框架中,滤波器是一个用来增强图像中某个波段或频率并阻塞(或降低)其他频率波段的操作。低通滤波器是消除图像中高频部分,但保留低频部分。高通滤波器消除低频部分。
模糊操作基本原理
1.基于离散卷积
2.定义好每个卷积核
3.不同卷积核得到不同的卷积效果
4.模糊是卷积的一种表象
去除随机噪声 :
均值过滤:
图片中一个方块区域(一般为3*3)内,中心点的像素为全部点像素值的平均值。均值滤波就是对于整张图片进行以上操作。
我们可以看下图的矩阵进行理解
这个就相当于选取3X3的矩阵求中心像素的均值
importcv2ascvimportnumpyasnp#均值模糊defblur_demo(image): dst=cv.blur(image,(5,5)) cv.imshow("blur_demo",dst)
1.均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
低通滤波(均值模糊)函数原型:blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst
src参数表示待处理的输入图像。
ksize参数表示模糊内核大小。比如(1,15)表示生成的模糊内核是一个1*15的矩阵。
dst参数表示输出与src相同大小和类型的图像。
anchor参数、borderType参数可忽略
去掉椒盐噪声效果好:中值过滤
#去掉椒盐噪声效果好defmedian_blur_demo(image): dst=cv.medianBlur(image,5) cv.imshow("median_demo",dst)
2.中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。具体原理参见博客:https://blog.csdn.net/weixin_37720172/article/details/72627543
中值滤波(中值模糊)函数原型:medianBlur(src, ksize[, dst]) -> dst
src参数表示待处理的输入图像。
ksize参数表示滤波窗口尺寸,必须是奇数并且大于1。比如这里是5,中值滤波器就会使用5×5的范围来计算,即对像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉。
dst参数表示输出与src相同大小和类型的图像。
自定义模糊处理:
#自定义模糊 (卷积可以处理模糊和锐化)defcustom_blur_demo(image): kernel=np.ones([5,5],np.float32)/25dst=cv.filter2D(image,-1,kernel=kernel) cv.imshow("custom_blur_demo",dst) kernel1=np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32) dst1=cv.filter2D(image,-1,kernel=kernel1) cv.imshow("custom_blur_demo",dst1)
3.用户自定义模糊
所用函数:filter2D()
函数原型: filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) -> dst
src参数表示待处理的输入图像。
ddepth参数表示目标图像深度,输入值为-1时,目标图像和原图像深度保持一致
kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵。修改kernel矩阵即可实现不同的模糊
测试:
src=cv.imread("C:\\Users\\william\\Pictures\\go.jpg") cv.imshow("input image",src) blur_demo(src) custom_blur_demo(src) median_blur_demo(src) cv.waitKey(0) cv.destroyAllWindows()