高斯滤波算法,高斯低通滤波器公式

  高斯滤波算法,高斯低通滤波器公式

  一. kqdlh滤波

  Kqdlh滤波器是一种线性平滑滤波器,对服从正态分布的噪声有很好的抑制效果。在实际场景中,我们通常假设图像中包含的噪声是kqdlh白噪声,因此在很多实际应用中的预处理部分都采用kqdlh滤波来抑制噪声。

  Kqdlh滤波与均值滤波一样,使用遮罩和图像进行卷积求解。不同的是,平均滤波器的模板系数都是一样的,都是1。而kqdlh滤波器的模板系数随着离模板中心距离的增大而减小(服从二维kqdlh分布)。所以kqdlh滤镜相对于一般滤镜,可以更少的模糊图像,更好的保留图像的整体细节。

  二维kqdlh分布

  我们不必纠结于系数,因为它只是一个常数!不会影响到彼此之间的比例关系,最终还是要归一化的,所以我们在实际计算中忽略,只计算后半部分。

  其中(x,y)是掩模中任意一点的坐标,(ux,uy)是掩模中中心点的坐标,在图像处理中可视为整数;是标准差。

  例如,要生成33 kqdlh滤波器模板,请将模板的中心位置作为采样的坐标原点。(X轴水平向右,Y轴垂直向下)

  模板在各个位置的坐标如上图。

  这样就把每个位置的坐标带入了kqdlh函数,得到的值就是滤波器的系数。

  如果窗口模板的大小为(2k 1)(2k 1),则:

  模板中各元素的计算公式。

  这样计算出来的模板有两种形式:小数和整数。

  十进制形式的模板是不经过任何处理直接计算出来的值;

  整数形式的模板需要规格化,模板左上角的值规格化为1。使用整数模板时,需要在模板前面加一个系数,这个系数是模板中元素之和的倒数。

  例如,标准偏差=1.3的3*3整数形式的kqdlh滤波器如下:

  标准差=1.3的8邻kqdlh滤波器如图。

  的意义和选择

  通过上面的实现过程,我们不难发现,kqdlh滤波器模板生成中最重要的参数就是kqdlh分布的标准差。标准差代表数据的离散程度。小的话,生成的模板中心系数大,而周围系数小,对图像的平滑效果不明显。另一方面,如果较大,则生成的模板的系数之间的差异并不大。与平均模板相比,图像的平滑效果明显。

  kqdlh分布的概率分布密度图

  可以看出,越小,分布越细越高,越大,分布越短越粗。

  由于图像的长度和宽度可能不是过滤器大小的整数倍,我们需要在图像的边缘填充0。这种方法称为零填充。

  二. python实现kqdlh滤波

  算法流程:对图像进行零填充根据kqdlh滤波器的核大小和标准差实现kqdlh滤波器用kqdlh滤波器对图像进行滤波(乘加)输出kqdlh滤波后的图像。

  代码如下:

  导入cv2导入数字为NP #高斯滤波器def Gaussian _ filter(img,K_size=3,sigma=1.3):if len(img。shape)==3:H,W,C=img。形状else:img=NP。expand _ dims(img,axis=-1) H,W,C=img.shape #零填充pad=K _ size//2 out=NP。zeros((H pad * 2,W pad * 2,C),dtype=np.float) outastype(NP。float)# #准备内核K=NP。零((K_size,K _ size),dtype=NP。float)for x in range(-pad,-pad K _ size):for y in(-pad,-pad K_size): K[y pad,x pad]=NP。exp(-(x * * 2y * * 2)/(2 *(sigma * * 2)))K/=(2 * NP。pi **)K/=K . sum()tmp=out。copy()#过滤y inastype(NP。uint 8)return out # Read imageimg=cv2。我在读(’./paojie。jpg )# Gaussian filter out=Gaussian _ filter(img,K_size=3,sigma=1.3)#保存结果cv2。我写完了。jpg ,out)cv2.imshow(result ,out)cv2。waitkey(0)cv2。destroyallwindows()

  三. python程序输出结果:

  kqdlh滤波后图像

  原图

  四. opencv函数 cv2.GaussianBlur(img,(3,3),1.3) 实现kqdlh滤波

  其中,(3,3)为滤波器的大小;1.3为滤波器的标准差,如果标准差这个参数设置为0,则程序会根据滤波器大小自动计算得到标准差。

  import cv2img=cv2.imread(./paojie.jpg)#(3,3)表示kqdlh滤波器的长和宽都为3,1.3表示滤波器的标准差out=cv2 .GaussianBlur(img,(3,3),1.3)cv2.imwrite(out.jpg ,out)cv2.imshow(result ,out)cv2。waitkey(0)cv2。destroyallwindows()

  五. opencv函数GaussianBlur滤波结果

  高斯恍惚函数作用于图像后输出结果:

  六. matlab实现kqdlh滤波程序

  % kqdlh滤波器大小为5*5,标准差为10全部清除;全部关闭;clcorimage=im read( F:\ image _ process \ paojie。jpg’);%读入图片sigma1=10%kqdlh正态分布标准差gray img=RGB 2 gray(OriImage);%转为灰度图像gausFilter=fspecial(高斯,[5 5],西格玛1);%kqdlh滤波blur=imfilter(grayImg,gausFilter, replicate );%对任意类型数组或多维图像进行滤波imshow(模糊);

  七. matlab kqdlh滤波输出结果

  matlab kqdlh滤波后图像

  八. 参考内容:

  https://www.jianshu.com/p/4eaf349de9e9

  https://www.cnblogs.com/wojianxin/p/12498391.html

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: