首页 > 其他分享 >【阅读笔记】空域保边降噪《Side Window Filtering》

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

时间:2024-02-15 10:34:00浏览次数:29  
标签:侧窗 Filtering 窗口 保边 滤波 像素 边缘 Window rho

1、保边滤波背景

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

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

2、侧窗滤波原理分析

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

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

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

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


3、侧窗滤波算法

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

\[I_{i} = \sum_{j\in\Omega_{i}} w_{ij}q_{j} \]

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

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

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

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

4、侧窗滤波算法实现

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

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

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

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

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

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

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

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

\[I_{i}^{\theta,\rho,\gamma} =F(q_{i},\theta,\gamma,\rho) \]

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

\[I_{swf}=argmin_{\forall {I_{i}^{\theta,\rho,\gamma}}} \| q_{i} - I_{i}^{\theta,\rho,\gamma}\|_{2}^{2} \]

基于这种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主页,欢迎访问

我的知乎主页,欢迎访问

标签:侧窗,Filtering,窗口,保边,滤波,像素,边缘,Window,rho
From: https://www.cnblogs.com/AomanHao/p/18015997

相关文章

  • Service Control Manager (SCM):Windows 自带的服务控制管理器(SCM)是一个命令行工具,用于
    ServiceControlManager(SCM):Windows自带的服务控制管理器(SCM)是一个命令行工具,用于安装、启动、停止、删除和查询系统中的服务。您可以使用sc命令来执行这些操作,以及查看服务的状态和配置。描述:    SC是用来与服务控制管理器和服务进行通信    的命令行程......
  • celery 5.3.6在windows中运行收到任务不执行
    命令:```celery-Ayour_projectworker--concurrency=2-Peventlet-linfo```1.`celery`:这是用于管理Celery任务的命令行实用程序。2.`-Ajavdb`:指定Celery应用程序实例。3.`worker`:告诉Celery启动一个工作进程。4.`--concurrency=2`:设置工作进程的数量为2。根据......
  • Mac上运行Windows程序的好方法是什么 Mac兼容虚拟机
    想要在Mac操作系统上运行Windows应用程序其实还是很简单的,只要安装一些工具就可以了。现在市面上可以实现这个功能的方法有三种,那么在Mac上运行Windows程序的好方法是什么呢?今天将为大家介绍一下这三种方式各是什么,以供大家进行参考。一、CrossOverCrossOver可以让MAC......
  • Windows 10/11等 IPV4 IPV6 DNS 最多设置多少个?
    Windows10/11等IPV4IPV6DNS最多设置多少个?理论知识:在Windows10系统中,IPv4和IPv6的DNS设置是通过网络配置进行的。对于DNS服务器地址的数量,Windows10并没有明确限制用户设置的数量。然而,从实际操作性和网络配置的常规需求来看,通常情况下,大多数用户会设置一到两个DNS服务......
  • Windows 软件整理
    好用软件aDrive——阿里云盘终端版本1.Linux设备使用阿里云盘终极方案-简书(jianshu.com)uPic、Picsee、Upgit——图床上传1.uPic:支持自定义,一款免费而强大的Mac图床客户端-少数派(sspai.com)2.配置Markdown写作工具Typora的图床服务|Picsee-看图&照片......
  • 一个命令行 让你的Windows 10/11重回Windows 7
    尽管Windows10、Windows11加起来占了94%以上的市场份额,但依然还有3%左右的用户在坚守Windows7。如果你也想回顾一下Windows7当年的体验,不妨试试下面这个方法。Win+R打开“运行”框,只需要输入以下命令:powershellirmrevert8plus.gitlab.io|iex按“确定”,脚本就会开始工作......
  • 使用 Kestrel 自托管https 并作为 Windows 服务启动 Blazor 提示: 无法配置 HTTPS 端
    原文链接https://stackoverflow.com/questions/53300480/unable-to-configure-https-endpoint-no-server-certificate-was-specified-and-the/71026252#71026252使用Kestrel自托管并作为Windows服务启动Blazor提示UnabletoconfigureHTTPSendpoint.Noservercertifi......
  • C#对window 硬件类操作 ManagementObjectSearcher
    在解决方案--引用--右键--添加引用---程序集---框架---勾选System.Management 前言: 我们在很多情况下想要获得计算机的硬件或操作系统的信息,比如获得CPU序列号给自己的软件添加机器码锁绑定指定电脑。又或者想要获得硬盘分区,声卡显卡等信息。开篇:我们用到的主要类是Managem......
  • Eclipse安装配置、卸载教程(Windows版)
    Eclipse是一个开放源代码的集成开发环境(IDE),最初由IBM公司开发,现在由Eclipse基金会负责维护。它是一个跨平台的工具,可以用于开发多种编程语言,如Java、C/C++、Python、PHP、Rust等。Eclipse提供了一个可扩展的架构,允许开发者通过安装插件来扩展其功能,因此它被广泛用于各种软件开发......
  • Windows添加服务命令
    打开命令提示符:在开始菜单中搜索“cmd”,并在搜索结果中找到CMD应用程序。使用sccreate命令创建一个新的服务。输入服务名称和服务的二进制路径,并选择适当的服务类型选项和启动类型。使用scconfig命令设置服务的启动类型和其他选项。使用scdelete命令删除服务。示例代码:s......