分享2019 CVPR的一篇图像滤波算法论文。这个算法的新颖之处在于:不管传统的滤波器保不保边,运用了Side Window后都可以保边。
经典滤波算法基本都是:以某个像素点为中心,按照滤波半径,把这个包括像素点和其邻域加权线性组合得到输出,一般公式如下:
Ω是以像素点 i 为中心的滤波窗口,w是滤波权值,q是原图像素值,I’是输出结果。但是这样以一个像素为中心去滤波会导致的问题是,如果一个像素点处在边缘位置(这里的边缘不是指图片的大小边界,而是指图像中物体的边缘)的话,以像素为中心去滤波会导致滤波结果的边缘部分变模糊。
论文中为了分析方便讨论了三种典型的边缘,分别是图中的 (a)阶梯状边缘、(b)斜坡状边缘和©屋顶状边缘。
根据泰勒展开公式分析,得出结论:如果一个像素点处于图像中的边缘位置,那么滤波的时候就应该把滤波器的边缘和该像素点对齐,而不是把滤波器的中心和该像素点对齐。受此启发,论文作者提出了一个新的保边滤波策略:就是把每个滤波像素点都当成是潜在的边缘点,然后对于每个待滤波的像素点,生成几种不同的滤波子窗口,然后把这些滤波窗口的边缘或者角点位置和该像素点对齐,然后滤波得到结果,最后根据把这些子窗口的滤波之后的最佳重构结果作为最终的滤波结果。
文中提出了8个方向的滤波窗口,分别是上、下,左、右、左上、右上、左下和右下
side window filter 的核心算法流程如下:
论文中又详细分析了 box filter 和 side window box filter 对于上面提到的三种经典边缘的滤波之后的保留情况。文中给出分析的图表如下:
论文中的一些效果图
用C++和OpenCV实现Sub WIndow Filter 与均值滤波的结合算法。对下图进行滤波
迭代十次的均值滤波
迭代十次,加了Sub Window Filtering 的均值滤波
需要源代码的,请关注+点赞+留言。