【阅读笔记】空域保边降噪《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主页,欢迎访问

我的知乎主页,欢迎访问

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

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

相关文章

在spring中操作Redis

目录 创建项目 ​编辑 配置Redis 创建类 StringRedisTemplate set / get list set Hash zset 新年快乐!!!! 创建项目 选中maven项目,然后选择java8,输入名称之后,点击next。 随后选择…

CTF攻防比赛真题详解

0x00 前言 某同学发在群里一道不知道什么ctf的web题 0x01 bypass open_basedir 开始没想那么多,看到了可以执行phpinfo,直接先eval一个一句话上去看看什么情况: 接着发现了没有权限去读取/var/www/html以外的目录,那么我开始想的…

ChatGPT绘图指南:DALL.E3玩法大全(二)

在前一篇文章中,我们介绍了什么是 DALL.E3 模型, DALL.E3 有什么优势,使用DALL.E3 的两种方法,以及DALL.E3 绘图的基本规则, 感兴趣的朋友请前往查看: ChatGPT绘图指南:DALL.E3玩法大全(一). 接下来&#…

Mysql运维篇(四) Xtarbackup--备份与恢复练习

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 前言 xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有…

CSP-201909-1-小明种苹果

CSP-201909-1-小明种苹果 #include <iostream> using namespace std; int main() {long long sumApple 0, maxNum 0, maxAppleNum 0, n, m;cin >> n >> m;for (long long i 0; i < n; i){long long appleNum, delta 0;cin >> appleNum;for (l…

Window+Linux双系统优雅的卸载Linux系统

WindowLinux双系统优雅的卸载Linux系统 那些最好的程序员不是为了得到更高的薪水或者得到公众的仰慕而编程&#xff0c;他们只是觉得这是一件有趣的事情&#xff01; WindowLinux双系统优雅的卸载Linux系统 WindowLinux双系统优雅的卸载Linux系统&#x1f33f;前言&#x1f340…

【二叉树层序遍历】【队列】Leetcode 102 107 199 637 429 515

【二叉树层序遍历】【队列】Leetcode 102 107 199 637 429 515 102. 二叉树的层序遍历解法 用队列实现107. 二叉树的层序遍历 II解法199. 二叉树的右视图 解法637. 二叉树的层平均值 解法429. N叉树的层序遍历515. 在每个树行中找最大值 ---------------&#x1f388;&#x1…

.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…

【AIGC】Stable Diffusion的ControlNet插件

ControlNet 介绍 ControlNet 插件是 Stable Diffusion 中的一个重要组件&#xff0c;用于提供对模型的控制和调整。以下是 ControlNet 插件的主要特点和功能&#xff1a; 模型控制&#xff1a; ControlNet 允许用户对 Stable Diffusion 中的模型进行精细的控制和调整。用户可以…

【深度学习每日小知识】交并集 (IoU)

交并集 (IOU) 是一种性能指标&#xff0c;用于评估注释、分割和对象检测算法的准确性。它量化数据集中的预测边界框或分段区域与地面实况边界框或注释区域之间的重叠。 IOU 提供了预测对象与实际对象注释的对齐程度的衡量标准&#xff0c;从而可以评估模型准确性并微调算法以改…

【sgCreateTableColumn】自定义小工具:敏捷开发→自动化生成表格列html代码(表格列生成工具)[基于el-table-column]

源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/136126479 查看使用说明 --><div :class"$options.name"><div class"sg-head">表格列生成工具</div><div class"sg-container"…

林浩然与杨凌芸的时空约会奇遇记

林浩然与杨凌芸的时空约会奇遇记 The Time-Traveling Love Story of Lin Haoran and Yang Lingyun in the Java World 在那个阳光明媚、Java代码飞舞的日子里&#xff0c;程序员界的“情圣”林浩然和美丽聪明的数据分析师杨凌芸携手演绎了一场跨越时间与空间的爱情故事&#xf…