【阅读笔记】空域保边降噪《Side Window Filtering》

1、保边滤波背景

保边滤波器的代表包括双边滤波、引导滤波,但是这类滤波器有一个问题,它们均将待处理的像素点放在了方形滤波窗口的中心。但如果待处理的像素位于图像纹理或者边缘,方形滤波核卷积的处理结果会导致这个边缘变模糊。

基于这个观察,《Side Window Filtering》的作者提出了侧窗滤波,改善边缘被滤波模糊的现象。

2、侧窗滤波原理分析

因为传统方法都使用全窗口回归,也就是把窗的中心位置放在待处理像素的位置。即便是用非线性各向异性加权,仍然无法杜绝沿着图像边缘的法向扩散(可能只是沿着边缘的扩散比较大,而沿着法线的扩散的比较小,比较小也是扩散,这是传统方法不保边的本质原因)。

基于这一分析,把窗口的边缘直接放在待处理像素的位置呢?就切断了可能的法线方向的扩散。这就是这篇文章的核心思想。

有人可能会说:这跟双边滤波的空间加权和灰度值加权非常像啊!但其实还是有本质的区别。我们的方法本质上切断了法向扩散,而不是像之前的保边算法那样仅仅是减少了法向扩散。因此,我们的方法从数学原理上就可以保证保边。而之前的方法本质上是不能保边的。

以上内容摘抄作者发的文章: https://zhuanlan.zhihu.com/p/58326095


3、侧窗滤波算法

常见的滤波算法都是创建方形滤波核,滤波核中心移动到待处理像素进行卷积。比如均值滤波、盒子滤波核和高斯滤波等,滤波处理结果 I i I_{i} Ii是像素的邻域窗口内像素加权求和结果。

I i = ∑ j ∈ Ω i w i j q j I_{i} = \sum_{j\in\Omega_{i}} w_{ij}q_{j} Ii=jΩiwijqj

其中, Ω i \Omega_{i} Ωi是像素i的邻域窗口, w i j w_{ij} wij是权重, q q q是输入图像, I I I是滤波输出图像, q j q_{j} qj是邻域像素值

影响滤波结果的是 w w w权重大小、滤波窗口大小形状等。

当像素在边缘,邻域窗口的选择应该在与边缘处在同一侧,不能跨过边缘,提出边缘保持的侧窗滤波算法。将每个目标像素视为潜在边缘,并在其周围生成多个局部窗口(称为侧窗口),每个窗口将目标像素与窗口的一侧或角(而不是中心)对齐。

这篇文章的核心思想:将待处理的像素置于滤波窗口的某个合适的边缘,使得滤波窗口尽可能地位于边缘的一侧,切断了可能的法线方向的扩散

4、侧窗滤波算法实现

具体到一个像素如何选择哪一个方向?横平竖直的子窗口可以利用可分离滤波来加速计算。可以利用重叠的子窗口来减少重复计算。所以,最终的计算量只是原来滤波器的2到3倍。

定义的侧窗(Side Window),包含参数 θ \theta θ γ \gamma γ ρ \rho ρ,参数 θ \theta θ是窗口与水平线的夹角, γ \gamma γ为窗口半径, ρ \rho ρ作为控制窗口长度的参数且 ρ ∈ { 0 , r } \rho\in \{0,r\} ρ{0,r}

如上图所示,侧窗可以根据参数 θ \theta θ γ \gamma γ ρ \rho ρ等参数进行调整。

通过改变 θ \theta θ的值我们便能控制窗口的朝向进而决定将窗口的哪一条边放在待处理像素之上。在 γ \gamma γ 固定的情况下,控制 ρ \rho ρ的大小就能控制窗口纵向的长度。

为了保证待处理像素 ( x , y ) (x,y) (x,y) 一定位于窗口边缘或者边角处,直接枚举8个可能的方向。 L 、 R 、 U 、 D 、 N W 、 N E 、 S W 、 S E L、R、U、D、NW、NE、SW、SE LRUDNWNESWSE,分别是左、右、上、下、西南、西北、东南、东北。这8类特定的窗口,计算8个窗口的滤波结果,对比原始值最接近的选择那个为最佳的方向。保留边缘意味着我们希望最小化边缘处输入和输出之间的距离,即滤波器输出应与边缘处的输入相同或尽可能接近。

8个方向滤波窗口示意如下图:

ρ = r \rho=r ρ=r时,得到窗口 L 、 R 、 U 、 D L、R、U、D LRUD,当 ρ = 0 \rho=0 ρ=0时,不同 θ \theta θ对应不同侧窗,见下图。

应用滤波核F在不同的侧窗窗口,都得到滤波输出 I i θ , ρ , γ I_{i}^{\theta,\rho,\gamma} Iiθ,ρ,γ,需要满足 θ = k ∗ π / 2 , k ∈ [ 0 , 3 ] \theta=k*\pi/2,k\in[0,3] θ=kπ/2,k[0,3] ρ ∈ { 0 , r } \rho\in\{0,r\} ρ{0,r}

