首页 > 其他分享 >引导滤波(guided filter)与快速引导滤波(fast guided filter)理解

引导滤波(guided filter)与快速引导滤波(fast guided filter)理解

时间:2023-08-26 17:35:10浏览次数:43  
标签:引导 窗口 guided 滤波 像素 filter 参数 https

最近在学习图片的滤波和去噪的相关知识,查阅了一些资料参考了一些博客,这里做一个整合+理解。参考的博客资料在文末。

image
image
image
image

引入普通滤波的概念

假设输入图像为p,滤波窗口为wk,经过滤波后的输出图像为q,那么q图的第i个像素是由输入图p中以第i个像素为中心的窗口内的所有像素加权平均得到的,即:
image

从公式上来看,普通的例如均值滤波与引导滤波区别在于权重的选择上,也就是Wij(I)的不同。

引导滤波

看到的最多的引导滤波的过程图如图所示:
image

我们逐步来看这个图,首先引导滤波有两个输入,原始图p和引导图I。经过滤波后有一个输出q,滤波窗口为Wk.整个引导滤波器的表示为公式:
image

其中j∈Wk,j仅仅是在某一个窗口内的下标,Wij(I)是仅仅与引导图I相关的加权平均的那个权重。
首先我们看到引导图I,文章有一个重要的假设,就是使输入引导图I与输出图q之间是一个线性关系,表示为:
image

其中ak和bk表示常数参数,注意一个窗口Wk只对应一对常熟参数ak和bk。例如以第一个像素为中心的窗口W1的参数为a1,b1。以第二个像素为中心的窗口w2的参数为a2,b2.
也就是总流程图中的这一部分:
image

图中还对线性关系两边求导得到
image

这就表示引导图的梯度变化与结果图的梯度变化是线性关系的,假设在引导图中我们知道A区是平滑区域,B区是边缘区域,显然B区梯度比A区要大,而且假设B区的梯度是A区的4倍。通过线性变换,我们得到了输出图q中的A区和B区梯度变为引导图的a倍,但是B区的梯度仍然是A区的4倍,同一幅图中的A和B之间的梯度关系没有被扭曲,通俗来讲就是引导图告诉了输出图哪里是平滑区域,哪里是边缘区域。这就是引导图的作用。
我们已知了引导图I,如果能求得系数ab的值,就可以计算出输出了。这时候就需要引入另外一个概念:噪声
image

利用最小二乘法就能计算出参数a,b。
image

通过上述的最小二乘法可以计算出参数a,b的表达式
image

具体详细的公式推导可以参考链接:
https://blog.csdn.net/weixin_43194305/article/details/88959183
https://blog.csdn.net/HIVAN1/article/details/104722729
https://www.jianshu.com/p/36b0c8e22669
https://blog.csdn.net/qq_29788741/article/details/128865604
引导滤波与快速引导滤波肉眼没区别:https://blog.csdn.net/kuweicai/article/details/78385871
计算出了参数之后,我们就可以将线性模型应用到整个图像的滤波窗口,但一个像素会被多个窗口包含,如下图,若Wk大小为3x3,则除边缘区域的外的每个点会被包含在9个窗口里,因此对于同一个像素,会得到|w|个输出qi。
image

我们最后需要用的参数a,b就是所求的平均的参数a,b。
最后将参数代回线性关系公式中,就可以得到输出,过程如下图所示
**image
**
matlab实现代码在这里
链接:https://github.com/accessify/fast-guided-filter

需要注意的是,boxfilter.m和guidedfilter.m。其中guidedfilter.m需要调用boxfilter.m函数,GuidedFilter_preserveEdge.m是主函数,用来调用guidedfilter函数,本代码用的输入图和引导图是同一张cat.bmp。演示的是保边效果,可以更换引导图和输入图。
————————————————
转自:https://blog.csdn.net/weixin_44917577/article/details/107186673

标签:引导,窗口,guided,滤波,像素,filter,参数,https
From: https://www.cnblogs.com/chuqianyu/p/17659154.html

相关文章

  • 卡尔曼滤波的五大公式
    预测:xhat_表示先验估计,xhat表示后验估计,带有_的先验估计,不带的后验估计xhat_(k)=A*xhat(k-1)+B*u(k-1)Pk_=A*Pk*A'+Q更新Kk=Pk_*H'*(H*Pk*H'_+R);xhat(k)=xhat_(k)+Kk(Zk-H*xhat_(k))Pk=(I-Kk*H)Pk_;clccloseall%%首先需要实际值和测量值需要考虑噪声信号(噪声信号符合高斯分布期望......
  • 什么是 SAP CDS view 的 supplementary filter
    SAPCDS视图是一种建模工具,用于在SAPS/4HANA系统中定义数据模型和视图,以便更轻松地访问和处理数据。"Supplementaryfilter"是CDS视图的一个重要概念,它允许您在CDS视图上应用额外的过滤条件,以动态地限制视图返回的数据。本文将详细介绍"supplementaryfilter"的背景、用途和示例......
  • 什么是 SAP CDS view 中的 Exposed Association with filter 技术
    在SAPS/4HANA中,CDS(CoreDataServices)是一种强大的数据建模和查询语言,而“ExposedAssociationwithfilter”是其功能之一。下图是一个具体的例子。这里我们使用_bookings[class='C']的语法来给association指定一个过滤条件,然后暴露成_business_flights给外部消费者......
  • 如何使用 Guided Development 给 Fiori Elements List Report 的工具栏添加自定义按钮
    本教程之前的步骤,我们介绍了如何使用SAPFioriTools这个扩展包的ApplicationModeler提供的PageMap来给ListReport的Table控件添加自定义列的步骤。本文介绍另一种在FioriElements应用里进行扩展开发的方式,即FioriElementsGuidedDevelopment工具向导。按照......
  • [Lua][Love Engine] 有效碰撞处理の类别与位掩码 | fixture:setFilterData
    有效的碰撞处理只用IF判断假设在一个物理世界,不希望两个同类实体发生碰撞,那么localbegin_contact_callback=function(fixture_a,fixture_b)localentity_a_type=fixture_a:getUserData()localentity_b_type=fixture_b:getUserData()--如果碰撞的两个实体不......
  • 什么是 SAP CDS view 中的 Exposed Association with filter 技术
    在SAPS/4HANA中,CDS(CoreDataServices)是一种强大的数据建模和查询语言,而“ExposedAssociationwithfilter”是其功能之一。下图是一个具体的例子。这里我们使用_bookings[class='C']的语法来给association指定一个过滤条件,然后暴露成_business_flights给外部消费者使......
  • iwebsec-文件包含 06 php://filter伪协议
    01、题目分析程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞php://filter是元封装器,用于对本地磁盘文件进行读取02、文......
  • uniapp中使用过滤器filters来格式化时间
    uniapp中使用过滤器filters来格式化时间看那个创云商城源码的时候看到的,觉得蛮有用的,扒下来备用,应该也能直接用于JS  <template><viewclass="mix-timeline"><viewclass="cell"v-for="(item,index)inlist":key="index">......
  • 【航迹】基于MN逻辑算法实现航迹关联和卡尔曼滤波外推附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • ITK 实例10 边缘保留平滑滤波对PNG图像进行二维滤波
    1#include"itkImage.h"2#include"itkCastImageFilter.h"3#include"itkCurvatureFlowImageFilter.h"4#include"itkImageFileReader.h"5#include"itkImageFileWriter.h"67intmain(intargc,char......