原文: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个核分别为:
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 |