一、原理
高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小。
如下图所示为21*21高斯滤波,离中心越远的像素点占的权重越小。
二维高斯函数如下所示
高斯滤波核实际上是对高斯函数的离散化,以3 * 3的高斯滤波核为例,(x,y)为点坐标,
将以上点坐标代入高斯公式可得3 * 3高斯滤波核
sigma的作用:如下图所示,随着sigma(标准差)的增大,高斯滤波器对领域的考虑越多,因此生成的图像越模糊,极限情况下,高斯滤波器接近于均值滤波器。
二、手搓代码
defgaussian(img, kernel_size, sigma):
gaussian_kernel = np.zeros((kernel_size, kernel_size))print(gaussian_kernel.shape)sum=0for i inrange(kernel_size):for j inrange(kernel_size):
gaussian_kernel[i][j]= math.exp((-1/2)*(np.square(i -(kernel_size -1)/2)+ np.square(j -(kernel_size -1)/2))/ sigma**2)/(2* math.pi * sigma**2)sum=sum+ gaussian_kernel[i][j]
gaussian_kernel = gaussian_kernel /sum
rows = np.size(img,0)
columns = np.size(img,1)for i inrange(0, rows - kernel_size +1):for j inrange(0, columns - kernel_size +1):
img[i][j]= np.sum(np.sum(gaussian_kernel * img[i:i + kernel_size, j:j + kernel_size]))return img
三、调用函数
img_blurr = cv2.GaussianBlur(img,(11,11),0)
参数分别为源图像、高斯核大小、x方向的标准差(y方向的标准差不设的话与x方向的相等)
当第三个参数设为0时,会自动计算合适的标准差,计算公式如下
版权归原作者 二粒砂 所有, 如有侵权,请联系我们删除。