I i θ , ρ , γ = F ( q i , θ , γ , ρ ) I_{i}^{\theta,\rho,\gamma} =F(q_{i},\theta,\gamma,\rho) Iiθ,ρ,γ=F(qi,θ,γ,ρ)

对于某一像素 (x,y) ,它的侧窗数量可以是无穷多个,我们只选取8个便于计算的特殊角度的窗口,然后再通过比较各个窗口处理的效果最终选出最合适的窗口。

I s w f = arg min ⁡ ∀ I i θ , ρ , γ ∥ q i − I i θ , ρ , γ ∥ 2 2 I_{swf}=\argmin_{\forall {I_{i}^{\theta,\rho,\gamma}}} \| q_{i} - I_{i}^{\theta,\rho,\gamma}\|_{2}^{2} Iswf=Iiθ,ρ,γargminqiIiθ,ρ,γ22

基于这种side window的思想,我们可以把传统的Box Filter,Gaussian Filter,median Filter,Bilateral Filter,Guided Filter等等都变成Side Window版本。


5、侧窗滤波算法应用

以 box滤波为例,融合侧窗滤波的为 S-box。普通box边缘被模糊,sbox更保边。对不同类型的边缘进行滤波处理,边缘包括以下几种,见图示:

a)gvertical edge (垂直边缘)

d)horizontal edge(水平边缘)

g)diagonal edge(对角边缘)

j)corner(角边缘)

m)ramp edge (斜坡边缘)

p)roof edge(屋顶边缘)

下图时BOX和s-box的计算结果

综上,可以得到,不同的侧窗类型可以获得不同的结果。

  1. L、NW、SW侧窗口可以保留the edges on the left of the vertical edge(垂直边缘左侧的边缘)。很容易推断出R、NE、SE侧窗口可以保留the edges on the right of the vertical edge(垂直边缘右侧的边缘)。

  2. U、NW、NE侧窗口可以保留the edges above the horizontal edge(水平边缘以上的边缘)。同样,很容易证明D、SW、SE侧窗可以保留the edges below the horizontal edge(水平边缘以下的边缘)。

  3. NW侧窗口可以保留edges above the diagonal edge and on the corner(对角线边缘上方和拐角上的边缘)。很容易推断出,NE、SW、SE侧窗可以保留diagonal edges and corner with other directions(与其他方向的对角边和角)。

  4. L、NW和SW侧窗可以保留ramp edge。

  5. 侧窗处理roof edge的效果相对较差


6、侧窗滤波算法仿真

仿真实验,将侧窗技术嵌入到高斯滤波器、中值滤波器、双边滤波器和导频滤波器等中,仿真结果见下图,对比改进后效果提升程度。

除此之外还有别的应用场景(比如平滑,HDR应用,结构纹理分解,深度估计,上颜色等),这里就不展示了,融合侧窗滤波思路的效果更好一些,感兴趣的可以看看原文。

参考文章:

https://zhuanlan.zhihu.com/p/58326095


我的个人博客主页,欢迎访问

我的CSDN主页,欢迎访问

我的GitHub主页,欢迎访问

我的知乎主页,欢迎访问

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gorm day9(结)

