导向滤波、快速导向滤波

2022-11-13  本文已影响0人  Valar_Morghulis

目录

1. 导向滤波(Guided Image Filtering, 2010)

2. 快速导向滤波(Fast Guided Filter, 2015)


Guided Image Filtering

ECCV2010 Oral

原文:

https://kaiminghe.github.io/publications/eccv10guidedfilter.pdf    (ECCV版)

https://kaiminghe.github.io/publications/pami12guidedfilter.pdf    (PAMI版)

作者地址:https://kaiminghe.github.io/

摘要:在本文中,我们提出了一种新型的显式图像滤波引导滤波器。从局部线性模型导出,引导滤波器通过考虑引导图像的内容来生成滤波输出,引导图像可以是输入图像本身或另一个不同的图像。引导滤波器可以像流行的双边滤波器[1]一样作为边缘保持平滑算子,但在边缘附近具有更好的性能。它还与matting-Laplacian矩阵有理论联系[2],因此是一个比平滑算子更通用的概念,可以更好地利用引导图像中的结构。此外,引导滤波器具有快速且非近似的线性时间算法,其计算复杂度与滤波核大小无关。我们证明,引导滤波器在各种计算机视觉和计算机图形应用中既有效又高效,包括降噪、细节平滑/增强、HDR压缩、图像抠图/羽化、去雾和联合上采样

1    引言

计算机视觉和计算机图形学中的大多数应用涉及图像滤波的概念,以减少噪声和/或提取有用的图像结构。简单的显式线性平移不变(LTI)滤波器,如高斯滤波器、拉普拉斯滤波器和索贝尔滤波器,广泛用于图像模糊/锐化、边缘检测和特征提取[3]。LTI滤波还包括求解泊松方程的过程,例如高动态范围(HDR)压缩[4]、图像拼接[5]和图像抠图[6],其中滤波核由同质拉普拉斯矩阵的逆隐式定义。

LTI滤波器的内核是空间不变的,并且与任何图像内容无关。但在许多情况下,我们可能希望在滤波过程中从给定的引导图像中加入附加信息。例如,在彩色化[7]中,输出色度通道应具有与给定亮度通道一致的边缘;在图像抠图[2]中,输出的阿尔法抠图应该捕获图像中的头发等薄结构。实现此目的的一种方法是优化二次函数,该二次函数通过考虑引导图像直接对未知输出施加一些约束。然后通过求解用引导图像的信息编码的大型稀疏矩阵来获得解。这个非均匀矩阵隐含地定义了一个翻译变量过滤核。这种方法广泛应用于许多应用中,如着色[7]、图像抠图[2]、多尺度分解[8]和雾霾去除[9]。虽然这种基于优化的方法通常会产生最先进的质量,但它的代价是计算时间长。

另一种方法是使用引导图像显式构建滤波器核。[10]中提出的双边滤波器在[1]中流行,后来在[11]中推广,可能是此类滤波器中最流行的一种。其在像素处的输出是附近像素的加权平均值,其中权重取决于引导图像中的强度/颜色相似性。引导图像可以是滤波器输入本身[1]或另一图像[11]。双边滤波器可以平滑小波动并保留边缘。尽管该滤波器在许多情况下有效,但它可能在边缘附近具有不希望的梯度反转伪影[12,13,8](在第3.4节中进一步解释)。它的快速实施也是一个具有挑战性的问题。最近的技术[14-17]依赖于量化方法来加速,但可能会牺牲准确性。

在本文中,我们提出了一种新型的显式图像滤波器,称为引导滤波器。滤波输出是引导图像的局部线性变换。该滤波器与双边滤波器一样具有边缘保持平滑特性,但不会受到梯度反转伪影的影响。它还与抠图拉普拉斯矩阵有关[2],因此是一个更通用的概念,适用于“平滑”范围以外的其他应用。此外,对于灰度图像和彩色图像,引导滤波器具有O(N)时间(以像素数N)精确算法。实验表明,在各种应用中,如降噪、细节平滑/增强、HDR压缩、图像抠图/羽化、去雾和联合上采样,引导滤波器在质量和效率方面都表现得非常好。

4    应用和实验结果

在本节中,我们将引导过滤器应用于各种计算机视觉和图形应用。

抠图/引导羽化

我们将引导过滤器应用为引导羽化:对二元掩模进行细化,使其在对象边界附近出现阿尔法抠图(图9)。二进制掩模可以从图形切割或其他分割方法中获得,并用作滤波器输入p。引导I是彩色图像。在商业软件Adobe Photoshop CS4中可以找到类似的功能“细化边缘”。我们也可以使用Closed-form解计算精确的抠图[2]。在图9中,我们将我们的结果与Photoshop Refine Edge和Closed-form解决方案进行了比较。我们的结果在视觉上与这个短发案例中的Closed-form解决方案相当。我们的方法和Photoshop都为这张6兆像素的图像提供了快速反馈(<1s),而Closed-form的解决方案需要大约两分钟来解决一个庞大的线性系统

联合上采样。

