【阅读笔记】空域保边降噪《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.mzph.cn/news/683425.shtml

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

相关文章

揭秘 2024 春晚刘谦魔术——代码还原

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、魔术大概流程 二、代码实现各个步骤 2.1 partition(对半撕牌) 2.2 bottom(将 n 张牌置底…

仿生学是什么,举出一些通俗的应用案例和应用算法?比如蝙蝠和雷达,鸟和飞机,鱼和船属于仿生学吗?灰狼算法、蚁群算法、麻雀算法属于仿生学吗?除了这些案例还有哪些?

问题描述:仿生学是什么,举出一些通俗的应用案例和应用算法?比如蝙蝠和雷达,鸟和飞机,鱼和船属于仿生学吗?灰狼算法、蚁群算法、麻雀算法属于仿生学吗?除了这些案例还有哪些? 问题解…

基于微信小程序的智能社区服务小程序,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

谈谈Lombok的坑

Lombok 是一个 Java 库,通过注解的方式在编译时自动为类生成 getter、setter、equals、hashCode 等方法,以简化代码和提高开发效率。本文主要谈谈代码简化背后的代价。 引入Lombok之前是怎么做的 IDE中添加getter/setter, toString等代码: …

单链表的介绍

一.单链表的概念及结构 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 。 结构:根据个人理解,链表的结构就像火车厢一样,一节一节连在一起的&#x…

蓝桥杯(Web大学组)2022省赛真题:冬奥大抽奖

思路: 使用模板字符串,借助time的值选择添加或移除样式的盒子,由于盒子的类名最多为li9,所以要将time的值取余,且判断余数为0时,就取1,否则会获取空值报错 .ul .li${time%9!0?time%9:1} 代码…

Dataframe型数据分析技巧汇总

Kaggle 如何针对少量数据集比赛的打法。 数据降维的几种方法 HF.075 | 时间序列趋势性分析方法汇总 机器学习必须了解的7种交叉验证方法(附代码) 这个图!Python也能一键绘制了,而且样式更多.. 散点图,把散点图画出花来…

Selenium折线图自动化测试

目录 获取折线图echarts实例 获取折线图实例锚点的坐标 通过echarts实例的getOption()方法获取坐标数据 将折线图坐标点转换为像素坐标值 整合折线图坐标数据 根据折线图坐标计算出锚点相对于浏览器中的坐标 计算canvas画布原点的坐标 计算折线图相对于浏览器的坐标 使用…

实现安全性

实现安全性 问题陈述 Chris希望阅读位于服务器上的电子邮件消息。他将自己的登录信息发送到服务器已进行验证。因此,Chris决定用基于表单的验证来验证他的登录信息。但是,他首先决定只用基于表单的验证测试登录页面 。 解决方案 要解决上述问题,Chris需要执行以下任务: 用…

2.14学习总结

1.区间嵌套 https://www.acwing.com/problem/content/description/5462/ 2.卡片 https://www.lanqiao.cn/problems/1443/learning/?page1&first_category_id1&second_category_id3&name%E5%8D%A1%E7%89%87 3.逆序对https://www.luogu.com.cn/problem/P1908 4.合唱…

不等式的证明之一

不等式的证明 证明下述不等式之一证明 证明下述不等式之一 设 a , b , c a,b,c a,b,c 是正实数&#xff0c;请证明下述不等式&#xff1a; 1 < a a 2 b 2 b b 2 c 2 c c 2 a 2 ≤ 3 2 1<\frac{a}{\sqrt{a^2 b^2}} \frac{b}{\sqrt{b^2 c^2}} \frac{c}{\sqrt{c…

从零开始做题:逆向 ret2shellcode jarvisoj level1

1.题目信息 BUUCTF在线评测 2.原理 篡改栈帧上的返回地址为攻击者手动传入的shellcode所在缓冲区地址&#xff0c;并且该区域有执行权限。 rootpwn_test1604:/ctf/work/9# gdb ./level1 GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Copyright (C) 2016 Free Software Fou…

【C++航海王:追寻罗杰的编程之路】关于模板,你知道哪些?

目录 1 -> 泛型编程 2 -> 函数模板 2.1 -> 函数模板概念 2.2 -> 函数模板格式 2.3 -> 函数模板的原理 2.4 -> 函数模板的实例化 2.5 -> 函数参数的匹配原则 3 -> 类模板 3.1 -> 类模板的定义格式 3.2 -> 类模板的实例化 1 -> 泛型编…

分布式文件系统 SpringBoot+FastDFS+Vue.js【一】

分布式文件系统 SpringBootFastDFSVue.js【一】 一、分布式文件系统1.1.文件系统1.2.什么是分布式文件系统1.3.分布式文件系统的出现1.3.主流的分布式文件系统1.4.分布式文件服务提供商1.4.1.阿里OSS1.4.2.七牛云存储1.4.3.百度云存储 二、fastDFS2.1.fastDSF介绍2.2.为什么要使…

技术社区的三倍定律

技术社区的三倍定律&#xff0c;也被称为“技术社区三倍速定律”&#xff0c;是由CSDN社区的蒋涛提出的一个观察现象。这个定律基于这样一个观点&#xff1a;新技术的发展在开发者社区中的接纳速度&#xff0c;通常会比在大众中的接纳速度快三倍。这意味着&#xff0c;当新技术…

tuple的使用例题(三元组)

题目大意&#xff1a;给一定关系&#xff0c;判断后面给的跟前面的有无矛盾 一开始还在想一些构造的操作&#xff0c;后面实在想不出来看题解&#xff0c;就是暴力啊...... 但是这种数据结构tuple&#xff08;元组&#xff09;确实是没见过&#xff0c;于是写篇总结 见这篇ht…

【MySQL】外键约束的删除和更新总结

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-7niJLSFaPo0wso60 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

MyBatis之在mapper.xml文件中使用批量处理标签删除数据

MyBatis之_在xml中使用批量处理标签删除数据 文章目录 MyBatis之_在xml中使用批量处理标签删除数据1. Mybatis批量删除1.Controller2. service3. Mapper4. mapper.xml5. 传递的是List<String> 1. Mybatis批量删除 前端传递参数数组 var delIds [aaa,bbb,ccc];1.Controll…

六、Redis之数据持久化及高频面试题

6.1 数据持久化 官网文档地址&#xff1a;https://redis.io/docs/manual/persistence/ Redis提供了主要提供了 2 种不同形式的持久化方式&#xff1a; RDB&#xff08;Redis数据库&#xff09;&#xff1a;RDB 持久性以指定的时间间隔执行数据集的时间点快照。AOF&#xff0…

whisperspeech 英文TTS的实现

以下代码成功运行在 colab 中&#xff0c;需要修改运行时类型为 T4 GPU。 !pip install -Uqq WhisperSpeech def is_colab():try: import google.colab; return Trueexcept: return Falseimport torch # if not torch.cuda.is_available(): # if is_colab(): raise BaseEx…