本文介绍线性滤波(块滤波、平均值滤波和ngdgtx滤波)的五种常用图像滤波方式。 非线性滤波(中值滤波、双边滤波)。提醒,本文主要是算法公式,没有具体完整的代码。
一、线性滤波
一般来说,这三种线性滤波的原理是每个像素的输出值是输入像素的加权和。 其处理方式都是将图像的像素与对应的内核卷积,内核为权重(下图中中央3*3大小的图为内核),其作用是用权重分配原图像的像素。 简单地说,所谓卷积,是指选择与原图像的核相同大小的部分(下图左侧的对照部分),与对照相乘进行相加,将得到的值与原图像中的定位点(下图为中心点,右侧的对照部分) (关于卷积的解说是下图的转载链接)
卷积(图片为https://blog.csdn.net/Zou xy 09/article/details/49080029,入侵删除) ) ) ) ) ) ) ) )0) 0
所以,这三种过滤方式的不同就是卷积核的不同。 以下分别叙述。
1.1方框滤波和均值滤波的卷积核
如下图所示,k是块滤波器的核,可见,不管a具有什么值,矩阵中的每个元素都相等,卷积时像素的权重相同。 平均滤波是将块滤波规范化的特殊处理,在下图中,normalize=ture时的k是平均滤波的核心。 我个人认为块滤波和平均滤波没有实质性的区别。
1.2ngdgtx滤波的卷积核
首先,我们来看看一维的ngdgtx函数。 如下图所示,a表示尖峰的高度,b表示尖峰中心的x坐标,c表示标准方差,表示尖峰的宽度。 图3示出了“3”的原则,意味着定义域的范围是正的无限到负的无限,但曲线的大部分在“-3 - 3”之间。
一维ngdgtx函数(图1,2为https://blog.csdn.net/jorg _ Zhao/article/details/52687448,入侵删除) ) ) ) ) ) ) )
其次,=0时服从二维正态分布的二维ngdgtx函数,即x、y是无关的。 类似地,参考一维ngdgtx函数,a表示振幅,即高度; x。 y。 是中心点坐标; y是方差,表示底面两个方向的宽度。
二维ngdgtx函数(https://blog.csdn.net/jorg _ Zhao/article/details/52687448,入侵删除) ) ) ) ) ) ) )
在计算ngdgtx核时,由于在x、y两个方向上我们所需的宽度完全一致,所以可以取x=y。 此时,公式为
根据上述公式可以求出ngdgtx核,代码如下
/* * * * * * * ngdgtx卷积成核函数* * * * * * * * * * * * * * * * * * * * *第一参数Guass为ngd gtx * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * const int size,cconst int //圆周率赋值int center=size/2; 双尾sum=0; for(intI=0; isize; I ) for(intj=0; jsize; j ) ) guass[I](j )=(1/) pi*sigma*sigma ) ) exp(-) (j - center ) ) ) j - center ) ) j ) }for(intI=0; isize; I//归一化(for ) intj=0; jsize; j ) { Guass[i][j] /=sum; } }选择sigma和size的值:一般情况下,size=sigma*3 1
为“3σ”原则。
二、非线性滤波
2.1中值滤波
基本思想:用像素点邻域灰度值的中值来代替该像素点的灰度值。
如下图,将中心点周围被称为邻域的像素点(包括自身)进行排序,取排序后9个像素值中间值作为当前新的像素值。
中值滤波原理图(图片转载自https://blog.csdn.net/qq_36359022/article/details/80116137,侵删)
2.2双边滤波
基于空间分布的ngdgtx滤波函数,其核为一个与空间距离相关的ngdgtx函数与一个灰度距离相关的ngdgtx函数相乘所得。简单说就是ngdgtx滤波的加强版,在ngdgtx滤波中,只有关于空间距离的权重,离中心点越远,权重越小,而双边滤波在此基础上添加了关于灰度距离的权重,邻域中的像素灰度值越接近中心点灰度值,权重越大。
下面开始来讲权重的计算获取。
空间距离:指的是当前点与中心点的欧式距离。空间域ngdgtx函数其数学形式为:
(i, j)代表输出点;(k, l)代表(多个)输入点;sigma为空间域标准差。
这也叫定义域核的表示形式,叫这个名字的原因,个人理解是:这里的权重只和平面位置距离有关,只和x、y有关。同时可以发现,这公式其实就是ngdgtx滤波的公式。
灰度距离:指的是当前点灰度与中心点灰度的差的绝对值。值域ngdgtx函数其数学形式为:
(i, j)代表输出点;(k, l)代表(多个)输入点;sigma为值域标准差。
同样,这也叫值域核的表示形式,理由和上面类似,其所求结果r只与灰度值有关。
将上述两公式相乘就可以得到,依赖数据的双边滤波权重函数:
至此,即得到了双边滤波的权重,最后在将权重与像素对应相乘相加再除以权重和,即求出最后输出像素值。
再求出权重后,如果先归一化,最后这一步其实是在求卷积。个人认为,双边滤波的算法流程也是先求出一个核,只是这个核是在ngdgtx核的基础上乘了一个代表灰度相似程度的一个权重,最后在进行类似卷积操作。
以上,便是部分了。本人小白一枚,有错还请指出,欢迎探讨。
转载于:https://www.cnblogs.com/wy1996/p/10858376.html