在图像滤波中,人们最希望的就是可以将图像中的噪声过滤掉的同时,能够让边缘尽可能的保持。噪声属于高频信号,而边缘其实也是一种高频信号,所以一般的滤波器,比如高斯模糊,均值模糊,都是一种低通滤波器,能够将高频信号做平滑处理,这些kernel在将噪声滤掉的同时,也会将边缘模糊掉,所以保边滤波器的设计一直是图像滤波的重点。

导向滤波是非常有名的一种保边滤波器,与传统的高斯滤波,均值滤波独立于图像的内容不同,导向滤波的 kernel 基于一个 guided image, 简单来说,就是给定一个 guided image II, 一个 input image pp, 我们能够得到一个 output image qq .

qi=∑jWijpj

q_{i} = \sum_{j} W_{ij} p_{j}

i,ji, j 表示像素的索引,WijW_{ij} 是一个滤波系数,由 guided image II 决定,而与输入图像 pp 无关。双边滤波器就是类似这样的一种滤波器,我们可以定义:

Wbfij(I)=1Kiexp(−|xi−xj|2σ2s)exp(−|Ii−Ij|2σ2r)

W_{ij}^{bf}(I) = \frac{1}{K_{i}}exp(-\frac{|x_{i}-x_{j}|^2}{\sigma_{s}^{2}}) exp(-\frac{|I_{i}-I_{j}|^2}{\sigma_{r}^{2}})  

当 II 和 pp 一样的时候,上式就是最原始的双边滤波器的表达式,xi,xjx_{i}, x_{j} 表示像素的坐标,KiK_{i} 是一个归一化的系数,σs\sigma_{s} 控制像素空间的相似性, σr\sigma_{r} 控制像素值的相似性。

接下来,我们可以定义导向滤波器以及它的核函数,具体的定义形式如下:

qi=akIi+bk,∀i∈wk

q_{i} = a_{k}I_{i} + b_{k}, \forall i \in w_{k}

这个表达式意味着,在一个局部区域 wkw_{k},导向分量 IiI_{i} 和输出 qiq_{i} 是层线性关系的,
上式保证 了 ▽q=a▽I \bigtriangledown q = a \bigtriangledown I,意味着输出 qq 和 导向图 II 具有同样的边界性质,
为了求解线性系数 ak,bka_{k}, b_{k}, 我们可以定义如下的能量函数:

E(ak,bk)=∑i∈wk((akIi+bk−pi)2+ϵa2k)

E(a_{k}, b_{k}) = \sum_{i \in w_{k}} ((a_{k}I_{i} + b_{k}-p_{i})^2 + \epsilon a_{k}^2)

一般来说,ϵa2k\epsilon a_{k}^2 是一个正则项,以防止 aka_{k} 太大,最后利用线性回归,我们可以得到:

ak=1|w|∑i∈wkIipi−μkpk¯σ2k+ϵ

a_{k} = \frac{\frac{1}{\left | w \right |} \sum_{i \in w_{k}} I_{i}p_{i} - \mu_{k}\bar{p_{k}}}{\sigma_{k}^{2} + \epsilon}

bk=pk¯−akμk

b_{k} = \bar{p_{k}} - a_{k} \mu_{k}

μk,σ2k\mu_{k}, \sigma_{k}^{2} 是导向图 II 在一个局部区域 wkw_{k} 的均值和方差,|w|\left | w \right | 是局部区域的像素个数,pk¯=1|w|∑i∈wkpi \bar{p_{k}} = \frac{1}{\left | w \right |} \sum_{i \in w_{k}} p_{i} 是输入图 pp 在局部区域的均值。

我们可以把这个线性模型应用到整张图像的所有局部区域,但是,由于一个像素点 i i 可以同时属于很多不同的局部区域,而且每个局部区域计算出来的 qiq_{i} 是不一样的,一个简单有效的方法,就是对含有像素点 i i 的所有局部区域计算一个 线性模型,然后取平均值:

