burg算法的matlab代码实现_导向滤波算法及其matlab代码实现
导向滤波同样是一种平滑滤波算法,其与最小二乘滤波和双边滤波相比,同样是一种具有边缘保持的功能的图形滤波算法,可以用于处理图形噪点较多的图像,而且此种滤波算法与最小二乘滤波和双边滤波相比,有其独特的特点,让我们来首先简述一下其滤波的基本原理:
这是来源于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中的窗口中的像素均值,而
则为调整参数,而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');
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代码实现相关推荐
- a*算法matlab代码_导向滤波算法及其matlab代码实现
导向滤波同样是一种平滑滤波算法,其与最小二乘滤波和双边滤波相比,同样是一种具有边缘保持的功能的图形滤波算法,可以用于处理图形噪点较多的图像,而且此种滤波算法与最小二乘滤波和双边滤波相比,有其独特的特点 ...
- 导向滤波算法——OpenGL实现
导向滤波 一.介绍 导向滤波又称引导滤波,通过一张引导图片反映边缘.物体等信息,对输入图像进行滤波处理,使输出图像的内容由输入图像决定,但纹理与引导图片相似. 导向滤波的原理是局部线性模型,在保持双边 ...
- 导向滤波算法 java_一种基于双通道先验和侧窗导向滤波的单幅图像去雾方法与流程...
本发明属于计算机图像处理的领域,用于图像或者视频去雾等相关领域:具体涉及一种基于双通道先验和侧窗导向滤波的单幅图像去雾方法. 背景技术: 图像采集过程中,由于雾天的影响,使得景物的能见度大幅降低,再加 ...
- 惯性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 下载次数 ...
- java 滤波算法_双边滤波算法
1.原理 高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息. 高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的 ...
- java编程代码大全_掌握Java编程技巧,代码重构
代码重构在不改变软件系统外部行为的前提下,改善它的内部结构,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性. 代码重构目标 持续纠偏和改进软件设计 随 ...
- sql过滤代码段_如何创建和管理T-SQL代码段
sql过滤代码段 介绍 (Introduction) Transact-SQL (T-SQL) snippets were first introduced in SQL Server 2012 Ma ...
- 人工免疫算法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 ...
- python代码书写_如何优雅的书写Python代码, python使用小技巧
博客链接 文章目录 Python使用技巧 变量命名技巧 用有意义易读的命名 同类型使用相同词汇 可搜索的名字 自我描述的变量 不要取隐晦的名字 精简不重复 默认参数代替运算和条件 实用小窍门 变量值交 ...
最新文章
- 【神经网络】(3) 卷积神经网络(CNN),案例:动物三分类,附python完整代码
- python爬取公众号推荐_python爬搜狗微信获取指定微信公众号的文章
- Linux缓冲区溢出问题
- 如何屏蔽TCP 报头中的内容-位置字段中显示的 IP 地址
- 用感知器对样本分类的matlab程序_新的基础算法:树突网络:一个用于分类、回归和系统识别的白箱模块...
- 拓端tecdat|R语言使用随机技术差分进化算法优化的Nelson-Siegel-Svensson模型
- 支持向量机原理及求解 SVM Slater条件 KKT条件 SMO算法 软间隔
- MUI框架-01-介绍-创建项目-简单页面
- java管理员登录_登录界面的java代码,分别有教师登录,管理员登录,学生登录,右边是用户名和密码,见图。...
- 国内IT界5大女神程序员,你知道几个
- ECharts官方教程(四)【个性化图表的样式】
- 均值方差模型python_Python机器学习之“选择最优模型”
- 地火明夷 (易經大意 韓長庚)
- (3)形态学:语言的词汇----NLP的语言学基础
- usb接口驱动_UART串行总线舵机转接板规格、接线说明 amp; 驱动安装
- EPLAN2022——端子
- 2022年全球市场砂纸总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 两小球冲突,仿优信,拖动小球
- 穿越派·派盘 + 静读天下 = 顶级电子书阅读器
- ajax的主要核心对象,简单谈谈AJAX核心对象
热门文章
- 如何让“GMV下降”实现自动化分析?
- 利用Python实现数据偏移
- Angular 依赖注入学习笔记之工厂函数的用法
- SAP Spartacus的url parameter
- Jerry文章《浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试一文的源代码》
- 给JavaScript的单个对象定义属性和属性的元数据
- 程序员工作生活的好帮手,滴答清单,多平台支持
- My Account dependency /UI5/CL_UI5_APP_INDEX_LREP~UI5_INFO_FETCH_FROM_DB strange manifest.json
- 一个SAP开发人员的养蚕流水帐
- how to find element's document section