传统的高斯滤波,均值滤波,为局部滤波,即对周围邻域的点加权生成当前点,加权因子反应出周围点对当前点的影响,这些加权因子基于某种理论获得,如高斯滤波基于低通,均值滤波认为点与点之间的影响是均匀的。
1.经典的Non-Local Means 滤波
Non-local Means 非局部均值去噪滤波可以视为局部均值滤波的特例,它的目的是使用与当前点纹理类似的区域,对当前点加权。也即加权因子,是基于被加权点与当前点的邻域的相似性产生,即:
其中I是一个较大范围的搜索/加权框,w(x,y)是依赖邻域【黑灰色部分】算出的权重:
w(x,y)一般定义为一个与欧式距离(2范数)相关的函数,设x,y的邻域宏块的欧式距离为d,即
d=||block(x)-block(y)||/block_size
则y加权到x点的加权因子为
w(x,y)=exp(-(d*d/(h*h)))
h为衰减因子,h越小,加权因子越小,则加权点对当前点的影响越小,一般边缘保持得好但是噪声会严重,反之则边缘保持差图像更加光滑。
实际操作中,要更新当前点,先计算出以当前点为中心的搜索框I所有点的加权因子,取最大的加权因子付给当前点位置,然后对于这个同搜索框尺寸加权矩阵W进行归一化,最终当前点的结果为:
p=sum(W.*I)
计算欧式距离时,有时会考虑周围点对中心点的影响,会利用核函数对欧式距离加权,即加权因子重写为为:
w(x,y)=exp(-(k*d*d/(h*h)))
使用核函数对距离进行加权的matlab代码为:
clc;
clear all;
close all;
%--