赞
踩
图像平滑处理: 在尽量保持原有图像信息的情况下,过滤掉图像内部的噪声,得到的图像为平滑图像。
原理: 将噪声所在像素点的像素值处理为期周围临近像素点的值的近似值。
取近似值的方法有:均值滤波,方框滤波,高斯滤波,中值滤波,双边滤波,2D卷积滤波(自定义卷积滤波)
指用当前像素点周围N*N个像素值的均值来代替当前像素值。该方法会遍历图像内的每一个像素点。
dst=cv2.blur (src,ksize,anchor,borderType)
dst: 返回值
src: 原图像
ksize: 滤波核的大小。指在均值处理过程中,其邻域图像的高度和宽度。
anchor: 锚点。默认值为(-1.-1),表示当前计算均值的点位于核中心点位置。一般采用默认值。
borderType: 边界样式,一般采用默认值。
所以函数cv2.blur()的一般形式为:
dst=cv2.blur (src,ksize,)
示例:
使用5×5的卷积核和30×30的卷积核,结果30×30的图像失真,所以卷积核越大去噪效果越好,失真现象更严重。
import cv2
o=cv2.imread ("lenanoise.png")
r5=cv2.blur (o,(5,5))
r30=cv2.blur (o,(30,30))
cv2.imshow ("original",o)
cv2.imshow ("result5",r5)
cv2.imshow ("result30",r30)
cv2.waitKey ()
cv2.destroyAllWindows ()
结果:
自由选择是否对均值滤波的结果进行归一化,可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和,
(1)邻域像素值的平均值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAWNpCFF-1658741749324)(D:\python\opencv学习笔记\opencv3 笔记\笔记图片\方框滤波平均值.png)]
(2)邻域像素值之和
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qGStNOqP-1658741749325)(D:\python\opencv学习笔记\opencv3 笔记\笔记图片\方框滤波像素值之和.png)]
dst=cv2.boxFilter (src,ddepth,ksize,anchor,normalize,borderType)
ddepth:处理结果图像的图像深度,-1表示与原始图像使用相同的深度图像。
ksize:滤波核大小
anchor:锚点
normalize: 在滤波时是否进行归一化。1真(均值),0假(之和)
borderType :边界样式
常用形式:
dst=cv2.boxFilter (src,ddepth,ksize)
示例:
2×2大小滤波,参数normalize为0,即不归一化,去方框像素值之和。
import cv2
o=cv2.imread ("lenanoise.png")
r=cv2.boxFilter (o,-1,(2,2),normalize=0)
cv2.imshow ("original",o)
cv2.imshow ("result",r )
cv2.waitKey ()
cv2.destroyAllWindows ()
结果:
均值和方框滤波中,邻域内每个像素的权重都是相等的,在高斯滤波中,中心点的权重值值会加大,远离中心点的权重会减小。
卷积核:
卷积核高度宽度可以不相同,但必须是奇数
不同大小的卷积核:
dst=cv2.GaussianBlur (src,ksize,sigmaX,sigmaY,borderType)
ksize: 滤波核的大小
sigmaX: 卷积核在X轴方向的标准差,控制的是权重比例。
sigmaY: 卷积核在Y轴方向的标准差,控制的是权重比例。
sigmaX=0.3×[ (ksize.width-1) ×0.5-1]+0.8
sigmaY=0.3×[ (ksize.height-1 ) ×0.5-1]+0.8
borderType :边界样式
sigmaY和borderType是可选参数。sigmaX是必选参数,但是可以将该参数设置为0,让函数自己去计算sigmaX的具体值。
常用形式:
dst=cv2.GaussianBlur ( src,ksize,0,0)
领域内所有像素值的中值代替当前像素点的像素值
将领域内的像素值排序,将位于中间的像素值作为当前像素点的像素值
dst=cv2.medianBlur (src,ksize)
ksize: 滤波核的大小
中值滤波不存在细节模糊问题,在中值滤波中,噪声成分很难被选上,几乎可以在不影响原有图像的情况下去除全部噪声,但是运算量较大。
综合考虑空间信息和色彩信息的滤波方式,在滤波过程中能够有效地保护图像内的边缘信息。
距离信息(距离越远,权重越小),色彩信息(色彩差别越大,权重越小),能有效保护边缘信息。
dst=cv2.bilateralFilter (src,d,sigmaColor,sigmaSpace,borderType)
d: 空间距离参数,表示以当前像素点为中心点的直径,
sigmaColor: 选取的颜色差值范围,该值确定了哪些像素点能够参加到滤波来,与当前像素点的像素值
sigmaSpace: 坐标空间中的sigma值。它的值越大,说明有越多的点能够参与到滤波计算中来。
示例:
import cv2
o=cv2.imread ( "lenanoise.png")
r=cv2.bilateralFilter (o,25,100,100)
cv2.imshow ( "original",o)
cv2.imshow ( "result",r )
cv2.waitKey ()
cv2.destroyAllWindows ()
特点: 更好的处理边缘信息,但是在处理噪声效果并不好。
结果:
使用自定义卷积核实现卷积操作。
dst=cv2.filter2D ( src,ddepth,kernel,anchor,delta,borderType)
ddepth: 处理结果图像的图像深度,-1表示使用与原始图像深度相同的图像深度
kernel: 卷积核,是一个单通道数组。
anchor: 锚点,默认值(-1,-1),表示当前点位于核的中心点的位置。
delta: 修正值,可选参数,在基础滤波的结果上加上该值作为滤波结果
常用形式:
dst=cv2.filter2D (src,ddepth,kernel)
示例:
设计9×9的卷积核大小,权重相等。
import cv2
import numpy as np
o=cv2.imread ( "bgra.png")
kernel=np.ones ( (9,9) ,np.float32)/81
r=cv2.filter2D ( o,-1,kernel)
cv2.imshow ("original",o)
cv2.imshow ("Gaussian",r)
cv2.waitKey ()
cv2.destroyAllWindows ()
结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。