opencv图像模糊处理,opencv图像平移
图像平滑过程滤除图像内部的噪声,同时尽可能保留图像的原始信息。这个过程称为图像平滑,得到的图像称为平滑图像。
图像平滑会对图像中像素值与周围像素值相差较大的像素进行处理,将其值调整为周围像素的近似值。
图像平滑的基本原理是将噪声所在像素的像素值视为其周围相邻像素的近似值。有很多方法可以近似。
均值滤波、平方滤波、高斯滤波、中值滤波、双边滤波、2D卷积(自定义滤波)图像平滑处理对应英文平滑图像。
图像平滑通常伴随着图像模糊,所以图像平滑有时也叫图像模糊,图像模糊对应的英文是Blurring Images。
图像过滤的英文单词是Images Filtering。
平均滤波将当前像素值替换为当前像素点周围n个n像素值的平均值。
用这种方法遍历处理后图像中的每一个像素,就可以完成整幅图像的平均滤波。
在OpenCV中,实现均值滤波的函数是cv2.blur()。
其语法格式为:
DST=CV2.blur (src,k size,anchor,border type) DST为返回值,表示平均滤波后得到的处理结果。Src是要处理的图像,即原始图像。它可以有任意数量的通道,并且可以独立处理每个通道。图像类型应为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F之一。k是滤波器内核的ksize。滤波核大小是指平均处理过程中其邻域图像的高度和宽度。比如它的值可以是(5,5),表示55大小的邻域均值是图像均值滤波处理的结果。anchor是锚点,其默认值为(-1,-1),表示计算当前平均值的点位于核的中心。使用默认值。在特殊情况下,可以指定不同的点作为锚点。BorderType是边框样式,它决定如何处理边框。一般不需要考虑这个值的取值,用默认值就可以了。
一般使用均值滤波函数时,可以直接采用锚点anchor和边框样式borderType的默认值。
因此,函数cv2.blur()的一般形式是:
Dst=cv2.blur( src,ksize)示例:
导入cv2
o=cv2 . im Read( image \ \ Lena noise . png )#读取要处理的图像。
R=cv2.blur(o,(5,5)) #使用模糊函数进行处理
cv2.imshow(original ,o)
cv2.imshow(result ,r)
cv2.waitKey()
2.cv2.destroyAllWindows () box过滤框过滤不计算像素平均值。
在块滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值还是邻域像素值之和的平均值。
实现boxFilter的函数是cv2.boxFilter()
DST=CV2.boxfilter (src,d depth,k size,anchor,normalize,border type) DST是返回值,表示盒过滤后得到的处理结果。Src是要处理的图像,即原始图像。它可以有任意数量的通道,并且可以独立处理每个通道。图像类型应为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F之一。Ddepth是已处理图像的图像深度。通常,使用-1表示使用与原始图像相同的图像深度。k是滤波器内核的ksize。滤波核大小指的是在滤波过程中选择的邻域图像的高度和宽度。Anchor是锚点,其默认值为(-1,-1),表示计算当前平均值的点位于核的中心。Normalize表示在过滤时是否进行规格化(这里是将计算结果规格化为当前像素值范围内的值)。此参数是一个逻辑值,可能为真(值为1)或假(值为0)。当参数normalize=1时,意味着该区域应该除以相邻像素值的总和。当参数normalize=0时,意味着直接使用相邻像素值的和,而不是归一化。BorderType是边框样式,它决定如何处理边框。一般情况下,使用box filter函数时,可以直接采用参数anchor、normalize和borderType的默认值。
箱式过滤器函数使用normalize参数的默认值。默认情况下,该值为1,这意味着需要规范化。
因此,函数cv2.boxFilter()的常见形式是:
DST=CV2。Boxfilter (src,d depth,k size)高斯滤波器,在进行均值滤波和块滤波时,其邻域内每个像素的权重相等。高斯滤波时,中心点的权值会增大,远离中心点的权值会减小。在此基础上,将计算邻域中每个像素值的不同权重之和。
卷积核中的所有值都不再是1。
实现高斯滤波的函数是cv2。高斯布朗勒()。
该函数的语法格式为:
ST=CV2。高斯模糊(src,k size,sigmax,sigmay,border type) DST为返回值,表示高斯滤波后得到的处理结果。Src是要处理的图像,即原始图像。它可以有任意数量的通道,并且可以独立处理每个通道。图像类型应为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F之一。k是滤波器内核的ksize。滤波器核大小是指在滤波过程中其邻域图像的高度和宽度。注意,滤波器核的值必须是奇数。SigmaX是卷积核在水平方向(X轴方向)的标准差,控制着权重比。May是卷积核在垂直方向(y轴方向)的标准差。如果该值设置为0,则只采用sigmaX的值;如果sigmaX和sigmaY都为0,则由ksize.width和ksize.height计算。
其中包括:
Max=0.3 [(k大小。width-1)0.5-1]0.8 Sigmay=0.3[(k大小。height-1 ) 0.5-1] 0.8 BorderType是边框样式,这个值决定了如何处理边框。一般情况下,不需要考虑这个值,用默认值即可。
SigmaY和borderType是可选参数。sigmaX是一个必需的参数,但是可以设置为0,让函数自己计算SigmaX的具体值。
官方文件建议明确指定三个参数的值,即ksize、sigmaX和sigmaY,以避免未来函数修改可能导致的语法错误。当然,在实际处理中,可以明确指定sigmaX和sigmaY为默认值0。
函数cv2的常见形式。GaussianBlur()是:
DST=CV2。高斯模糊(src,k大小,0,0)示例:
导入cv2
o=cv2 . im read( image \ \ Lena noise . png )
r=cv2。高斯布朗(o,(5,5),0,0)
cv2.imshow(original ,o)
cv2.imshow(result ,r)
cv2.waitKey()
2.cv2.destroyAllWindows()中值滤镜用邻域内所有像素值的中值替换当前像素的像素值。
中值滤波取当前像素及其相邻像素的像素值(总共有奇数个像素),对这些像素值进行排序,然后取中间位置的像素值作为当前像素的像素值。
中值滤波的函数是cv2.medianBlur()
DST=CV2。Medianblur (src,ksize) DST为返回值,表示中值滤波后的处理结果。Src是要处理的图像,即源图像。它可以有任意数量的通道,并且可以独立处理每个通道。图像类型应为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F之一。k是滤波器内核的ksize。滤波器核大小是指在滤波过程中其邻域图像的高度和宽度。注意,内核大小必须是大于1的奇数,比如3、5、7等。示例:
导入cv2
o=cv2 . im read( image \ \ Lena noise . png )
r=cv2.medianBlur(o,3)
cv2.imshow(original ,o)
cv2.imshow(result ,r)
cv2.waitKey()
2.cv2.destroyAllWindows()没有均值处理,不存在中值滤波中均值滤波等滤波方法带来的细节模糊问题。在中值滤波过程中,噪声成分很难被选取,因此可以在几乎不影响原图像的情况下去除所有噪声。但是,由于需要排序等操作,中值滤波需要大量的计算。
双边滤波双边滤波是一种综合考虑空间信息和颜色信息的滤波方法,能够在滤波过程中有效保护图像中的边缘信息。
双边滤波在计算像素的新值时,不仅考虑了距离信息(距离越远,权重越小),还考虑了颜色信息(色差越大,权重越小)。
双边滤波综合考虑距离和颜色的权重结果,既能有效去除噪声,又能更好地保护边缘信息。
在双边滤波中,当处于边缘时,与当前点颜色相近(颜色距离很近)的像素会被赋予较大的权值;而与当前颜色差异较大(色距较远)的像素会被赋予较小的权重(极端情况下权重可能为0,这样直接忽略这一点),从而保护边缘信息。
实现双边滤波的函数是cv2.bilateralFilter()
DST=CV2。双边过滤(src,d,sigma color,sigma space,border type) DST为返回值,表示双边过滤后的处理结果。Src是要处理的图像,即原始图像。它可以有任意数量的通道,并且可以独立处理每个通道。图像类型应为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F之一。d是在滤波期间选择的空间距离参数,其中它表示作为中心点的当前像素的直径。如果该值为非正值,将根据参数sigmaSpace自动计算。如果过滤空间大(d 5),速度慢。因此,在实时应用中,建议d=5。对于较大噪声的滤波,可以选择D=9。
SigmaColor是滤波时选择的色差范围,它决定了哪些周围像素可以参与滤波。* *与当前像素的像素值差小于color的像素可以参与当前滤波。* *值越大,其周围可以参与运算的像素就越多。当值为0时,过滤没有意义;当值为255时,指定直径内的所有点都可以参与运算。SigmaSpace是坐标空间中的sigma值。其值越大,参与过滤计算的点就越多。当d 0时,不考虑sigmaSpace的值,d指定邻域大小;否则,d与sigmaSpace的值成正比。BorderType是边框样式,它决定如何处理边框。一般情况下,不需要考虑这个值,用默认值即可。为简单起见,两个sigma(sigmaColor和sigmaSpace)值可以设置为相同。如果它们的值很小(比如小于10),过滤效果就不明显;如果它们的值很大(比如大于150),过滤效果会很明显,会产生卡通效果。
在函数cv2.bilateralFilter()中,参数borderType是可选的,其他所有参数都是必需的。
示例:
双边滤波函数cv2.bilateralFilter()用于对原始图像进行滤波。
导入cv2
o=cv2 . im read( image \ \ Lena noise . png )
r=cv2.bilateralFilter(o,25,100,100)
cv2.imshow(original ,o)
cv2.imshow(result ,r)
cv2.waitKey()
cv2.destroyAllWindows()
双边滤波去噪效果不好。
双边滤波的优势在于对边缘信息的处理。
2D卷积的大多数滤波方法中使用的卷积核具有一定的灵活性,可以方便地设置卷积核的大小和值。
然而,有时需要使用特定的卷积核来实现卷积运算。
OpenCV中允许用户定义卷积核来实现卷积运算。
使用自定义卷积核的卷积运算的函数是cv2.filter2D()。
其语法格式为:
DST=CV2.filter2D (src,d depth,kernel,anchor,delta,border type) DST为返回值,表示卷积后得到的处理结果。Src是要处理的图像,即原始图像。它可以有任意数量的通道,并且可以独立处理每个通道。图像类型应为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F之一。Ddepth是已处理图像的图像深度。通常,使用-1表示使用与原始图像相同的图像深度。Kernel是卷积核,是单通道数组。如果在处理彩色图像时要对每个通道使用不同的核,就必须对彩色图像进行分解,使用不同的核来完成运算。Anchor是锚点,默认值为(-1,-1),表示当前卷积点位于核的中心。使用默认值。在特殊情况下,可以指定不同的点作为锚点。Delta是校正值,这是可选的。如果该值存在,它将作为最终计算结果添加到基本计算结果中。BorderType是边框样式,该值决定何时处理边框。通常,默认值就足够了。一般在使用卷积函数cv2.filter2D()时,可以直接使用参数anchor、校正值delta和边框样式borderType的默认值。
因此,函数cv2.filter2D()的常见形式是:
dst=cv2.filter2D( src,ddepth,kernel)
风暴中的白杨
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。