导向滤波同样是一种平滑滤波算法,其与最小二乘滤波和双边滤波相比,同样是一种具有边缘保持的功能的图形滤波算法,可以用于处理图形噪点较多的图像,而且此种滤波算法与最小二乘滤波和双边滤波相比,有其独特的特点,让我们来首先简述一下其滤波的基本原理:

滤波过程示意图

这是来源于Kaiming He(何恺明教授)其文章中的原理图,其中的p为输入图像,其中的q为输出图像,I为输入的引导图像,其中引导图像经过一个双边滤波核与输入图像进行结合,最终获得输出的图像。

导向滤波其基本的算法原理可以见下图:

算法原理

其中输出图像q有:

其中的输出图像q又有如下表达:

我们可以看到的是Wij为权值,这个权值限定了图像q的输出,而这个权值的来源是引导图像I,所以W是一个与I有关的数值,且其为一个滤波核,其中i与j为图像的像素坐标引导,由此表达式我们可以直观的看出,输出图像和输入图像p,存在的是一种线性关系。

在导向滤波中,核心的假设在于,在一个以k为核心的处理窗口中,输出图像的q是一种线性的模式,也即:

其中的ak和bk为窗口中的常系数,同时我们需要设定一个正方形的窗格,此窗格的半径为r。同时ak和bk的来源,我们都通过上文得知,其由输入的图像来进行限制,我们认为,输出的图像是输入图像减去噪声而形成的,故有:

其中的ni为图像中的噪声,而我们需要将此图像中的噪声降低到最低,所以需要找到一种比较好的方法来达到这一点:

我们可以看到上式为一个关于ak和bk的像素损失函数,同时我们又有一个调整参数,我们将调整参数设定为e,这个调整参数限定了ak。在何凯明教授之后的文中提到,此函数是一种脊回归模型,我们可以获取ak和bk其显式解为:

其中uk为引导图I中的窗口中的像素均值,而

为窗口中的像素方差,而下式的e

则为调整参数,而w为窗口的像素点的个数,而下式中的pk为:

那么当我们将此应用于具体的图像中时,对于一个N*N的处理窗格,一个像素点就会被包含N次,也即我们需要利用w,来进行取均值的处理:

同时我们注意到ak和bk,所以我们可以将上式改写为:

这样我们就建立了一个,从p,再依据I,最后到q的一种映射的过程,这也就是导向滤波整体算法原理,而当我们的导向图I和输入图片为同一张图片时,此种滤波算法就具有边缘保持的能力。

我们总结一下此种算法即:其输入端有4个输入:

输入图像p,引导图像I,处理窗口半径r,调整参数e。

而其输出为一张图像:

输出图像q。

其具体的算法实现过程:

我们利用matlab进行对原始的噪点较多的图形进行处理,首先我们是可以得知,此处我们输入图像和引导图像为同一张图像,此处我们设置三种窗口的规格

r0=2;r1=3;r2=4;

而对于调整参数,我们同样设置三种:

Eps0=0.01,eps1=0.04,eps2=0.09;

故对于此滤波器的调用方式为:

subplot(3,3,1);

gfout1_1=guidedfilter(gfI,gfp,r0,eps0);

imshow(gfout1_1);

title('r=2,eps=0.01');

lena女神
Guidedfilter.h:
function q = guidedfilter(I, p, r, eps)%   - 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); mean_I = boxfilter(I, r) ./ N;
mean_p = boxfilter(p, r) ./ N;
mean_Ip = boxfilter(I.*p, r) ./ N;
% this is the covariance of (I, p) in each local patch.
cov_Ip = mean_Ip - mean_I .* mean_p; mean_II = boxfilter(I.*I, r) ./ N;
var_I = mean_II - mean_I .* mean_I;a = cov_Ip ./ (var_I + eps);
b = mean_p - a .* mean_I; mean_a = boxfilter(a, r) ./ N;
mean_b = boxfilter(b, r) ./ N;q = mean_a .* I + mean_b;
end

boxfilter.h:
function 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

算法总体评价:导向滤波作为三大边缘保持滤波器之一,其平滑效果和边缘保持能力值得肯定,但是其同时因为其算法原因会产生光晕(halo)此点何恺明教授也在其文章中详细说明,其与另外两种边缘保持滤波算法相比,其一大特点就在于其输入,其输入为一张输入图像和一张引导图像,所以这点是一个非常鲜明的特点,同时需注意的是,要是其存在边缘保持的滤波效果,需要使引导图像和输入图像为同一张图像,而且其处理窗口和损失参数的设置对其滤波效果的影响较大,此点可详见上文。

参考文献

____________________________________________________________________________________________

  • Guided Image Filtering, by Kaiming He, Jian Sun, and Xiaoou Tang, in TPAMI 2013.

SANGHUSUN

2020.02.10

