高斯滤波opencv-python

  • Post author:
  • Post category:python



高斯滤波cv.GaussianBlur()




前言


高斯噪音在图像采集地过程中比较容易映入高斯噪音,因此针对高斯噪音的高斯滤波也被广泛应用于图像去噪。





一、高斯滤波是什么?


高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

高斯模糊技术生成的图像,其视觉效果就像是经过一个半透明屏幕在观察图像,这与镜头焦外成像效果散景以及普通照明阴影中的效果都明显不同。高斯平滑也用于计算机视觉算法中的预先处理阶段,以增强图像在不同比例大小下的图像效果(参见尺度空间表示以及尺度空间实现)。从数学的角度来看,图像的高斯模糊过程就是图像与正态分布做卷积。由于正态分布又叫作高斯分布,所以这项技术就叫作高斯模糊。

图像与圆形方框模糊做卷积将会生成更加精确的焦外成像效果。由于高斯函数的傅立叶变换是另外一个高斯函数,所以高斯模糊对于图像来说就是一个低通滤波操作。

高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。



二、cv.GaussianBlur()



函数原型


代码如下(示例):

dst = cv.GaussianBlur(src,
					 ksize
					 sigmaX
					 [,dst
					 [,sigmaY
					 [,borderType]]])
#src:输入图像
#ksize:高斯滤波器的大小
#sigmaX:x方向上的高斯滤波器标准差
#dst:输出图像
#sigmaY:y方向上的高斯滤波器标准偏差
#borderType:像素边界外推法标志

该函数能够根据输入参数自动生成高斯滤波器,实现对图像的高斯滤波,并将滤波后的图像返回。该函数的第一个参数和第四个参数与前面的均值滤波等滤波函数没有区别,都是具有相同的数据类型、通道数和尺寸。第二个参数ksize中ksize.width与ksize.height可以不相同,但是两者必须是正数且为奇数,此外,ksize可以为0,为零时,函数会根据输入的标准偏计算滤波器的大小。当参数sigmaY为零时,表示y方向的标准偏差与x方向上的相同,当两个参数都为零时,根据输入的滤波器大小计算两个方向的标准差数值。



三、cv.getGaussianKernel()



函数原型


代码如下(示例):

retval = cv.getGaussianKernel(ksize,
							  sigma
							  [,ktype])
#ksize:高斯滤波器的半径
#sigma:高斯滤波的标准差
#ktype:滤波器系数的数据类型,可以是float32或者float64,默认数据类型为float64


该函数用于生成指定大小的高斯滤波器,将生成结果存放于ksize x 1的ndarray数组对象中并返回。如果函数中的sigma为一个附=负数时,函数会根据高斯滤波器的半径计算标准差,其计算方式如下:

sigma = 0.3[0.5(ksize-1)-1+0.8]

生成一个二维的高斯滤波器需要调用两次cv.getGaussianKernel()函数,将x方向上的一维高斯滤波器和y方向上的一维高斯滤波器相乘,最后得到一个二维高斯滤波器。

例如x方向上的一维高斯滤波器G=[ 0.2741 0.4519 0.2741]和y方向上的H = [ 0.2741 0.4519 0.2741]T相乘会得到一个二维高斯滤波器:

D=G x H得到的结果近似于[ [ 0.07513 0.1239 0.07513],[ 0.1239 0.2042 0.1239],[ 0.07513 0.1239 0.7513] ]




总结


高斯滤波对于高斯噪音的去除效果比较好,高斯滤波又称高斯模糊,正如其名,去噪的同时,也给图像带来了模糊,失去了图像的细节信息,并且滤波器越大,图像会变得更加模糊。



参考文章


1、链接:

https://blog.csdn.net/qq_37469992/article/details/78023835

.

2、冯振、陈亚萌 基于python的opencv4详解 【M】



版权声明:本文为weiwei152433原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。