gorm day9 实体关联gorm会话 实体关联 自动创建、更新 在创建、更新数据时,GORM会通过Upsert自动保存关联及其引用记录。 user : User{Name: "jinzhu",BillingAddress: Address{Address1: "Billing Address - Address 1"},Ship…

代码随想录 Leetcode135. 分发糖果

题目&#xff1a; 代码(首刷看解析 2024年2月15日&#xff09;&#xff1a; class Solution { public:int candy(vector<int>& ratings) {vector<int> left(ratings.size(), 1);vector<int> right(ratings.size(), 1);for (int i 1; i < ratings.si…

html的表格标签

html的表格标签 table标签:表示整个表格tr:表示表格的一行td:表示一个单元格th:表示表头单元格.会居中加粗thead:表格的头部区域 (注意和th区分,范围是比th要大的).tbody:表格得到主体区域. table包含tr , tr包含td或者th. 表格标签有一些属性&#xff0c;可以用于设置大小边…

《剑指 Offer》专项突破版 - 面试题 47 : 二叉树剪枝(C++ 实现)

题目链接&#xff1a;LCR 047. 二叉树剪枝 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 一棵二叉树的所有节点的值要么是 0 要么是 1&#xff0c;请剪除该二叉树中所有节点的值全都是 0 的子树。例如&#xff0c;在剪除下图 (a) 中二叉树中所有节点值都为 0 的…

C++集群聊天服务器 muduo+nginx+redis+mysql数据库连接池 笔记 (下)

C集群聊天服务器 网络模块业务模块CMake构建项目 笔记 &#xff08;上&#xff09;-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135991635?spm1001.2014.3001.5501C集群聊天服务器 数据模块业务模块CMake构建项目 笔记 &#xff08;上&#xff09;-CSDN博…

非常详细!操作系统【IO核心子系统】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f3c6;&#x1f3c6;本文完整PDF源文件请翻阅至文章底部下载。&#x1f3c6;&#x1f3c6; 1 I/O核心子系统——概述1.1 核心子系统要完成的功能1.1.1 假脱机技术1…

Spring Task定时任务

目录 1、介绍 2、cron表达式 2.1、在线生成器 2.2、通配符 3、代码示例 3.1、使用步骤 3.2、 代码开发 3.3、测试 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发…

HTTP基本概念-HTTP缓存技术

大家好我是苏麟 , 今天说说HTTP缓存技术 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP缓存技术 HTTP 缓存有哪些实现方式? 对于一些具有重复性的 HTTP 请求&#xff0c;比如每次请求得到的数据都一样的&#xff0c;我们可以把这对「请求-响…

重磅!OpenAI发布文生视频模型Sora——视频模型的奇点或许来临!!

文章目录 1 卓越能力1.1 60s超长时间 高度详细复杂的场景1.2 复杂的相机运动1.3 同一场景多个镜头 2 技术原理3 不足4 安全战略5 碎碎念 OpenAI发布文生视频模型Sora——视频模型的奇点或许来临&#xff01;&#xff01; 初七啦&#xff0c;得开始工作了&#xff0c;没想到第一…

蓝桥杯真题:距离和

import java.util.*; public class 距离和 {public static void main(String[] args){String st"LANQIAO";int ans0;char ch[]st.toCharArray();for(int i0;i<ch.length;i){for(int ji1;j<ch.length;j){ansMath.abs(ch[j]-ch[i]);}}System.out.println(ans);} …

2.12日学习打卡----初学RocketMQ(三)

2.12日学习打卡 目录&#xff1a; 2.12日学习打卡一. RocketMQ高级特性&#xff08;续&#xff09;消息重试延迟消息消息查询 二.RocketMQ应用实战生产端发送同步消息发送异步消息单向发送消息顺序发送消息消费顺序消息全局顺序消息延迟消息事务消息消息查询 一. RocketMQ高级特…

【C++】友元、内部类和匿名对象

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 1. 友元 1.1 友元函数 1.2 友元类 2. 内部类 2.1 成员内部类 2.2 局部内部类 3. 匿名对象 1. 友元 友元提供了一种突破封装…

yarl,一个强大的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个强大的 Python 库 - yarl。 Github地址&#xff1a;https://github.com/aio-libs/yarl Python 中的 yarl 库是一个强大的工具&#xff0c;用于处理 URL&#xff08;统一资源定位符&#xff09…

行测考试怎么搜题找答案?用这5款神器就够了!!! #职场发展#媒体

以下软件拥有强大的搜索功能&#xff0c;能够快速找到与题目相关的资料和答案&#xff0c;让大学生们更容易理解和掌握知识点。 1.GT4T 可在14万个语言对间进行翻译。GT4T不仅能在任何窗口获得所选内容的翻译建议&#xff0c;还也可批量翻译Office、PDF、CAT、Markdown、Asci…

事务及在SpringBoot项目中使用的两种方式

1.事务简介 事务&#xff08;transaction&#xff09;是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要么全部执行&#xff0c;要么全部不执行&#xff0c;是一个不可分割的工作单位。 事物的四大特性: 原子性&#xff08;Atomicity&#xff09;&#xf…

【智能家居入门4】(FreeRTOS、MQTT服务器、MQTT协议、微信小程序)

前面已经发了智能家居入门的1、2、3了&#xff0c;在实际开发中一般都会使用到实时操作系统&#xff0c;这里就以FreeRTOS为例子&#xff0c;使用标准库。记录由裸机转到实时操作系统所遇到的问题以及总体流程。相较于裸机&#xff0c;系统实时性强了很多&#xff0c;小程序下发…

相机图像质量研究(17)常见问题总结:CMOS期间对成像的影响--靶面尺寸

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

用EL操作JAVABEAN属性

用EL操作JAVABEAN属性 问题陈述 Smart SoftWare Inc.想要开发一款维护雇员数据(例如姓、名字、职位)的Web应用程序。该组织决定将雇员数据存储在一个JavaBean中。另外,它还希望该Web应用程序能让用户从此JavaBean中检索数据并用JSP页面和EL显示。 解决方案 要解决上述问题…

.net和jar包windows服务部署

一.NetCore 1.创建启动脚本run_instal.bat,例如程序文件为ApiDoc.exe set serviceName"Apidoc Web 01" set serviceFilePath%~dp0ApiDoc.exe set serviceDescription"ApiDoc 动态接口服务 web 01"sc create %serviceName% BinPath%serviceFilePath% sc c…