【转】--双边滤波及其matlab代码
双边滤波及其matlab代码
参考:
https://blog.csdn.net/MoFMan/article/details/77482794
https://www.jianshu.com/p/8d11e26c9665
代码:https://blog.csdn.net/l_eop/article/details/81812277
高斯滤波:https://blog.csdn.net/nima1994/article/details/79776802
滤波
在介绍双边滤波以前,简要介绍一下滤波的过程.就像下面的动图所展示的,我们使用一个3×3的卷积核以步长为1对图像进行遍历,然后得到一幅新的经过滤波的图像.
其中每次滤波的时候只是在计算中心点的新的像素值.也就是说每次遍历移动一步其实只是在利用邻域(n×n)计算一个像素点的值,直到将图像中所有的点都卷积一次.
那么卷积的结果就是,在3×3的邻域内,权重矩阵和图像块之间各对应位置相乘然后将这些乘积相加得到红色中心点的新的像素值.
双边滤波
双边滤波是一种非线性的方法,同时考虑到了图像的空域信息和灰度相似性,以达到保边去噪的目的.双边滤波通过空域矩阵和值域矩阵形成一个新的权重矩阵,其中空域矩阵用来模糊去噪;值域矩阵用来保护边缘.
在介绍相关公式之前,我们定义(i,j)为中心点坐标,(k,l)为以(i,j)点为中心的邻域S内的任意一点.
空域矩阵中点(k,l)到点(i,j)的空间距离定义为:d(i,j,k,l)=exp−(i−k)2+(j−l)22σ2d(1)d(i,j,k,l)=exp-\frac{(i-k)^2+(j-l)^2}{2σ_{d}^2} (1)d(i,j,k,l)=exp−2σd2(i−k)2+(j−l)2(1)
值得注意的一旦σdσ_{d}σd确定了,那么空域矩阵中各点的值是始终不变的.
而值域矩阵定义为:r(i,j,k,l)=exp−∣∣f(k,l)−f(i,j)∣∣22σ2r(2)r(i,j,k,l)=exp-\frac{||f(k,l)-f(i,j)||^2}{2σ_{r}^2} (2)r(i,j,k,l)=exp−2σr2∣∣f(k,l)−f(i,j)∣∣2(2