Guided Filtering相关记录

一、背景介绍

        以前折腾保边滤波时候,刷了一些Guided Filtering相关资料。这里主要是对它们做个算法效果复现和资料简单整理。

二、Guided Filtering

1、基本原理

        原版Guided Filtering的提出,主要是为了改善双边滤波做保边平滑滤波器时候的梯度翻转伪影和性能问题。相关算法原理和公式推导,已经有很多小伙伴讲过了,我这里就不做详细介绍了,感兴趣的小伙伴们可以参考:在实现何凯明导向滤波去雾算法,处理中能够出现图像精度损失问题,有什么解决方案?

导向滤波小结:从导向滤波(guided filter)到快速导向滤波(fast guide filter)的原理,应用及opencv实现代码

等相关资料。

2、算法实现

 

3、算法效果

        左边为输入,右边为滤波后结果图像

 

4、复现代码

        网上直接抄过来的复现代码:

https://github.com/yulinghan/ImageQualityEnhancement/blob/master/ltm/guidedfilter/guidedfilter.cpp​github.com/yulinghan/ImageQualityEnhancement/blob/master/ltm/guidedfilter/guidedfilter.cpp

三、Fast Guided Filtering

1、基本原理

        这篇论文主要是对原始Guided Filtering的性能优化,基本思想来说是对输入图,引导图和对应的滤波半径,都进行相同倍数下采样,通过减少处理像素来降低算法计算量。

        然后对生成的mean_a, mean_b再上采样到原图尺寸,进行后续滤波处理。

2、算法实现

 

3、算法效果

        左边为输入,中间为原版滤波结果,右边为fast版本结果:

 

4、复现代码

        也是网上直接抄过来的复现代码:

ImageQualityEnhancement/ltm/guidedfilter/fast_guidedfilter.cpp at master · yulinghan/ImageQualityEnhancement · GitHub

四、Weighted Guided Filter

1、基本原理

        这篇论文的意义在于:对滤波边缘加上权重信息控制,进一步增加增强算法的保边平滑效果。

        具体来说,是对Guided Filter中生成a的公式进行改进,原本的计算公式为:

 

        可以看到不管输入图像上,像素是平坦区域还是纹理区域,画红框的正则平滑项都是一个固定值。本篇论文就是对这个做改进。

        具体改进措施为,将原本的固定值正则项变为根据像素变化而跟随变化的值,简单来说就是像素越属于平坦区域,那么滤波强度越高,越属于纹理,则对应权重降低。

 

 

        ε 是一个很小的常数,值被设定为(0.001xL)的平方。

2、算法实现

        核心部分代码实现如下所示:

 

 

3、算法效果

        左边为输入,中间为原版滤波结果,右边为Weighted Guided Filter版本结果

 

4、复现代码

        一样是网上直接抄过来的复现代码:

ImageQualityEnhancement/ltm/guidedfilter/weight_guidedfilter.cpp at master · yulinghan/ImageQualityEnhancement · GitHub

五、Gradient Domain Guided Image Filtering

1、基本原理

        本篇是在Weighted Guided Filter上面的进一步拓展,

        简单来说,就是进一步将计算a的公式在保边效果上做进一步的改进升级为:

 

        其中:

 

 

        详细介绍的话,可以参考资料:

Gradient Domain Guided Image Filtering(梯度域导向滤波) - ayew - 博客园

2、算法实现

        核心部分算法实现为:

 

3、算法效果

        左边为输入,中间为原版滤波结果,右边为Gradient Domain Guided Image Filtering版本结果:

 

4、复现代码

        简单的代码复现地址:

ImageQualityEnhancement/ltm/guidedfilter/gradient_guidedfilter.cpp at master · yulinghan/ImageQualityEnhancement · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识图谱系列(2):知识图谱的技术架构与组成要素

1. 引言 知识图谱作为一种强大的知识表示和组织方式,已经在搜索引擎、推荐系统、智能问答等多个领域展现出巨大的价值。在之前的上一篇文章中,我们介绍了知识图谱的基础概念与发展历程,了解了知识图谱的定义、核心特征、发展历史以及在AI发展中的地位与作用。 要深入理解和…

操作系统|| 虚拟内存页置换算法

题目 写一个程序来实现 FIFO 和 LRU 页置换算法。首先,产生一个随机的页面引用序列,页面数从 0~9。将这个序列应用到每个算法并记录发生的页错误的次数。实现这个算法时要将页帧的数量设为可变。假设使用请求调页。可以参考所示的抽象类。 抽象类&…

开发与AI融合的Windsurf编辑器

Windsurf编辑器是开发人员和人工智能真正融合在一起的地方,提供了一种感觉像文字魔术的编码体验。 手册:Windsurf - Getting Started 下载链接:Download Windsurf Editor for Windows | Windsurf (formerly Codeium) 下载安装 从上面的下载…

【Java】网络编程(Socket)

网络编程 Socket 我们开发的网络应用程序位于应用层,TCP和UDP属于传输层协议,在应用层如何使用传输层的服务呢?在应用层和传输层之间,则使用套接字Socket来进行分离 套接字就像是传输层为应用层开的一个小口,应用程…

【教程】Docker方式本地部署Overleaf

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景说明 下载仓库 初始化配置 修改监听IP和端口 自定义网站名称 修改数据存放位置 更换Docker源 更换Docker存储位置 启动Overleaf 创…

根据用户ID获取所有子节点数据或是上级直属节点数据

一、根据用户ID获取所有子节点,通过存储过程来实现 CREATE DEFINERcrmeb% PROCEDURE proc_get_user_all_children( IN rootUid INTEGER, -- 要查询的根用户ID IN includeSelf BOOLEAN -- 是否包含自身(1包含,0不包含) ) BEGIN -- 声明变…