联合上采样[21]是在另一图像的引导下对图像进行上采样。以着色[7]的应用为例。通过优化过程对灰度亮度图像进行着色。为了减少运行时间,在联合双边滤波器[21]的全分辨率亮度图像的指导下,以粗分辨率解算色度通道并进行上采样。该上采样过程也可以由引导滤波器执行。结果在视觉上具有可比性(图11)。


Fast Guided Filter

原文:https://arxiv.org/abs/1505.00996

摘要:引导滤波器是一种边缘感知图像滤波技术。由于其良好的视觉质量、快速的速度和易于实现的特点,引导滤波器在实际产品中得到了广泛的应用,如手机中的图像编辑应用和立体重建,并已被纳入官方MATLAB和OpenCV中。在本说明中,我们建议,使用下采样率s,引导滤波器可以简单地从O(N)时间加速到O(N/s^2)时间。在各种应用中,这会导致加速超过10倍,几乎没有可见的退化。我们希望这种加速将提高当前应用程序的性能,并进一步普及这种滤波器。代码已发布。

1. 引言

引导滤波器[1,2]是几种常用的边缘保持平滑算法之一。像素数为N时,其时间复杂度为O(N),与滤波器大小无关。引导滤波器可以有效地抑制梯度反转伪影[1],并产生视觉上令人愉悦的边缘轮廓。由于这些和其他特性,引导滤波器已包含在官方MATLAB 20142和OpenCV 3.03中,并广泛应用于实际产品中。

尽管它很受欢迎,并且有各种第三方实现,但我们注意到一个简单但显著的加速尚未被利用。[2]中简要提到了这种加速策略,用于联合上采样,但不用于其他通用场景。该方法对滤波输入图像和引导图像进行子采样,计算局部线性系数,并对这些系数进行上采样。在原始引导图像上采用上采样的系数以产生输出。对于子采样比s,该方法将时间复杂度从O(N)降低到O(N/s^2)。可以观察到实际的加速率>10×。(This method subsamples the filtering input image and the guidance image, computes the local linear coefficients, and upsamples these coefficients. The upsampled coefficients are adopted on the \emph{original} guidance image to produce the output. )

在这篇文章中,我们通过提供更多的技术细节、视觉示例和公开发布的代码4重新审视了这种加速方法。这种加速方法特别适用于百万像素图像,因为在实践中,滤波器大小通常设置为与图像大小成比例。这样,子采样图像上的局部窗口仍然可以提供足够的像素用于计算局部统计。在我们广泛的图像处理实际应用中,我们发现这种加速方法几乎没有明显的退化。考虑到引导滤波器在实际产品中的应用越来越多,我们希望这种简单的加速将提高这些应用的性能,并进一步推广这种滤波技术。

2    方法

我们将引导图像、滤波输入图像和滤波输出图像分别表示为Ipq。引导滤波器由局部线性模型驱动:

q_{i}=a_{k}I_{i}+b_{k}, \forall i \in \omega_{k}    (1)

其中i是像素的索引,k是半径为r的局部方形窗口ω的索引。给定滤波输入图像p,最小化pq之间的重建误差[1]得到:

 a_{k}=\frac{\frac{1}{|\omega|}\sum_{i\in\omega_{k}}I_{i}p_{i}-\mu_{k}\bar{p}_{k}}{\sigma_{k}^{2}+\epsilon}    (2)

b_{k}=\bar{p}_{k}-a_{k}\mu_{k}    (3)

其中\mu_{k}\sigma_{k}是窗口kI的均值和方差,\epsilon是控制平滑度的正则化参数。滤波输出的计算公式为:

q_{i}=\bar{a}_{i}I_{i}+\bar{b}_{i}    (4)

其中\overline{a}_{i}\overline{b}_{i}分别是以i为中心的窗口\omega_{i}ab的平均值。主要计算是一系列box filters。算法1显示了引导滤波器的伪码[2],其中f_\mathrm{mean}(\cdot, r)表示半径为r的平均滤波器。

在上文中,等式(4)中的\overline{a} \overline{b} 是两个平滑过的图(two smoothed maps),并且q中的边缘和结构主要通过调制图像I(因此称为引导)来给出。但是,引导滤波器的主要计算是针对\overline{a} \overline{b} 的平滑图,这不需要在全分辨率下执行。算法2描述了快速引导滤波器的子采样版本。我们以比率s对输入p和引导I进行下采样(最近邻或双线性)。所有的box filters都在低分辨率图上执行,这是引导滤波器的主要计算。两个系数映射(coefficient maps)\overline{a} \overline{b} 被双线性上采样到原始大小。最后,输出q仍由q=\overline{a}I+\overline{b}计算。在最后一步中,图像I下采样的全分辨率引导,它仍将忠实地引导输出。

所有box filters的计算从O(N)复杂度降低到O(N/s^2)。最后的双线性上采样和输出步骤的复杂度是O(N),但只占整个计算的一小部分。在实践中,我们观察到,对于MATLAB和精心优化的C++实现(取决于通道数),当s=4时,加速速度都大于10×。图1到4显示了[1]中各种应用中使用s=4的视觉结果。

上一篇下一篇

猜你喜欢

热点阅读