自然图像都存在噪声,噪声和边缘在局部方差方面表现相似,一般的滤波器无法区分噪声和边缘,于是对其统一处理,因此很多情况下,滤波的同时,边缘也被处理模糊掉了。保边滤波器(Edge Preserving Filter)是指在滤波过程中能够有效的保留图像中的边缘信息的一类滤波器。
常见的保边滤波器有如下几种:双边滤波(Bilateral filter)、引导滤波(GuidedFilter)、加权最小二乘法滤波器(WLS)、非均匀局部滤波器(NLM)、双指数边缘平滑滤波器(BiExponentialEPF)、选择性模糊和表面滤波。
Bilateral Filter
Bilateral的意思是:Affecting or undertaken by two sides equally,表示由双方(边)平等共同决定。
双边滤波器中地位平等的双边即是指滤波器的最终结果由像素值(值域)和像素位置(空域)共同决定。
空域的滤波器,就是采用的高斯滤波器,权重由像素点到中心的距离决定,形式为:
而值域的滤波器,权重由对应窗内像素和值域中心两个像素值决定,两个像素,值相差越小,那么约不可能是边缘,那么越应该进行平滑处理,也就是应该提高其在滤波器中的权值,像素值相差越大则越有可能是边缘(类似空域中距离较远),应该尽量保留。
双边滤波器就是由上述两个滤波器共同决定,最终形式为:
每个位置的权重由空间位置和像素值共同决定,这就是双边滤波。
双边滤波可以很简答的实现(除此之外还有快速双边滤波,解决双边滤波计算效率的问题):
function [ tonedMap ] = navieBilateral( radMap,dw,rw,dsigma,rsigma) % NAVIEBILATERAL Summary of this function goes here % Detailed explanation goes here % radmap为照度图像,dw和dr分别为空域和值域的滤波器大小 % dsigma和rsigma分别为空域和值域的高斯sigma因子 % 首先生成空域的高斯滤波器权重因子 [x,y] = meshgrid(-dw:dw,-dw:dw); g1 = exp(-(x.^2+y.^2)/(2*dsigma^2)); % 对图像进行对称扩张,保证在图像的边缘仍然可以进行处理 pw = max(dw,rw); padradMap = padarray(radMap,[pw pw],'symmetric'); dim = size(padradMap); tonedMap = zeros(dim(1)-pw,dim(2)-pw); for i= pw+1:dim(1)-pw for j=pw+1:dim(2)-pw I = padradMap(i-rw:i+rw,j-rw:j+rw); %取相应图像块 g2 = exp(-(I-padradMap(i,j)).^2/(2*rsigma^2)); %值域滤波因子生成 w = g1(:).*g2(:); %生成双边因子 tonedMap(i-pw,j-pw) = sum(w.*I(:))/sum(w); end end end
GuidedFilter
引导滤波,顾名思义,就是给一副引导图像,滤波核由引导图像和原图共同决定。引导图像来告诉滤波器哪里是平坦区,哪里是边缘。
因为自然图像中噪声一般周围的像素梯度变化较大,而且以其为中心,向四周的梯度大体相似。而边缘出现了梯度的阶跃,而且梯度最大的方向在边缘的法线方向,其它远离法线的方向上梯度逐渐变小。对引导滤波来说,从下图中可以看出,引导滤波的输入为两个,一个是真实输入,另一个是引导图像,输出q是这二者的产物。
q=aI+b
这里的a和b不是固定的,对于噪声,a~=0 b=miu ,倾向于均值滤波,对于边缘 a~=1 b=0,倾向于保留边缘,那么设计上如何判断噪声呢?通过输入的指导图像可以进行判定,根据判定公式
在同一边是(Ii-miu)(Ij-miu)为正,权重高,不同边时权重低:
挖坑,有空填
WLS
NLM
BiExponenitialEPF
Local Laplace Filter
选择性模糊
表面滤波
这是哪位大神在普度众生了。。。
挖的坑可不可以早点填呢