qi=1|w|∑k:i∈wk(akIi+bk)=ai¯Ii+bi¯

q_{i} = \frac{1}{\left | w \right |} \sum_{k: i \in w_{k}} (a_{k}I_{i} + b_{k}) = \bar{a_{i}} I_{i} + \bar{b_{i}}

ai¯=1|w|∑k∈wiak

\bar{a_{i}} = \frac{1}{\left | w \right |} \sum_{k \in w_{i}} a_{k}

bi¯=1|w|∑k∈wibk

\bar{b_{i}} = \frac{1}{\left | w \right |} \sum_{k \in w_{i}} b_{k}

最后奉上代码:

function q = guidedfilter(I, p, r, eps)
%   GUIDEDFILTER   O(1) time implementation of guided filter.
%
%   - guidance image: I (should be a gray-scale/single channel image)
%   - filtering input image: p (should be a gray-scale/single channel image)
%   - local window radius: r
%   - regularization parameter: eps[hei, wid] = size(I);
N = boxfilter(ones(hei, wid), r); % the size of each local patch; N=(2r+1)^2 except for boundary pixels.mean_I = boxfilter(I, r) ./ N;
mean_p = boxfilter(p, r) ./ N;
mean_Ip = boxfilter(I.*p, r) ./ N;
cov_Ip = mean_Ip - mean_I .* mean_p; % this is the covariance of (I, p) in each local patch.mean_II = boxfilter(I.*I, r) ./ N;
var_I = mean_II - mean_I .* mean_I;a = cov_Ip ./ (var_I + eps); % Eqn. (5) in the paper;
b = mean_p - a .* mean_I; % Eqn. (6) in the paper;mean_a = boxfilter(a, r) ./ N;
mean_b = boxfilter(b, r) ./ N;q = mean_a .* I + mean_b; % Eqn. (8) in the paper;
endfunction imDst = boxfilter(imSrc, r)%   BOXFILTER   O(1) time box filtering using cumulative sum
%
%   - Definition imDst(x, y)=sum(sum(imSrc(x-r:x+r,y-r:y+r)));
%   - Running time independent of r;
%   - Equivalent to the function: colfilt(imSrc, [2*r+1, 2*r+1], 'sliding', @sum);
%   - But much faster.[hei, wid] = size(imSrc);
imDst = zeros(size(imSrc));%cumulative sum over Y axis
imCum = cumsum(imSrc, 1);
%difference over Y axis
imDst(1:r+1, :) = imCum(1+r:2*r+1, :);
imDst(r+2:hei-r, :) = imCum(2*r+2:hei, :) - imCum(1:hei-2*r-1, :);
imDst(hei-r+1:hei, :) = repmat(imCum(hei, :), [r, 1]) - imCum(hei-2*r:hei-r-1, :);%cumulative sum over X axis
imCum = cumsum(imDst, 2);
%difference over Y axis
imDst(:, 1:r+1) = imCum(:, 1+r:2*r+1);
imDst(:, r+2:wid-r) = imCum(:, 2*r+2:wid) - imCum(:, 1:wid-2*r-1);
imDst(:, wid-r+1:wid) = repmat(imCum(:, wid), [1, r]) - imCum(:, wid-2*r:wid-r-1);
end

可以看到,guided image filtering 的代码实现还是很简单的,就是基于box filter。