计算机组成原理——数据的表示

2.1数据的表示 整理自Beokayy_ 1.进制转换 十六进制与二进制的转换 一位十六进制等于四位二进制 四位二进制等于一位十六进制 0x173A4C0001 0111 0011 1010 0100 1100 十六进制与十进制的转换 十六转十:每一位数字乘以相应的16的幂再相加 十转十六&#xff1a…

基于MATLAB-GUI图形界面的数字图像处理

基于MATLAB GUI的数字图像处理系统实现方案,包含常见图像处理功能。代码分为两部分:GUI界面设计和回调函数实现。 %% 第一部分:创建GUI界面 (使用GUIDE) % 1. 打开GUIDE: guide % 2. 创建新GUI,添加以下控件: % - …

从裸机开发到实时操作系统:FreeRTOS详解与实战指南

从裸机开发到实时操作系统:FreeRTOS详解与实战指南 本文将带你从零开始,深入理解嵌入式系统中的裸机开发与实时操作系统,以FreeRTOS为例,全面剖析其核心概念、工作原理及应用场景。无论你是嵌入式新手还是希望提升技能的开发者&am…

zabbix7.2最新版本 nginx自定义监控(三) 设置触发器

安装zabbix-get服务 在zabbix-server端口安装zabbix-get服务 [rootlocalhost ~]# dnf install -y zabbix-get Last metadata expiration check: 1:55:49 ago on Wed 14 May 2025 09:24:49 AM CST. Dependencies resolved. Package Architectur…

在 Kotlin 中,什么是解构,如何使用?

在 Kotlin 中,解构是一种语法糖,允许将一个对象分解为多个独立的变量。 这种特性可以让代码更简洁、易读,尤其适用于处理数据类、集合(如 Pair、Map)或其他结构化数据。 1 解构的核心概念 解构通过定义 componentN()…

html的鼠标点击事件有哪些写法

在HTML中&#xff0c;鼠标点击事件的实现方式多样&#xff0c;以下从基础语法到现代实践为您详细梳理&#xff1a; 一、基础写法&#xff1a;直接内联事件属性 在HTML标签内通过on前缀事件属性绑定处理函数&#xff0c;适合简单交互场景&#xff1a; <!-- 单击事件 -->…

基于EFISH-SCB-RK3576/SAIL-RK3576的智能垃圾分类站技术方案

&#xff08;国产化替代J1900的环保物联网解决方案&#xff09; 一、硬件架构设计‌ ‌多模态感知系统‌ ‌高精度识别模块‌&#xff1a; 双光谱成像&#xff08;RGB近红外&#xff09;融合NPU加速ResNet50模型&#xff0c;支持40垃圾品类识别&#xff08;准确率>99.5%&am…

PYTHON训练营DAY27

装饰器 编写一个装饰器 logger&#xff0c;在函数执行前后打印日志信息&#xff08;如函数名、参数、返回值&#xff09; logger def multiply(a, b):return a * bmultiply(2, 3) # 输出: # 开始执行函数 multiply&#xff0c;参数: (2, 3), {} # 函数 multiply 执行完毕&a…

Android Studio 中 build、assemble、assembleDebug 和 assembleRelease 构建 aar 的区别

上一篇&#xff1a;Tasks中没有build选项的解决办法 概述&#xff1a; 在构建 aar 包时通常会在下面的选项中进行构建&#xff0c;但是对于如何构建&#xff0c;选择哪种方式构建我还是处于懵逼状态&#xff0c;所以我整理了一下几种构建方式的区别以及如何选择。 1. build…

视频质量分析时,遇到不同分辨率的对照视频和源视频,分辨率对齐的正确顺序。

背景 我们平时在做视频转码后&#xff0c;会用VMAF/PSNR得评分工具进行视频对比的评分&#xff0c;但是这几种客观评分方式都有一个要求就是分辨率要一模一样&#xff0c;因为这样才对像素点做数学运算。 但是分辨率对齐其实有两种选择&#xff0c;例如源视频是1080P&#xf…

【技巧】离线安装docker镜像的方法

回到目录 【技巧】离线安装docker镜像的方法 0. 为什么需要离线安装&#xff1f; 第一、 由于docker hub被墙&#xff0c;所以 拉取镜像需要配置国内镜像源 第二、有一些特殊行业服务器无法接入互联网&#xff0c;需要手工安装镜像 1. 可以正常拉取镜像服务器操作 服务器…

计算机网络 : 网络基础

计算机网络 &#xff1a; 网络基础 目录 计算机网络 &#xff1a; 网络基础引言1. 网络发展背景2. 初始协议2.1 初始协议2.2 协议分层2.2.1 软件分层的好处2.2.2 OSI七层模型2.2.3 TCP/IP五层&#xff08;四层&#xff09;模型 2.3 TCP/IP协议2.3.1TCP/IP协议与操作系统的关系&…

【2025最新】Windows系统装VSCode搭建C/C++开发环境(附带所有安装包)

文章目录 为什么选择VSCode作为C/C开发工具&#xff1f;一、VSCode安装过程&#xff08;超简单&#xff01;&#xff09;二、VSCode中文界面设置&#xff08;再也不用对着英文发愁&#xff01;&#xff09;三、安装C/C插件&#xff08;编程必备神器&#xff01;&#xff09;四、…

Jmeter 安装包与界面汉化

Jmeter 安装包&#xff1a; 通过网盘分享的文件&#xff1a;CSDN-apache-jmeter-5.5 链接: https://pan.baidu.com/s/17gK98NxS19oKmkdRhGepBA?pwd1234 提取码: 1234 Jmeter界面汉化&#xff1a;