当前位置: 主页 > 图像 >

CVPR2019:Side Window Filtering分析

时间:2019-05-25  作者:haden   点击:
【摘要】文章来自知乎专栏:https://zhuanlan.zhihu.com/p/58326095。主要分析代码部分。
原文:https://zhuanlan.zhihu.com/p/58326095


CVPR2019论文,最近比较少见的传统滤波算法论文。
文章的第一作者是殷慧博士,共同一作龚元浩。
龚元浩,深圳大学助理教授,2007年本科毕业于清华大学,2015年博士毕业于瑞士苏黎世联邦理工学院,主要从事图像处理、医学图像分析和计算机视觉方面的研究。


因为传统方法使用全窗口回归,把窗的中心位置放在待处理像素的位置。即便是用非线性各向异性加权,仍然无法杜绝沿着图像边缘的扩散(可能只是沿着边缘的扩散比较大,而沿着法线的扩散的比较小,比较小也是扩散,这是传统方法不保边的本质原因)。
基于上述分析,文章提出将待处理像素放在窗口的边缘,这就切断了可能的法线方向的扩散。这就是这篇文章的核心思想。




如上图所示,传统全窗口回归方式,a/b点会对本不属于自己平面的值进行计算,造成真实平面的滤波偏差。

文章则提出将a/b点所在平面计算滤波,避免因为滤波造成的边缘丢失。


但是具体到一个像素位置的时候,如何选择哪一个方向呢?我们可以直接枚举八个可能的方向,让数据自适应地选择一个最佳的方向就行了。


作者分享了代码:https://github.com/YuanhaoGong/SideWindowFilter


%all projection distances
d(:,:,1) = conv2(k_L, k_L, U,'same') - U;
d(:,:,2) = conv2(k_L, k_R, U,'same') - U;
d(:,:,3) = conv2(k_R, k_L, U,'same') - U;
d(:,:,4) = conv2(k_R, k_R, U,'same') - U;
d(:,:,5) = conv2(k_L, k, U,'same') - U;
d(:,:,6) = conv2(k_R, k, U,'same') - U;
d(:,:,7) = conv2(k, k_L, U,'same') - U;
d(:,:,8) = conv2(k, k_R, U,'same') - U;
这部分相当于使用8个核和原图进行卷积,然后和原图计算距离(做差)。
8个核类似8个方向上的均值滤波核,8个核分别为:



tmp = abs(d);
[~,ind] = min(tmp,[],3);
index = offset+total*ind;
和原图像卷积,即分别计算在上、下、左、右、左上、左下、右上、右下方向的值。在相同平面的,则该方向卷积后的值和原始值相差应该比较小,若不在一个平面则和原始值相差比较大。分别取每个点差值最小的方向做为最佳方向。
这里index是每个像素在最佳方向上的差值在d中的序号。

最后合成最终结果。



这是在垂直边缘(a)水平边缘(d)对角边缘(g)角块(j)渐变(m)和屋顶边缘(p)输入下的处理结果,在图像中间位置取数据整理出结果,黑色线是输入,蓝色线是传统窗口滤波,红色线是文章提出的算法结果。可以看出可以更好的保证边缘特征。

特别要注意的是,文章提出的算法可以和其他传统滤波方法结合,获得更好的保边效果。





盒式滤波、高斯滤波、中值滤波、双边滤波和导向滤波和文章提出的结合的对比。红框里是原始算法结果,绿框里是改进后的结果,边缘明显更加突出。



论文地址:https://arxiv.org/pdf/1905.07177.pdf




顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码: 点击我更换图片