Guided Image Filtering相关推荐

  1. [PAMI2013] Guided Image Filtering 导向滤波器以及OpenCV-Python代码实现

    论文地址:https://www.researchgate.net/profile/Xiaoou_Tang/publication/236228168_Guided_Image_Filtering/l ...

  2. 导向滤波(guided Image Filtering)

    最近两天看了何凯明大神的导向滤波器(Guided Image Filtering),刚刚才顿悟整篇文章的核心.本文只针对于I=pI=pI=p的情况,即对图像III进行滤波处理.个人认为导向滤波器其实就 ...

  3. 基于guided image filtering的图像去雾 opencv实现

    基于guided image filtering的图像去雾 与暗原色图像去雾模型是一个系列的. 暗原色图像去雾模型是cvpr2009 bestpaper,图像去雾效果很好. 即.Kaiming He, ...

  4. 引导滤波(guided image filtering)原理及C++实现

    引导滤波 引导滤波是由何凯明等人与2010年提出,它本质上具有O(N)复杂度,相对于双边滤波有更好的边缘保持特性,且不会出现梯度反转现象.在不同引导图像的引导下,可广泛应用于降噪.去雾.高动态范围压缩 ...

  5. 引导图滤波(Guided Image Filtering)原理以及OpenCV实现

    引导图滤波器是一种自适应权重滤波器,能够在平滑图像的同时起到保持边界的作用,具体公式推导请查阅原文献<Guided Image Filtering>以及matlab源码:Guided Im ...

  6. 引导图像滤波(Guided Image Filtering)

    [Paper] Guided Image Filtering(2013) 引导图像滤波 摘要--在本文中,我们提出了一种新的显式图像滤波器,称为引导滤波器.从局部线性模型导出,引导滤波器通过考虑引导图 ...

  7. 引导滤波matlab代码实现,引导图滤波(Guided Image Filtering)原理以及OpenCV实现

    引导图滤波器是一种自适应权重滤波器,能够在平滑图像的同时起到保持边界的作用,具体公式推导请查阅原文献<Guided Image Filtering>以及matlab源码:http://ka ...

  8. Guided image filtering(引导滤波)

    摘要   本文提出了一种新的显式图像滤波引导滤波器.引导滤波器从局部线性模型中导出,通过考虑引导图像的内容(可以是输入图像本身,也可以是另一个不同的图像)来生成滤波输出图像.那个引导滤波器可以像流行的 ...

  9. Guided Filter对三维点云降噪

    同步更新于github page 文章目录 Guided Filter点云降噪 Results Notes Code References Guided Filter点云降噪 Guided Filte ...

最新文章

  1. Singleton单例模式
  2. 详解yarn的resource manager组件
  3. django 1.8 官方文档翻译:6-5-1 Django中的测试
  4. Kostya the Sculptor
  5. mybatis日志能正常打印出正确sql执行语句;数据库有内容;却查询不出来
  6. 虚拟化学习笔记-虚拟机迁移的分类及原理
  7. 11.python并发入门(part3 多线程与互斥锁)
  8. 14.各种所需内存计算
  9. SAXReader的使用
  10. 是时候放弃循环神经网络了
  11. 推荐的前端开源项目CDN加速服务
  12. 周其仁:到以色列游学,让我深受刺激!
  13. 渗透沉思录 - 转自亮神
  14. 云南省增值税发票综合平台(新网址):https://fpdk.yunnan.chinatax.gov.cn/
  15. c#直接横向打印LocalReport
  16. 烟台大学CSDN俱乐部参加2012移动开发者大会见闻
  17. unity 2D游戏开发 制作帧动画的两种方法
  18. CSU-ACM2017暑假集训比赛1 B - R2D2 and Droid Army
  19. 决策树及集成模型 python实现
  20. cadence安装完怎么打开_allegro安装后如何打开

热门文章

  1. python 实现QQ群接龙统计未接龙成员名单
  2. 数据仓库设计--- 如何设计一个星型模型(示列)
  3. 信息学奥赛一本通习题答案(五)
  4. 手机兼容性测试--testin云测
  5. Line电脑版,whatsapp多开软件
  6. Python_np.sum()函数
  7. 自助广告插件系统 7.4版本 高颜值网站广告代码
  8. 化工厂人员定位如何实现,主要有哪些功能?
  9. 机器视觉自动数据标注方法
  10. 你一年就工作一天还想请假......