burg算法的matlab代码实现_导向滤波算法及其matlab代码实现相关推荐

  1. a*算法matlab代码_导向滤波算法及其matlab代码实现

    导向滤波同样是一种平滑滤波算法,其与最小二乘滤波和双边滤波相比,同样是一种具有边缘保持的功能的图形滤波算法,可以用于处理图形噪点较多的图像,而且此种滤波算法与最小二乘滤波和双边滤波相比,有其独特的特点 ...

  2. 导向滤波算法——OpenGL实现

    导向滤波 一.介绍 导向滤波又称引导滤波,通过一张引导图片反映边缘.物体等信息,对输入图像进行滤波处理,使输出图像的内容由输入图像决定,但纹理与引导图片相似. 导向滤波的原理是局部线性模型,在保持双边 ...

  3. 导向滤波算法 java_一种基于双通道先验和侧窗导向滤波的单幅图像去雾方法与流程...

    本发明属于计算机图像处理的领域,用于图像或者视频去雾等相关领域:具体涉及一种基于双通道先验和侧窗导向滤波的单幅图像去雾方法. 背景技术: 图像采集过程中,由于雾天的影响,使得景物的能见度大幅降低,再加 ...

  4. 惯性gps组合导航matlab,Strong-tracking-filter 基于强跟踪滤波算法的惯性加GPS组合导航matlab仿真程序 238万源代码下载- www.pudn.com...

    文件名称: Strong-tracking-filter下载 收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 82 KB 上传时间: 2013-09-01 下载次数 ...

  5. java 滤波算法_双边滤波算法

    1.原理 高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息. 高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的 ...

  6. java编程代码大全_掌握Java编程技巧,代码重构

    代码重构在不改变软件系统外部行为的前提下,改善它的内部结构,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性. 代码重构目标 持续纠偏和改进软件设计 随 ...

  7. sql过滤代码段_如何创建和管理T-SQL代码段

    sql过滤代码段 介绍 (Introduction) Transact-SQL (T-SQL) snippets were first introduced in SQL Server 2012 Ma ...

  8. 人工免疫算法c语言实例,毕业设计_蚁群算法模拟系统的设计与实现.doc

    J I A N G S U U N I V E R S I T Y 本 科 毕 业 论 文 蚁群算法模拟系统的设计与实现 Ant Colony Simulation System Design and ...

  9. python代码书写_如何优雅的书写Python代码, python使用小技巧

    博客链接 文章目录 Python使用技巧 变量命名技巧 用有意义易读的命名 同类型使用相同词汇 可搜索的名字 自我描述的变量 不要取隐晦的名字 精简不重复 默认参数代替运算和条件 实用小窍门 变量值交 ...

最新文章

  1. 【神经网络】(3) 卷积神经网络(CNN),案例:动物三分类,附python完整代码
  2. python爬取公众号推荐_python爬搜狗微信获取指定微信公众号的文章
  3. Linux缓冲区溢出问题
  4. 如何屏蔽TCP 报头中的内容-位置字段中显示的 IP 地址
  5. 用感知器对样本分类的matlab程序_新的基础算法:树突网络:一个用于分类、回归和系统识别的白箱模块...
  6. 拓端tecdat|R语言使用随机技术差分进化算法优化的Nelson-Siegel-Svensson模型
  7. 支持向量机原理及求解 SVM Slater条件 KKT条件 SMO算法 软间隔
  8. MUI框架-01-介绍-创建项目-简单页面
  9. java管理员登录_登录界面的java代码,分别有教师登录,管理员登录,学生登录,右边是用户名和密码,见图。...
  10. 国内IT界5大女神程序员,你知道几个
  11. ECharts官方教程(四)【个性化图表的样式】
  12. 均值方差模型python_Python机器学习之“选择最优模型”
  13. 地火明夷 (易經大意 韓長庚)
  14. (3)形态学:语言的词汇----NLP的语言学基础
  15. usb接口驱动_UART串行总线舵机转接板规格、接线说明 amp; 驱动安装
  16. EPLAN2022——端子
  17. 2022年全球市场砂纸总体规模、主要生产商、主要地区、产品和应用细分研究报告
  18. 两小球冲突,仿优信,拖动小球
  19. 穿越派·派盘 + 静读天下 = 顶级电子书阅读器
  20. ajax的主要核心对象,简单谈谈AJAX核心对象

热门文章

  1. 如何让“GMV下降”实现自动化分析?
  2. 利用Python实现数据偏移
  3. Angular 依赖注入学习笔记之工厂函数的用法
  4. SAP Spartacus的url parameter
  5. Jerry文章《浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试一文的源代码》
  6. 给JavaScript的单个对象定义属性和属性的元数据
  7. 程序员工作生活的好帮手,滴答清单,多平台支持
  8. My Account dependency /UI5/CL_UI5_APP_INDEX_LREP~UI5_INFO_FETCH_FROM_DB strange manifest.json
  9. 一个SAP开发人员的养蚕流水帐
  10. how to find element's document section