保边滤波器(Edge Preserving Filters)

保边滤波器(Edge Preserving Filter)是指在滤波过程中能够有效的保留图像中的边缘信息的一类特殊滤波器。其中双边滤波器(Bilateral filter)、引导滤波器(Guided image filter)、加权最小二乘法滤波器(Weighted least square filter)为几种比较广为人知的保边滤波器。下面对每种滤波器进行一一介绍。双边滤波器加权最小二乘法滤波器
摘要由CSDN通过智能技术生成

保边滤波器(Edge Preserving Filter)是指在滤波过程中能够有效的保留图像中的边缘信息的一类特殊滤波器。其中双边滤波器(Bilateral filter)、引导滤波器(Guided image filter)、加权最小二乘法滤波器(Weighted least square filter)为几种比较广为人知的保边滤波器。下面对每种滤波器进行一一介绍。


双边滤波器

Bilateral的意思是:Affecting or undertaken by two sides equally,表示由双方(边)平等共同决定,有点类似于地位平等的双边谈判的感觉。双边滤波器中地位平等的双边即是指滤波的最终结果由像素值(值域)和像素位置(空域)来共同决定。最为常见的高斯平滑滤波器就是由像素位置单边决定的滤波器,其表达式如下:

g1(i,j)=k,lf(k,l)d(i,j,k,l)k,ld(i,j,k,l)

其中的 w(i,j,k,l) 为权重系数
d(i,j,k,l)=exp((ik)2+(jl)22σ2d)

双边滤波器中的一边即为上述常见的高斯平滑滤波器,两个像素物理距离越大则权值越小,反之则权值越大。双边滤波器中另一边则由像素值值域决定,两个像素,值相差越小,那么越不可能是边缘,那么越应该对其进行平滑处理,也就是应该提高其在滤波器中的权值(类似于空域中距离越近)而反之,像素值相差越大则越有可能是边缘,则应该尽力保留(类似于空域中距离越远),类比上面的公式,可以得到值域的高斯滤波器如下:

g2(i,j)=k,lf(k,l)r(i,j,k,l)k,lr(i,j,k,l)

r(i,j,k,l)=exp(||f(i,j)f(k,l)||22σ2r)

双边滤波器由上述两个滤波器共同决定,因此其最终形式为:

bilateral_filter(i,j)=k,lf(k,l)w(i,j,k,l)k,lw(i,j,k,l)

每个位置的权重由上述两个滤波器的相应权重共同决定:
w(i,j,k,l)=exp((ik)2+(jl)22σ2d||f(i,j)f(k,l)||22σ2r)

使用最为原始的Matlab代码实现上述滤波器:

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

双边滤波器利用了一个值域的高斯函数来调整滤波器在遇到图像边缘时的表现,使其在图像的一般区域表现出平滑性,同时在边缘区域尽量消除其平滑性,我们通过一个简单的实验来理解这一过程。

双边滤波器进行HDR图像压缩

双边滤波器可以用于HDR图像压缩,其压缩原理很简单,HDR图像经过双边滤波器滤波以后得到一个Base layer,原始图像与Base layer之差则为Detail layer,对base layer进行压缩以后再将detail layer叠加上去就可以得到压缩后的图像。

% Implementation of "Fast Bilateral Filtering for the Display of High-Dynamic-Range Images"
% Input "radmap" must be of type double!
function tonedImage = toneMapDurand(radmap,dw,rw,dsigma,rsigma,contrast)
    %首先分离图像的baselayer和detaillayer
    radmap = log10(radmap);
    base = navieBilateral(radmap,dw,rw,dsigma,rsigma);
    detail = radmap - base;
    logmax = max(base(:));
    logmin = min(base(:));
    compressionFactor = log10(contrast)/(logmax-logmin);
    log_absolute_scale =  logmax*compressionFactor;
    log_compressed = base * compressionFactor + detail  - log_absolute_scale;
    tonedImage = 10.^(log_compressed);     
end

上述过程中,通过双边滤波器所得到的base layer其实就是HDR图像中存在的一些明显的大起伏,举个例子,HDR图像就像我国地势一样,动态分布很大,错综复杂,任何一个地区都是高低起伏不定的,但是通过双边滤波器以后,可以把我国的地势大体看成西部高原,中部丘陵,东部平原,这三个台阶就是所谓的base layer。在base layer的基础上,一些局部的高低变化,比如平原地区的小山峰,丘陵地区的盆地,这些就是detail layer。对HDR图像的压缩,就是压缩西部高原,中部丘陵,东部平原三者之间的高度差。

快速双边滤波器(Fast bilateral filter)

原始双边滤波器的计算量是很大的,因为针对每一个像素在其领域都要在值域计算高斯函数来得到权重因子,这也限制了其发展。

引导滤波器

引导滤波器是利用优化方法解决保边滤波的问题。所谓保边,也就是保持梯度的相对性,引导滤波器的一个重要假设就是认为,保边滤波后的结果和引导图像在滤波窗口内呈现线性关系:

qi=akIi+bk,iωk

其中, I 是引导图像, q 是输出, ω 是以 k 为中心像素的窗口, a b 都为该窗口对应的线性系数。上面的线性关系自然保证了图像梯度的相对性不变,因为对图像两边求导可以得到:
q=aI

但是,如果图像中任何一个地方的系数 a b 都相同,那么无异于对整个图像进行了一个线性变换,并没有起到保边滤波的功效。要达到保边滤波的效果, 我们期望 a
  • 15
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值