精华内容
下载资源
问答
  • 图像滤波【一】:从高斯滤波到引导滤波
    千次阅读
    2022-02-23 20:30:59

    前言:最近在做一个图像的作业, 要求python实现双边滤波和引导双边滤波。
    可以使用opencv,numpy。不能用opecv增强库(ximageproc之类的就用不了啦),
    这里记录一下学习心得。主要是直觉上地介绍各个滤波器,后面有空再更代码细节。

    ps. 查资料过程中,最无法理解的一个概念是都说双边滤波的弊端:梯度反转 (gradient reveral ) 。但是找了很多文章和问答都没看到解释清楚的答案,最后还是无奈找到何凯文大神的会议PPT,似乎看懂了一点。后面会介绍。

    高斯滤波 Guassion Filter

    高斯滤波,涉及两个概念:图像滤波 + 高斯函数。

    图像滤波器/卷积核

    参考链接:https://spatial-lang.org/conv
    correlation vs convolution

    滤波操作:
    蓝色格子 - 原图,虚线格子 - padding, 绿色格子 - 结果图
    卷积过程

    互相关和卷积名词误用

    互相关(cross-correlation) 和 卷积(convolution),这俩概念其实最早是用在信号处理的,处理一维信号。图像是二维的,也是一维信号的延伸。
    图像滤波: “卷积核” 对图像执行“卷积”操作。从而得到想要的效果:平滑,锐化,去噪等等。
    为什么给“卷积”打上引号呢,现在的图像滤波算法对卷积核的定义其实是“correlation(相关)” 而不是“convolution(卷积)” 。

    • Correlation :
      过滤器(kernel)在图像上移动并计算每个位置的乘积总和的过程。
    • Convolution:
      先将过滤器翻转180度,然后执行Correlation。

    这两个操作区别只在于核是否先翻转自己。那么它们之间到底有什么不同(物理意义)。

    先一句话总结:在单位像素下,互相关(correlation) 之后只能得到一个 kernel 翻转副本,而卷积(convolution) 能保留 kernel 的原始副本。

    看下面两张图:
    (a)和 w 互相关得到的是滤波器 w 的 180度翻转(e)
    在这里插入图片描述
    先翻转 w,之后correlation,最终得到了和 w 一样的值(h)。:
    在这里插入图片描述
    图源 correlation vs convolution

    至于为什么大家混淆了这两者之间的概念,却也习以为常,我个人认为是因为“问题不大”,卷积核翻转对称的情况很多,比如下面

    从左至右:中值滤波,边缘滤波,边缘滤波,图像锐化
    在这里插入图片描述
    图源: slides from CSCI5210 CS CUHK Chi-Wing FU,Philip

    卷积在神经网络里面用的也非常多,但其实都是correlation。传统的图像处理需要人工选择滤波器,CNN则是全靠机器自己【找出】适合的卷积核,训练过程中只需要指定核的大小,所以先翻转再相关,等于是脱了裤子放屁。

    高斯函数

    高斯滤波: 卷积核换成高斯分布离散采样后的值
    在这里插入图片描述
    三维空间,看起来像一座山,高斯核的权重包含的是「空间信息」。意味着离中心点越远的像素点权重越低。
    在这里插入图片描述
    图源: slides from CSCI5210 CS CUHK Chi-Wing FU,Philip

    缺点

    高斯滤波能起到很好的平滑效果,但是有一个严重的缺点,它在滤波时会把图像的所有点,包括噪点(需要去除)、边缘(需要保留),一视同仁。它关心的只有「空间信息」。
    在这里插入图片描述
    图源: slides from CSCI5210 CS CUHK Chi-Wing FU,Philip

    双边滤波 Bilateral Filter

    为了解决高斯滤波导致滤波后图像边缘模糊的问题。
    双边滤波诞生了。

    双边滤波除了关心空间信息,还关心【像素差】,想象一下,如果图像存在边缘(edge),那么是否说明在边缘的两个方向,存在像素的【梯度变化】?
    如下图:

    卷积核不再是统一的【空间】高斯分布,而是在与中心点像素值接近的地方接近于【空间】高斯分布,在与中心点像素差较大的地方接近于【颜色】高斯分布。

    空间高斯分布和颜色高斯分布

    对比高斯滤波
    在这里插入图片描述
    双边滤波增加了一项【颜色高斯】和一项【权重】在这里插入图片描述

    联合双边滤波 Joint Bilateral Filter

    联合双边滤波最早是为了解决「具有闪光和无闪光图像对的数码摄影」问题
    论文:【Digital Photography with Flash and No-Flash Image Pairs】
    提出问题:开了闪光灯的照片会失去细节(曝光过渡);不开闪光灯会有很多噪点:
    在这里插入图片描述
    图源论文
    作者结合两张图片的优点,提出了联合双边滤波:
    在这里插入图片描述

    引导滤波 Guidance Filter

    有空再更…

    论文: https://arxiv.org/pdf/1801.06928.pdf
    PPT:http://kaiminghe.com/eccv10/eccv10ppt.pdf

    先放张何恺明大神的图
    在这里插入图片描述
    在这里插入图片描述

    引导滤波的贡献:

    • 消除了梯度翻转
    • 让双边滤波处理速度变成了O(1)却不需要近似处理(图片不会失真)

    解决梯度反转问题

    图解在这里插入图片描述
    我一直不理解,到底为什么都说双边滤波有梯度翻转(gradient reversal)的问题?因为在我看来,滤波器再怎么滤,也不会让边缘的像素出现峰值。我的脑子想象不到…

    后来才明白其实不是滤波后的图像出现梯度翻转。
    而是在利用双边滤波进行图片【细节增强】(Detail Enhancement) 的时候发生的!

    【原图】 -> 【双边滤波】 -> 【原图 - 双边滤波 = 细节】 -> 【原图 + 细节 * n】 = 【带有梯度反转的增强图】

    这张图是当时论文会议的PPT, 非常形象,第一行红色曲线为滤波后;白色为原图。(想象成图片的横切面,高度为图像的亮度/像素值)
    在这里插入图片描述

    更多相关内容
  • 通过梯度域引导图像滤波进行多尺度曝光融合
  • RTG视觉纠偏的局部引导图像滤波算法 图像滤波算法
  • 引导图像滤波(Guided Image Filtering)

    千次阅读 2021-11-04 10:22:03
    引导图像滤波 摘要——在本文中,我们提出了一种新的显式图像滤波器,称为引导滤波器。从局部线性模型导出,引导滤波器通过考虑引导图像的内容来计算过滤输出,引导图像可以是输入图像本身或另一个不同的图像。引导...

    [Paper] Guided Image Filtering(2013)

    引导图像滤波

    摘要——在本文中,我们提出了一种新的显式图像滤波器,称为引导滤波器。从局部线性模型导出,引导滤波器通过考虑引导图像的内容来计算过滤输出,引导图像可以是输入图像本身或另一个不同的图像。引导过滤器也是一个比平滑更通用的概念:它可以将引导图像的结构传输到过滤输出,从而实现新的过滤应用,例如去雾和引导羽化。此外,无论内核大小和强度范围如何,引导滤波器自然具有快速且非近似的线性时间算法。目前,它是最快的边缘保留滤波器之一。实验表明,引导滤波器在各种计算机视觉和计算机图形应用中既有效又高效,包括边缘感知平滑、细节增强、HDR 压缩、图像抠图/羽化、去雾、联合上采样等。

    概述

    计算机视觉和计算机图形学中的大多数应用涉及图像过滤以抑制和/或提取图像中的内容。具有显式内核的简单线性平移不变 (LTI) 滤波器,例如均值、高斯、拉普拉斯和 Sobel 滤波器 [2],已广泛应用于图像恢复、模糊/锐化、边缘检测、特征提取等。或者,LTI 滤波器可以通过求解泊松方程隐式执行,如高动态范围 (HDR) 压缩 [3]、图像拼接 [4]、图像抠图 [5] 和梯度域操作 [6]。滤波内核由齐次拉普拉斯矩阵的逆隐式定义。

    LTI 滤波内核在空间上是不变的,并且与图像内容无关。但通常人们可能想要考虑来自给定引导图像的附加信息。各向异性扩散的开创性工作 [7] 使用滤波图像本身的梯度来引导扩散过程,避免平滑边缘。加权最小二乘 (WLS) 滤波器 [8] 利用滤波输入(而不是 [7] 中的中间结果)作为指导,并优化二次函数,这相当于具有非平凡稳态的各向异性扩散。在许多应用中,除了过滤输入之外,引导图像也可以是另一幅图像。例如,在着色 [9] 中,色度通道不应跨亮度边缘渗色;在图像抠图 [10] 中,alpha 抠图应该捕获合成图像中的薄结构;在去雾[11]中,深度层应该与场景一致。在这些情况下,我们分别将色度/alpha/深度层作为要过滤的图像,将亮度/复合/场景作为引导图像。[9]、[10] 和 [11] 中的过滤过程是通过优化由引导图像加权的二次成本函数来实现的。解决方案是通过求解一个仅依赖于指南的大型稀疏矩阵来给出的。这个非齐次矩阵隐含地定义了一个平移变量过滤内核。虽然这些基于优化的方法 [8]、[9]、[10]、[11] 通常会产生最先进的质量,但它伴随着昂贵的计算时间的代价。

    利用引导图像的另一种方法是将其显式构建到过滤器内核中。在 [12]、[13] 和 [1] 中独立提出并随后在 [14] 中推广的双边滤波器可能是此类显式滤波器中最受欢迎的一种。它在一个像素上的输出是附近像素的加权平均值,其中权重取决于引导图像中的强度/颜色相似性。引导图像可以是过滤器输入本身 [1] 或另一个图像 [14]。双边滤波器可以平滑小波动并同时保留边缘。尽管此过滤器在许多情况下都有效,但它可能会在边缘附近产生不需要的梯度反转伪影 [15]、[16]、[8](在第 3.4 节中讨论)。双边滤波器的快速实现也是一个具有挑战性的问题。最近的技术 [17]、[18]、[19]、[20]、[21] 依靠量化方法来加速,但可能会牺牲准确性。

    在本文中,我们提出了一种新的显式图像过滤器,称为引导过滤器。滤波输出是引导图像的局部线性变换。一方面,引导滤波器与双边滤波器一样具有良好的边缘保留平滑特性,但不会受到梯度反转伪影的影响。另一方面,引导滤波器可以在平滑之外使用:在引导图像的帮助下,它可以使滤波输出比输入更结构化,平滑度更低。我们证明了引导滤波器在各种应用中表现非常好,包括图像平滑/增强、HDR 压缩、闪光/无闪光成像、抠图/羽化、去雾和联合上采样。此外,对于灰度和高维图像,无论内核大小和强度范围如何,引导滤波器自然都具有 O(N)时间(以像素数 N)1 的非近似算法。通常,我们的 CPU 实现每百万像素执行 40 ms 执行灰度过滤:据我们所知,这是最快的边缘保留过滤器之一。

    本文的初步版本发表在 ECCV '10 [22] 上。值得一提的是,导向滤波器从那时起见证了一系列新的应用。引导滤波器实现了高质量的实时 O(N) 立体匹配算法 [23]。在[24]中独立提出了一种类似的立体方法。引导滤波器也已应用于光流估计 [23]、交互式图像分割 [23]、显着性检测 [25] 和照明渲染 [26]。我们相信引导滤波器在计算机视觉和图形方面具有巨大的潜力,因为它具有简单、高效和高质量的特点。我们提供了一个公共代码以方便未来的研究 [27]。

    相关工作

    我们将在本节中回顾边缘保留过滤技术。我们将它们分类为显式/隐式加权平均过滤器和非平均过滤器。

    显式加权平均滤波器

    双边滤波器 [1] 可能是显式加权平均滤波器中最简单、最直观的滤波器。它将每个像素的滤波输出计算为相邻像素的平均值,由空间和强度距离的高斯加权。双边滤波器在保留边缘的同时平滑图像。它已广泛应用于降噪[28]、HDR压缩[15]、多尺度细节分解[29]和图像抽象[30]。它被推广到 [14] 中的联合双边滤波器,其中权重是从另一个引导图像而不是滤波输入计算的。当要过滤的图像不能可靠地提供边缘信息时,联合双边滤波器特别受欢迎,例如,当它非常嘈杂或者是中间结果时,例如在闪光/非闪光去噪 [14]、图像上采样 [ 31]、图像去卷积[32]、立体匹配[33]等。

    尽管双边过滤器很受欢迎,但它也有局限性。在 [15]、[16] 和 [8] 中已经注意到双边滤波器可能会受到“梯度反转”伪影的影响。原因是当一个像素(通常在边缘)周围几乎没有相似的像素时,高斯加权平均值是不稳定的。在这种情况下,结果可能会出现边缘周围不需要的轮廓,通常在细节增强或 HDR 压缩中观察到。

    关于双边过滤器的另一个问题是效率。一个蛮力实现是 O ( N r 2 ) O(Nr^2) O(Nr2)耗时,内核半径为 r。 Durand 和 Dorsey [15] 提出了一个分段线性模型并启用基于 FFT 的过滤。Paris 和 Durand [17] 将灰度双边滤波器公式化为空间范围域中的 3D 滤波器,如果 Nyquist 条件近似为真,则对该域进行下采样以加快速度。在框空间内核的情况下,Weiss [34] 提出了一种基于分布直方图的 O ( N l o g r ) O(N log r) O(Nlogr) 时间方法,Porikli [18] 提出了第一个使用积分直方图的 O ( N ) O(N) O(N) 时间方法。我们指出,构建直方图本质上是在空间范围域中执行 2D 空间过滤器,然后是 1D 范围过滤器。在这种观点下,[34] 和 [18] 都沿距离域对信号进行采样,但不对其进行重构。Yang [19] 提出了另一种 O(N)时间方法,该方法沿范围域进行插值以允许更积极的子采样。以上所有方法都是线性复数 w.r.t. 采样强度的数量(例如,线性块或直方图箱的数量)。它们需要粗略采样才能达到令人满意的速度,但如果奈奎斯特条件严重破坏,则会以质量下降为代价。

    空间范围域被推广到更高维度的颜色加权双边滤波 [35]。高维 kd 树 [20]、Permutohedral Lattices [21] 或 Adaptive Manifolds [36] 可以减少由于高维而造成的昂贵成本。但是这些方法的性能与灰度双边滤波器相比没有竞争力,因为它们花费了大量额外的时间来准备数据结构。

    鉴于双边滤波器的局限性,人们开始研究快速保边滤波器的新设计。O(N)时间边缘避免小波(EAW)[37]是具有显式图像自适应权重的小波。但是小波的核在图像平面上稀疏分布,核大小受限(到2的幂),这可能会限制应用。最近,Gastal 和 Oliveira [38] 提出了另一种 O(N)时间滤波器,称为域变换滤波器。关键思想是迭代和可分离地应用一维边缘感知滤波器。O(N)时间复杂度是通过积分图像或递归滤波来实现的。 我们将在本文中与此过滤器进行比较。

    隐式加权平均滤波器

    一系列的方法优化一个二次代价函数,求解一个线性系统,相当于用逆矩阵隐式过滤图像。在图像分割 [39] 和着色 [9] 中,该矩阵的亲和度是颜色相似度的高斯函数。在图像抠图中,抠图拉普拉斯矩阵 [10] 旨在将 alpha 抠图强制为图像颜色的局部线性变换。该矩阵也用于去除雾霾 [11]。[8] 中的加权最小二乘滤波器根据图像梯度调整矩阵亲和度,并产生无晕边缘保留平滑。

    尽管这些基于优化的方法通常会产生高质量的结果,但求解线性系统非常耗时。由于需要内存的“填充”问题[40]、[41],像高斯消元这样的直接求解器并不实用。Jacobi 方法、连续过度松弛 (SOR) 和共轭梯度 [40] 等迭代求解器收敛速度太慢。尽管精心设计的预处理器 [41] 大大减少了迭代次数,但计算成本仍然很高。多重网格方法 [42] 被证明是齐次 Poisson 方程的 O ( N ) O(N) O(N) 时间复数,但是当矩阵变得更加不齐次时,它的质量会下降。根据经验,通过预处理 [41] 或多重网格 [8],隐式加权平均滤波器至少需要几秒钟来处理 1 百万像素的图像。

    已经观察到这些隐式过滤器与显式过滤器密切相关。在[43]中,Elad 表明双边滤波器是求解高斯亲和矩阵的一次 Jacobi 迭代。分层局部自适应预处理器 [41] 和边缘避免小波 [37] 以类似的方式构造。在本文中,我们表明引导滤波器与抠图拉普拉斯矩阵 [10] 密切相关。

    非平均滤波器

    边缘保留滤波也可以通过非平均滤波器来实现。中值滤波器 [2] 是众所周知的边缘感知算子,是局部直方图滤波器 [44] 的特例。直方图过滤器以双边网格的方式具有 O ( N ) O(N) O(N)时间实现。总变异 (TV) 滤波器 [45] 优化了 L1 正则化成本函数,并且显示为等效于迭代中值滤波 [46]。L1 成本函数也可以通过半二次分裂 [47] 进行优化,在二次模型和软收缩(阈值)之间交替。最近,巴黎等人[48] 提出操纵每个像素周围拉普拉斯金字塔的系数以进行边缘感知滤波。徐等人 [49] 建议优化 L0 正则化成本函数,有利于分段常数解。非平均滤波器通常在计算上很昂贵。

    导向过滤器

    我们首先定义一个通用的线性平移变量滤波过程,它涉及引导图像 I I I、滤波输入图像 p p p 和输出图像 q q q I I I p p p 都是根据应用预先给出的,它们可以是相同的。像素 i i i 处的滤波输出表示为加权平均值:
    在这里插入图片描述
    其中 i i i j j j 是像素索引。 滤波器内核 W i j W_{ij} Wij 是引导图像 I I I 的函数,与 p p p 无关。 该滤波器相对于 p p p 是线性的。

    这种滤波器的一个例子是联合双边滤波器 [14](图 1(左))。双边滤波核 W b f W^{bf} Wbf 由下式给出
    在这里插入图片描述
    其中 x x x 是像素坐标, K i K_i Ki 是标准化参数,以确保 ∑ j W i j b f = 1 \sum_j W^{bf}_{ij}=1 jWijbf=1。参数 σ s \sigma_s σs σ r \sigma_r σr 分别调整空间相似性和范围(强度/颜色)相似性的灵敏度。当 I I I p p p 相同时,联合双边滤波器降级为原始双边滤波器 [1]。
    在这里插入图片描述
    隐式加权平均滤波器(在第 2.2 节中)优化二次函数并以这种形式求解线性系统:
    在这里插入图片描述
    其中 q q q p p p 分别是连接 q i q_i qi 和 $p_i的 N × 1 N×1 N×1 向量, A A A 是仅取决于 I I I N × N N×N N×N 矩阵。(3) 的解,即 q = A − 1 p q=A^{-1}p q=A1p,与 (1) 具有相同的形式,其中 W i j = ( A − 1 ) i j W_{ij}=(A^{-1})_{ij} Wij=(A1)ij

    定义

    现在我们定义引导过滤器。引导滤波器的关键假设是引导 I I I 和滤波输出 q q q 之间的局部线性模型。我们假设 q q q I I I 在以像素 k k k 为中心的窗口 w k w_k wk 中的线性变换:
    在这里插入图片描述
    其中 ( a k , b k ) (a_k, b_k) (ak,bk)是假设在 窗口 w k w_k wk 中为常数的一些线性系数。我们使用半径为 r r r 的方形窗口。这个局部线性模型确保只有当 I I I 有边时 q q q 才有边,因为 ∇ q = a ∇ I \nabla q = a \nabla I q=aI。该模型已被证明可用于图像超分辨率 [50]、图像抠图 [10] 和去雾 [11]。

    确定线性系数 ( a k , b k ) (a_k, b_k) (ak,bk),我们需要来自过滤输入 p p p 的约束。我们将输出 q q q 建模为输入 p p p 减去一些不需要的分量 n n n,如噪声/纹理:
    在这里插入图片描述
    我们寻求一种在保持线性模型 (4) 的同时最小化 q q q p p p 之间差异的解决方案。 具体来说,我们在窗口 w k w_k wk 中最小化以下成本函数:
    在这里插入图片描述
    这里 ϵ \epsilon ϵ,是惩罚大 a k a_k ak 的正则化参数。我们将在 3.2 节研究它的直观含义。方程(6)是线性岭回归模型[51]、[52],其解由下式给出
    在这里插入图片描述
    这里, μ k \mu_k μk σ k 2 \sigma^2_k σk2 w k w_k wk I I I 的均值和方差, ∣ w ∣ \vert w \vert w w k w_k wk 中像素的数量, p ˉ k = 1 ∣ w ∣ ∑ i ∈ w k p i \bar p_k = \frac{1}{\vert w \vert}\sum_{i \in {w_k}}p_i pˉk=w1iwkpi w k w_k wk p p p 的均值 。已获得线性系数 ( a k , b k ) (a_k, b_k) (ak,bk),我们可以通过(4)计算过滤输出 q i q_i qi。图 1(右)显示了引导过滤过程的图示。

    然而,覆盖i的所有重叠窗口 w k w_k wk中都涉及一个像素 i i i,因此在不同窗口计算时,式(4)中 q i q_i qi的值并不相同。一个简单的策略是平均所有可能的 q i q_i qi 值。 所以在计算 ( a k , b k ) (a_k,b_k) (ak,bk) 之后; 对于图像中的所有窗口 w k w_k wk,我们计算过滤输出

    在这里插入图片描述
    注意到 ∑ k ∣ i ∈ w k a k = ∑ k ∈ w i a k \sum_{k\vert i \in w_k}a_k = \sum_{k\in w_i}a_k kiwkak=kwiak 由于框窗口的对称性,我们将(9)改写为
    在这里插入图片描述
    其中 a ˉ i = 1 ∣ w ∣ ∑ k ∈ w i \bar a_i = \frac{1}{\vert w \vert} \sum_{k \in w_i} aˉi=w1kwi b ˉ i = 1 ∣ w ∣ ∑ k ∈ w i \bar b_i = \frac{1}{\vert w \vert} \sum_{k \in w_i} bˉi=w1kwi 是所有与 i i i 重叠的窗口的平均系数。重叠窗口的平均策略在图像去噪中很流行(参见 [53]),并且是非常成功的 BM3D 算法 [54] 的构建块。

    随着(10)中的修改, ∇ q \nabla q q 不再是 ∇ I \nabla I I 的缩放,因为线性系数 ( a ˉ i , b ˉ i ) (\bar a_i, \bar b_i) (aˉi,bˉi) 随空间变化。但是作为 ( a ˉ i , b ˉ i ) (\bar a_i, \bar b_i) (aˉi,bˉi) 是均值滤波器的输出,它们的梯度可以预期比靠近强边缘的 I I I 小得多。在这种情况下,我们仍然可以有 ∇ q ≈ a ˉ ∇ I \nabla q \approx \bar a \nabla I qaˉI,这意味着 I I I 中的突然强度变化可以大部分保留在 q q q 中。

    等式(7)、(8)和(10)是引导滤波器的定义。伪代码在算法 1 中。在该算法中, f m e a n f_{mean} fmean 是一个窗口半径为 r r r 的均值滤波器。相关性(corr)、方差(var)和协方差(cov)的缩写表示这些变量的直观含义。我们将在部分4讨论快速实现和计算细节。

    在这里插入图片描述

    边缘保留过滤

    给定引导滤波器的定义,我们首先研究边缘保留滤波特性。图 2 显示了具有各种参数集的引导滤波器的示例。在这里,我们研究引导 I I I 与过滤输入 p p p 相同的特殊情况。我们可以看到引导滤波器表现为边缘保留平滑算子(图 2)。
    在这里插入图片描述
    引导滤波器的保边滤波特性可以直观地解释如下。 考虑 I ≡ p I \equiv p Ip 的情况。 在这种情况下,在 (7)中 a k = σ k 2 / ( σ k 2 + ϵ ) a_k = \sigma_k^2/(\sigma_k^2+\epsilon) ak=σk2/(σk2+ϵ) b k = ( 1 − a k ) μ k b_k = (1 - a_k)\mu_k bk=(1ak)μk。如果 ϵ = 0 \epsilon = 0 ϵ=0,那么 a k = 1 a_k = 1 ak=1 b k = 0 b_k = 0 bk=0。如果 ϵ > 0 \epsilon > 0 ϵ>0,分为两种情况。
    情况 1:“高方差”。 如果图像 I I I w k w_k wk 内变化很大,我们有 σ k 2 ≫ ϵ \sigma^2_k \gg \epsilon σk2ϵ,所以 a k ≈ 1 a_k \approx 1 ak1 b k ≈ 0 b_k \approx 0 bk0
    情况 2:“扁平补丁”。 如果图像 I I I w k w_k wk中几乎不变,我们有 σ k 2 ≪ ϵ \sigma _k^2 \ll \epsilon σk2ϵ ,所以 a k ≈ 0 a_k \approx 0 ak0 b k ≈ μ k b_k \approx \mu_k bkμk

    a k a_k ak b k b_k bk 平均得到 a ˉ i \bar a_i aˉi b ˉ i \bar b_i bˉi 时,结合(10)得到输出,我们有,如果一个像素在一个“高方差”区域的中间,那么它的值不变( a ≈ 1 , b ≈ 0 , q ≈ p a \approx 1, b \approx 0, q \approx p a1,b0,qp),而如果它位于“平坦块”区域的中间,则其值变为附近像素的平均值 ( a ≈ 0 , b ≈ μ , q ≈ μ ˉ a \approx 0, b \approx \mu, q \approx \bar \mu a0,bμ,qμˉ )。

    更具体地说,“平坦补丁”或“高方差”的标准由参数 ϵ \epsilon ϵ给出。方差 ( σ 2 \sigma ^2 σ2) 远小于 ϵ \epsilon ϵ 的补丁被平滑,而方差远大于 ϵ \epsilon ϵ 的补丁被保留。引导滤波器中的 ϵ \epsilon ϵ效果类似于双边滤波器 (2) 中的范围方差 σ r 2 \sigma_r ^2 σr2:两者都确定“应该保留的边缘/高方差块是什么”。

    此外,在平坦区域中,引导滤波器变为两个半径为 r r r 的盒式均值滤波器的级联。箱式滤波器的级联是高斯滤波器的良好近似。因此,我们凭经验建立了引导滤波器和双边滤波器之间的“对应关系”: r ↔ σ s r \leftrightarrow \sigma _s rσs ϵ ↔ σ r 2 \epsilon \leftrightarrow \sigma_r^2 ϵσr2 。图 2 显示了使用相应参数的两种滤波器的结果。图2中的表“PSNR”显示了相应参数的引导滤波结果与双边滤波结果之间的定量差异。当 P S N R ≥ 40 d B PSNR \geq 40 dB PSNR40dB [18] 时,它通常被认为是视觉上不敏感的。

    过滤内核

    很容易证明,由(7)、(8)和(10)给出的 I 、 p I、p Ip q q q 之间的关系是(1)式的加权平均形式。实际上,式(7)中的 a k a_k ak 可以改写为 p : a k = ∑ j A k j ( I ) p j p:a_k = \sum_jA_{kj}(I)p_j p:ak=jAkj(I)pj 的加权和,其中 A i j A_{ij} Aij 是仅 P P P 依赖于 I I I 的权重。出于同样的原因,我们还有来自 (8) 的 b k = ∑ j B k j ( I ) p j b_k = \sum_jB_{kj}(I)p_j bk=jBkj(I)pj 和来自 (10) 的 q i = ∑ j W i j ( I ) p j q_i = \sum_jW_{ij}(I)p_j qi=jWij(I)pj。我们可以证明核权重明确表示为
    在这里插入图片描述
    证明。 由于 p p p q q q 之间的线性相关性,滤波器内核由 W i j = ∂ q i / ∂ p j W_{ij}= \partial q_i / \partial p_j Wij=qi/pj给出。将(8)式代入(10)式并消去 b b b,我们得到
    在这里插入图片描述
    导数给出
    在这里插入图片描述
    在这个等式中,我们有
    在这里插入图片描述
    其中,当 j j j在窗口 w k w_k wk 中时 δ j ∈ w k \delta_{j \in w_k} δjwk 为 1,否则为 0。另一方面,(13)中的偏导数 ∂ a k / ∂ p j \partial a_k / \partial p_j ak/pj可以从(7)计算:
    在这里插入图片描述
    将(14)和(15)代入(13),我们得到
    在这里插入图片描述
    这就是滤波器内核 W i j W_{ij} Wij 的表达式。一些进一步的代数运算表明 ∑ j W i j ( I ) ≡ 1 \sum_jW_{ij}(I) \equiv 1 jWij(I)1。不需要额外的努力来标准化权重。

    边缘保留平滑特性也可以通过研究滤波器内核(11)来理解。以一维信号的理想阶跃边缘为例(图 3)。当 I i I_i Ii I j I_j Ij 位于边的同一侧时,项 I i − μ k I_i - \mu_k Iiμk I j − μ k I_j - \mu_k Ijμk 具有相同的符号 (+/-),而当两个像素位于不同侧时,它们具有相反的符号。所以在(11)中, 1 + ( I i − μ k ) ( I j − μ k ) σ k 2 + ϵ 1+\frac{(I_i - \mu_k)(I_j - \mu_k)}{\sigma^2_k + \epsilon} 1+σk2+ϵ(Iiμk)(Ijμk) 对于不同边的两个像素比相同边小得多(并且接近于零)。这意味着跨边缘的像素几乎没有被平均在一起。我们也可以从(11)中理解 ϵ \epsilon ϵ平滑效果。当 σ k 2 ≪ ϵ \sigma^2_k \ll \epsilon σk2ϵ(“平坦补丁”)时,内核变为 W i j ( I ) ≈ 1 ∣ w ∣ 2 ∑ k : ( i , j ) ∈ w k W_{ij}(I) \approx \frac{1}{{\vert w \vert} ^2}\sum_{k:(i,j)\in w_k} Wij(I)w21k:(i,j)wk 1:这是一个 LTI 低通滤波器(它是两个均值滤波器的级联)。
    在这里插入图片描述

    图 4 说明了真实图像中核形状的一些示例。顶行是靠近阶梯边缘的内核。与双边内核一样,引导滤波器内核为边缘另一侧的像素分配几乎为零的权重。中间一行是带有小比例纹理的补丁中的内核。两个滤波器将几乎所有附近的像素平均在一起,并显示为低通滤波器。这在恒定区域(图 4(底行))中更为明显,其中引导滤波器退化为两个平均滤波器的级联。
    在这里插入图片描述
    可以在图 4b 中观察到,导向滤波器是旋转不对称的,并且稍微偏向 x/y 轴。这是因为我们在滤波器设计中使用了框窗口。这个问题可以通过使用高斯加权窗口来解决。形式上,我们可以在(6)中引入权重 w i k = e x p ( − ∥ x i − x k ∥ 2 / σ g 2 ) w_{ik} = exp(-\Vert x_i - x_k \Vert ^2 / \sigma^2_g) wik=exp(xixk2/σg2)
    在这里插入图片描述
    很明显,可以通过用高斯滤波器 f G a u s s f_{Gauss} fGauss 替换算法 1 中的所有平均滤波器 f m e a n f_{mean} fmean 来计算结果高斯引导滤波器。由此产生的内核是旋转对称的,如图 4d 所示。在第 4 节中,我们将展示高斯引导滤波器与原始引导滤波器一样仍然是 O ( N ) O(N) O(N) 时间。但是因为在实践中我们发现原始引导滤波器总是足够好,所以我们在所有剩余的实验中使用它。

    梯度保持过滤

    尽管引导滤波器是与双边滤波器一样的边缘保留平滑算子,但它避免了在细节增强和 HDR 压缩中可能出现的梯度反转伪影。对细节增强算法的简要介绍如下(另见图5)。给定输入信号 p p p(图 5 中的黑色),其边缘保留平滑输出用作基础层 q q q(红色)。输入信号和基础层之间的差异是细节层(蓝色): d = p − q d=p-q d=pq 。 它被放大以提升细节。增强信号(绿色)是增强细节层和基础层的组合。在 [15] 中可以找到对这种方法的详细描述。
    在这里插入图片描述
    对于双边滤波器(图 5(上)),基础层与边缘像素处的输入信号不一致(参见放大图)。图 6 说明了边缘像素的双边核。因为这个像素没有相似的邻居,高斯加权范围内核不可靠地平均一组像素。更糟糕的是,由于边缘的突然变化,范围内核有偏差。对于图 6 中的示例边缘像素,其滤波值小于其原始值,使得滤波信号 q q q 比输入 p p p 更锐利。在[15]、[16]、[8]中已经观察到了这种锐化效果。现在假设输入 p p p 的梯度为正: ∂ x p > 0 \partial _xp > 0 xp>0(如图 5 和图 6 所示)。当 q q q 锐化时,它给出: ∂ x q > ∂ x p \partial _x q > \partial_x p xq>xp。因此,细节层 d d d 具有负梯度 ∂ x d = ∂ x p − ∂ x q < 0 \partial_x d = \partial_x p - \partial_x q < 0 xd=xpxq<0,这意味着它具有相反的梯度方向 w.r.t. 输入信号(见图 5(上))。当细节层被放大并与输入信号重新组合时,边缘出现梯度反转伪影。这种伪影是固有的,不能通过调整参数安全地避免,因为自然图像通常在各种尺度和幅度上都有边缘。
    在这里插入图片描述

    另一方面,引导滤波器在避免梯度反转方面表现更好。实际上,如果我们使用patch-wise模型(4),在自引导过滤( I ≡ p I \equiv p Ip)的情况下保证不会出现梯度反转。在这种情况下,(7) 给出 a k = σ k 2 / ( σ k 2 + ϵ ) a_k = \sigma^2_k/(\sigma^2_k + \epsilon) ak=σk2/(σk2+ϵ) 并且 b k b_k bk 是一个常数。所以我们有 ∂ x q = a k ∂ x p \partial_xq=a_k \partial_xp xq=akxp和细节层梯度 ∂ x d = ∂ x p − ∂ x q = ( 1 − a k ) ∂ x p \partial_xd = \partial_xp - \partial_xq=(1-a_k)\partial_xp xd=xpxq=(1ak)xp,这意味着 ∂ x d \partial_xd xd ∂ x p \partial_xp xp总是在同一个方向。当我们使用重叠模型(9)而不是(4)时,我们有 ∂ x q = a ˉ ∂ x p + p ∂ x a ˉ + ∂ x b ˉ \partial_xq = \bar a \partial_xp + p \partial_x \bar a + \partial_x \bar b xq=aˉxp+pxaˉ+xbˉ。因为 a ˉ \bar a aˉ b ˉ \bar b bˉ是低通滤波图,我们得到 ∂ x q ≈ a ˉ ∂ x p \partial_xq \approx \bar a \partial_xp xqaˉxp,上面的结论仍然近似正确。在实践中,我们没有在所有实验中观察到梯度反转伪影。图 5(底部)给出了一个例子。在图 6 中,我们展示了边缘像素的引导滤波器内核。与双边内核不同,引导滤波器为内核较弱的一侧分配一些小而重要的权重。这使得引导内核的偏差较小,避免减少图 5 中示例边缘像素的值。

    我们注意到梯度反转问题也出现在最近的边缘保留域变换滤波器 [38](图 7)中。这个非常有效的过滤器是从 (1D) 双边核派生出来的,所以它不能安全地避免梯度反转。
    在这里插入图片描述

    颜色过滤的扩展

    引导过滤器可以很容易地扩展到彩色图像。在滤波输入 p p p 是多通道的情况下,可以直接将滤波器独立地应用于每个通道。在引导图像 I I I 为多通道的情况下,我们将局部线性模型(4)重写为
    在这里插入图片描述
    这里 I i I_i Ii 是一个 3 × 1 3 \times1 3×1 颜色向量, a k a_k ak 是一个 3 × 1 3 \times1 3×1 系数向量, q i q_i qi b k b_k bk 是标量。 彩色引导图像的引导过滤器变为
    在这里插入图片描述
    这里, ∑ k \sum_k k w k w_k wk I I I 3 × 3 3 \times 3 3×3 协方差矩阵, U U U 3 × 3 3 \times 3 3×3 单位矩阵。

    彩色引导图像可以更好地保留灰度无法区分的边缘(见图 8)。这也是双边滤波的情况[20]。颜色引导图像在抠图/羽化和去雾应用中也是必不可少的,正如我们稍后展示的那样,因为局部线性模型在 RGB 颜色空间中比在灰度中更有效 [10]。
    在这里插入图片描述

    结构传递过滤

    有趣的是,引导滤波器不仅仅是一个平滑滤波器。由于 q = a I + b q = aI + b q=aI+b的局部线性模型,输出 q q q 是引导 I I I 的局部缩放(加上偏移量)。这使得可以将结构从引导 I I I 转移到输出 q q q,即使滤波输入 p p p 是平滑的(见图 9)。
    在这里插入图片描述
    为了展示结构转换过滤的示例,我们引入了引导羽化的应用:改进了二进制蒙版以在对象边界附近出现 alpha 遮罩(图 10)。二值掩码可以从图形切割或其他分割方法中获得,并用作过滤器输入 p p p。指导 I I I 是彩色图像。 图 10 显示了三个滤波器的行为:引导滤波器、(联合)双边滤波器和最近的域变换滤波器 [38]。我们观察到引导过滤器忠实地恢复了头发,即使过滤输入 p p p 是二进制的并且非常粗糙。双边滤波器可能会丢失一些薄结构(参见放大)。这是因为双边滤波器由像素级色差引导,而引导滤波器具有补丁级模型。我们还观察到域变换滤波器没有良好的结构转移能力,只是简单地平滑了结果。这是因为该滤波器基于像素的测地距离,其输出是一系列具有自适应跨度的 1D 盒式滤波器 [38]。
    在这里插入图片描述
    结构传递滤波是引导滤波器的一个重要特性。它支持新的基于过滤的应用程序,包括羽化/消光和去雾(第 5 节)。它还可以在 [23] 和 [24] 中实现基于高质量过滤的立体匹配方法。

    与隐式方法的关系

    引导滤波器与抠图拉普拉斯矩阵 [10] 密切相关。这为理解此过滤器提供了新的见解。

    在 matting [10] 的封闭形式解决方案中,matting Laplacian 矩阵来自局部线性模型。与为每个窗口计算局部最优值的引导滤波器不同,封闭形式的解决方案寻求全局最优值。为了求解未知的 alpha 遮罩,此方法最小化了以下成本函数:
    在这里插入图片描述
    这里, q q q 是表示未知 alpha 遮罩的 N × 1 N×1 N×1 向量, p p p 是约束(例如,trimap), L L L N × N N\times N N×N 抠图拉普拉斯矩阵,并且 Λ \Lambda Λ是使用约束权重编码的对角矩阵。这个优化问题的解是通过求解一个线性系统给出的
    在这里插入图片描述
    抠图拉普拉斯矩阵的元素由下式给出
    在这里插入图片描述
    δ i j \delta_{ij} δij是Kronecker delta。比较(24)和(11),我们发现消光拉普拉斯矩阵的元素可以直接由引导滤波器核给出:
    在这里插入图片描述
    遵循 [43] 中的策略,我们证明了引导滤波器的输出是优化 (22) 中的一次 Jacobi 迭代:
    在这里插入图片描述
    证明。 (25) 的矩阵形式为
    在这里插入图片描述
    其中 U 是与 L 大小相同的单位矩阵。为了在线性系统 (23) 上应用 Jacobi 方法 [40],我们需要矩阵的对角线/非对角线部分。我们将 W W W 分解为对角线部分 W d W_d Wd 和非对角线部分 W o W_o Wo,因此 W = W d + W o W = W_d + W_o W=Wd+Wo。 从(27)和(23)我们有
    在这里插入图片描述
    请注意,这里只有 W o W_o Wo 是非对角线的。使用 p p p 作为初始猜测,我们计算 Jacobi 方法的一次迭代:
    在这里插入图片描述
    在(29)中,唯一的卷积是矩阵乘法 W p W_p Wp。其他矩阵都是对角线和逐点运算。为了进一步简化(29),我们让矩阵 Λ \Lambda Λ满足: Λ = ∣ w ∣ W d \Lambda = \vert w \vert W_d Λ=wWd或者,等价地,
    在这里插入图片描述
    (30)中 Λ i i \Lambda_{ii} Λii的期望值为2,这意味着(22)中的约束是软的。等式 (29) 然后简化为
    在这里插入图片描述
    这是引导过滤器。

    在 [55] 中,我们通过共轭梯度求解器 [40] 展示了引导滤波器和消光拉普拉斯矩阵之间的另一种关系。在第 5 节中,我们将此属性应用于图像消光/羽化和去雾,这提供了一些相当不错的初始猜测 p p p。这是过滤器结构传递特性的另一个角度。

    计算和效率

    引导滤波器相对于双边滤波器的主要优点是它自然具有 O ( N ) O(N) O(N) 时间非近似算法,与窗口半径 r r r 和强度范围无关。

    (1) 中的过滤过程是平移变量卷积。当内核变大时,它的计算复杂度会增加。我们不是直接执行卷积,而是根据算法 1 的定义(7)、(8)和(10)计算滤波器输出。主要的计算负担是具有半径为 r r r 的框窗口的均值滤波器 f m e a n f_{mean} fmean。幸运的是,可以使用积分图像技术 [57] 或简单的移动求和方法(参见算法 2)在 O ( N ) O(N) O(N) 时间内有效地计算(非标准化)盒式滤波器。考虑到盒式滤波器的可分离性,任一方法沿每个 x / y x/y x/y 方向对每个像素进行两次操作(加/减)。因此,平均滤波器 f m e a n f_{mean} fmean每像素进行五次加法/减法运算和一次@除法(归一化)。
    在这里插入图片描述
    使用 O ( N ) O(N) O(N) 时间均值滤波器,算法 1 中的引导滤波器自然是 O ( N ) O(N) O(N) 时间。同样,(19)、(20)和(21)中的颜色指导版本可以用类似的 O ( N ) O(N) O(N) 方式计算。公共 Matlab 代码在 [22] 中可用,包括灰度和彩色版本。

    在表 1 中,我们总结了不同场景所需的均值滤波器的数量。这里, d I d_I dI d p d_p dp 分别是 I I I p p p 中的通道数。我们还列出了 I ≡ p I \equiv p Ip 的特殊情况,因为 I I I p p p 的重复节省了一些均值过滤器。 I ≡ p I \equiv p Ip 的情况在实践中最受关注。
    在这里插入图片描述
    我们在配备 Intel core i7 3.0 GHz CPU 和 8 GB RAM 的 PC 中测试运行时间。实现是在 C++ 中。 除非另有说明,否则所有算法都是基于单核的,没有 SIMD 指令(例如 SSE)。在我们的实验中,平均滤波器大约需要 5-7 ms/Mp。 运行时间如表 1 所示。

    我们想强调的是,灰度图像边缘保留平滑 ( I ≡ p , d p = 1 ) (I \equiv p, d_p = 1) (Ip,dp=1) 仅需要 40 ms/Mp。作为比较(见表 2),[18] 中的 O ( N ) O(N) O(N) 时间双边滤波器使用 32-bin 直方图报告为 155 ms/Mp,使用 64-bin 报告为 310 ms/Mp,如 [ 18]。[18] 中描述的方法使用积分直方图,每个像素需要 6B 次加/减运算来构建直方图。相反,我们可以采用 [56] 中的移动直方图,这需要每个像素 2 B + 2 2B + 2 2B+2 次操作。使用 SSE,我们对 [18]+[56] 的实现实现了 40 ms/Mp ( B = 32 B=32 B=32) 和 80 ms/Mp ( B = 64 B= 64 B=64)。由于[56]中的移动直方图仅用于中值滤波,据我们所知,[18]+[56]的组合是文献中未发表的双边滤波的最新技术。当 B = 8 时,Yang 的 O ( N ) O(N) O(N) 算法 [19] 大约需要 120 ms/Mp(使用作者的公共代码,带有框空间内核)。

    请注意, O ( N ) O(N) O(N) 时间引导滤波器是非近似的,适用于任何范围的强度。相反,由于范围二次采样, O ( N ) O(N) O(N) 时间双边滤波器可能具有明显的量化伪影。图 11 显示了一个示例,其中要过滤的信号处于高动态范围内。Porikli 的方法 [18] 即使在 B = 32 时也有明显的量化伪影。 由于范围插值(但需要更多时间,见表 2),Yang 的方法 [19] 中类似的伪影在 B =8 时不太明显,但在 B = 4 因为奈奎斯特采样条件变得严重破坏。
    在这里插入图片描述
    在这里插入图片描述

    对于彩色图像滤波(见表 3),引导滤波器在 I ≠ q I \neq q I=q 时需要 300 ms/Mp,当 I ≡ q I \equiv q Iq 时需要 150 ms/Mp。这比高维双边滤波器算法快得多,例如高斯 kd-tree [20] (> 10 s/Mp) 和最先进的 Permutohedral Lattice [21] (> 1 s/Mp) 。在 [22] 中发布引导滤波器之后,最近的 [38] 提出了 O ( N ) O(N) O(N) 时域变换滤波器。如 [38] 中的报告,其归一化卷积 (NC) 版本需要 160 ms/Mp,其递归滤波器 (RF) 版本需要 60 ms/Mp 进行彩色图像过滤。虽然域变换非常快,但它并不能避免梯度反转(图 7),也不适合转移结构(图 10)。
    在这里插入图片描述
    使用 O ( N ) O(N) O(N) 时间递归高斯滤波器 [58],第 3.3 节中讨论的高斯引导滤波器也是 O ( N ) O(N) O(N) 时间。递归高斯滤波器比盒式滤波器更昂贵(每个 x / y x/y x/y 方向每个像素 15 个操作与 2 个操作)。

    实验

    接下来,我们在各种计算机视觉和图形应用程序中试验引导滤波器。
    细节增强和 HDR 压缩。 细节增强的方法在 3.4 节中描述。HDR 压缩以类似的方式完成,但压缩基础层而不是放大细节层(参见 [15])。图 12 显示了细节增强的示例,图 13 显示了 HDR 压缩的示例。还提供了使用双边滤波器的结果。如放大补丁所示,双边滤波器导致梯度反转伪影。请注意,梯度反转伪影通常会在边缘周围引入新的轮廓。
    在这里插入图片描述
    在这里插入图片描述

    闪光/无闪光去噪。 在[14]中,建议在其闪存版本的指导下对非闪存图像进行去噪。图 14 显示了使用联合双边滤波器和引导滤波器的比较。在联合双边滤波器结果中的某些边缘附近,梯度反转伪影很明显。
    在这里插入图片描述
    引导羽化/消光。 我们在第 3.6 节中介绍了引导羽化应用程序。 商业软件 Adob​​e Photoshop CS4 提供了一个类似的工具,称为“Refine Edge”。精确的遮罩也可以通过封闭形式的遮罩 [10] 来计算。 图 15 显示了比较。我们的结果在视觉上与这个短发案例中的封闭式解决方案相当。我们的方法和 Photoshop 都为这个 6 兆像素的图像提供了快速反馈(< 1 秒),而封闭形式的解决方案需要大约两分钟才能解决一个巨大的线性系统。
    在这里插入图片描述

    在一般的抠图情况下,模糊区域很大; 我们可以采用颜色采样策略 [59] 在过滤之前估计更可靠的初始猜测。结合全局采样方法 [59],引导滤波器是 alphamatting 基准(www.alphamatting.com,2012 年 6 月的性能报告)中性能最好的基于过滤的抠图方法。

    单幅图像去雾。 在[11]中,雾度透射图是使用暗通道先验粗略估计的,并通过求解消光拉普拉斯矩阵进行细化。相反,我们只是在朦胧图像的引导下对原始透射图进行过滤(我们首先应用一个最大过滤器来抵消最小过滤器的形态效应(参见 [11]),并将其视为 导向过滤器)。结果在视觉上相似(图 16)。 图 16 中的放大窗口也展示了滤波器的结构传递特性。对于这幅 600 × 400 600\times 400 600×400 幅图像,引导滤波器的运行时间约为 40 毫秒,而在 [11] 中使用 matting Laplacian 矩阵则为 10 秒。
    在这里插入图片描述
    联合上采样 联合上采样 [31] 是在另一幅图像的指导下对一幅图像进行上采样。以着色的应用[9]为例。灰度亮度图像通过优化过程着色。为了减少运行时间,色度通道以粗分辨率求解,并在全分辨率亮度图像的指导下由联合双边滤波器 [31] 进行上采样。

    该上采样过程可以由引导滤波器执行。该算法与算法 1 略有不同,因为现在我们有两个尺度的引导图像(例如,亮度)和仅粗尺度的滤波输入(例如,色度)。在这种情况下,我们在粗尺度上使用(7)和(8)计算线性系数 a a a b b b,将它们双线性上采样到精细尺度(替换 a a a b b b 上的均值滤波器),并通过 q = a I + b q = aI + b q=aI+b 在精细尺度上计算输出。结果在视觉上与联合双边上采样相当(图 17)。在我们的实现中,联合双边上采样每兆像素输出需要 180 ms(在 [31] 中报告为 2s/Mp),而引导滤波器上采样需要大约 20 ms/Mp。
    在这里插入图片描述

    限制 引导过滤器与其他显式过滤器有一个共同的限制——它可能会在某些边缘附近出现光晕。 “光晕”是指边缘不需要平滑处理的伪影。(相反,“梯度反转”是指边缘不需要锐化的伪影。在文献中,一些研究没有区分这两种伪影,简单地将它们称为“光晕”。我们在本文中分别讨论它们 因为这些工件的原因是不同的。)当过滤器被迫平滑某些边缘时,局部过滤器不可避免地会出现光晕。例如,如果要平滑强纹理(见图 18),则弱边缘也将被平滑。 像引导/双边滤波器这样的局部滤波器会将模糊集中在这些边缘附近并引入光晕(图 18)。基于全局优化的过滤器(例如 WLS 过滤器 [8])将更全局地分布这种模糊。光晕以全局强度转移为代价被抑制(见图 18(右))。
    在这里插入图片描述

    结论

    在本文中,我们提出了一种广泛适用于计算机视觉和图形的新型过滤器。与最近加速双边滤波器的趋势不同 [17]、[18]、[19]、[20]、[21],我们设计了一种新的滤波器,它展示了边缘保留平滑的良好特性,但可以计算 有效地和非近似地。我们的过滤器比“平滑”更通用,适用于结构转移,实现基于过滤的羽化/消光和去雾的新应用。由于局部线性模型 (4) 是一种无监督学习,因此可能会应用其他高级模型/特征来获得新的过滤器。 我们将其留作将来的研究。

    展开全文
  • 图像引导滤波

    2018-05-21 20:48:35
    本资源为何凯明博士2010年在ECCV 发表的引导滤波的论文,附有MATLAB源码以及所用到的图片。
  • 针对现有局部立体匹配算法在弱纹理表面、深度不连续处等特定区域匹配精度低、实时性难以满足要求等问题, 提出了一种基于跨尺度引导图像滤波的稠密立体匹配算法。利用图像分割技术对立体图像进行预分割, 得到分割区域...
  • 用于减少SAR图像斑点的引导图像滤波
  • 基于滚动引导滤波的红外与可见光图像融合算法 图像滤波算法.pdf
  • 论文地址以及代码:http://kaiminghe.com/eccv10/Abstract: 这篇文章中,作者提出了一种新颖的图像滤波算法。这种方法的灵感来自于局部线性模型。本方法引入了一个导向滤波图,这个导向滤波图可以是图片本身也可以是...

    论文地址以及代码:http://kaiminghe.com/eccv10/

    Abstract: 这篇文章中,作者提出了一种新颖的图像滤波算法。这种方法的灵感来自于局部线性模型。本方法引入了一个导向滤波图,这个导向滤波图可以是图片本身也可以是另一个图片,然后算法利用导向滤波图的纹路来对目标图像进行滤波。这个方法类似于双边滤波器是一个边缘保留平滑算子,但是在边缘保留的表现上优于双边滤波器。此外,他还可以将导向图的结构保留到滤波的结果中,可以用来去雾、羽化等。该方法处理速度快,应是现在最快的边缘保留滤波器。

    一、图像滤波的简要介绍

    说在前面:关于权重与边缘保留的关系,这篇文章解释的挺清楚的:http://blog.csdn.net/baimafujinji/article/details/74750283

    首先,我们定义一个线性转换的滤波器:

    这个公式的意思是说,输出像素的值是输入图像p以像素j为中心的一个小窗口和其对应像素的权重相乘后的和。这是最简单的滤波器,根据不同的权重有不同的作用。例如高斯滤波器,它的权重服从二维的高斯分布。也就是说,离中心像素越近的点就拥有更高的权重。这样的滤波器拥有很好的平滑作用,但也因此会使边缘变得模糊。

    再例如双边滤波器的权重,如公式(2)所示,相比起高斯滤波就更加的科学,也拥有更好的边缘保留能力。

    其中k表示了窗口中的像素数目,表示了两个像素之间的空间距离,表示了两个像素之间的颜色差距,这两个是常数系数。这个权重的意思是说,空间距离越近,颜色越相近,这个像素所占的权重就越大,反之则越小。由于边缘两边的像素通常很接近,但颜色相差却比较大,这样的权重就会相对小一些,也就达到了边缘保留的目的。

    二、导向图滤波

    符号定义:

    • I:引导图像
    • p:输入图像
    • q:输出图像

        公式定义:,其中,都是常数系数,要通过计算获得。

        这个公式非常简单却具有边缘保留的能力以及不逊色的平滑去噪能力。

            1. 首先来看一下为什么这个公式具有边缘保留能力:

            对公式(4)求导可以得到:,也就是说,导向图I有梯度的地方,输出图像q就有梯度,即,他们拥有相同的边缘。

            2. 如何平滑去噪

            在(4)式的线性模型下,我们在保留边缘的时候还要实现去噪,用公式表达的话就是:

          其中的就表示噪声。

            由(4)(5)可得我们需要最小化的损失函数为:

            

            其中的为惩罚项。

            对(6)式求解的结果如下:

            

            也就是说,在系数为(7)(8)式的时候,整个线性模型不仅能实现平滑去噪,还能实现边缘保留。

           

            然而,上面的公式都是针对一个像素点而言的。当我们真正处理起来的时候一般是使用滑动窗口的形式,于是,线性模型就变成了如下的形式:

            把前面的系数放进括号里面,就可以简单表达为:

            这里需要注意的是,经过(9)(10)式的变换以后,不在是的简单缩放了。因为空间可变,现在相当于被一个均值滤波器的滤过,是一个平均值,所以输出图像的梯度将会比输入图像的梯度小一些。在这种情况下,,也就意味着I中突然的梯度变化大部分能被q保留。

    三、运用到图像去雾中

        导向图滤波还能应用到图像去雾中去。上一篇文章《Single Image Haze Removal Using Dark Channel Prior》中,求出的t(x)只是粗略估计,而文章中的softmatting的方法过于复杂,时间复杂度也很高。在这篇文章中提出的导向图滤波就能代替softmatting的方法精细化t(x)。

        在图像去雾中,导向图就是有雾图像的暗通道图,输入图像就是有雾图像,算法如下图所示:

        

        四、代码

    opencv版

    #include<opencv2/opencv.hpp>
    #include<opencv2/highgui/highgui.hpp>
    #include<opencv2/imgproc/imgproc.hpp>
    //#include<iostream>
    using namespace cv;
    
    typedef struct Pixel
    {
    	int x;
    	int y;
    	int value;
    }Pixel;
    
    inline bool cmp(Pixel a, Pixel b)
    {
    	return a.value>b.value;
    }
    
    //最小值滤波
    //dark_img = minfliter(dark_img, windowsize);
    Mat minfilter(Mat& D, int windowsize) {
    	int dr = D.rows;
    	int dc = D.cols;
    	int r = (windowsize - 1) / 2; //windowsize是奇数
    	Mat dark_img(dr, dc, CV_8UC1);  //暗通道图
    	dark_img = D.clone();
    	for (int i = r;i <= dr - r - 1;i++) {
    		for (int j = r;j <= dc - r - 1;j++) {
    			int min = 255;
    			for (int m = i - r;m <= i + r;m++) {
    				for (int n = j - r;n <= j + r;n++) {
    					if (D.at<uchar>(m, n) < min)
    						min = D.at<uchar>(m, n);
    				}
    			}
    			dark_img.at<uchar>(i, j) = min;
    		}
    	}
    	//std::cout <<"暗通道图像"<< dark_img;
    	imshow("暗通道图", dark_img);
    	return dark_img;
    }
    
    //暗通道的计算
    Mat Producedarkimg(Mat& I, int windowsize)
    {
    	int min = 255;
    	Mat dark_img(I.rows, I.cols, CV_8UC1);  //单通道
    	int radius = (windowsize - 1) / 2;
    	int nr = I.rows; // number of rows    
    	int nc = I.cols;
    	int b, g, r;
    	if (I.isContinuous()) { //当图像连通时,我们就可以把图像完全展开,看成是一行
    		nc = nr * nc; 
    		nr = 1;
    	}
    	for (int i = 0;i<nr;i++)
    	{
    		const uchar* inData = I.ptr<uchar>(i);
    		uchar* outData = dark_img.ptr<uchar>(i);
    		for (int j = 0;j<nc;j++)
    		{
    			b = *inData++;
    			g = *inData++;
    			r = *inData++;
    			min = min>b ? b : min;  //寻找三通道中的最小值
    			min = min>g ? g : min;
    			min = min>r ? r : min;
    			*outData++ = min;
    			min = 255;
    		}
    	}
    	dark_img = minfilter(dark_img, windowsize);
    	return dark_img;
    }
    
    //计算大气光值A
    int* getatmospheric_light(Mat& darkimg, Mat& srcimg, int windowsize)
    {
    	int radius = (windowsize - 1) / 2;
    	int nr = darkimg.rows, nl = darkimg.cols;
    	int darksize = nr*nl;
    	int topsize = darksize / 1000;   //暗通道图中0.1%最亮像素的个数
    	int *A = new int[3];
    	int sum[3] = { 0,0,0 };
    	Pixel *toppixels, *allpixels;
    	toppixels = new Pixel[topsize];
    	allpixels = new Pixel[darksize];
    
    
    	for (int i = 0;i<nr;i++) {
    		const uchar* outData = darkimg.ptr<uchar>(i);
    		for (int j = 0;j<nl;j++)
    		{
    			allpixels[i*nl + j].value = *outData++;
    			allpixels[i*nl + j].x = i;
    			allpixels[i*nl + j].y = j;
    		}
    	}
    	//std::qsort(allpixels,darksize,sizeof(Pixel),qcmp);  
    	std::sort(allpixels, allpixels + darksize, cmp);
    
    	memcpy(toppixels, allpixels, (topsize) * sizeof(Pixel)); //找到了在darkimg中最亮的0.1%个  
    
    	int val0, val1, val2, avg, max = 0, maxi, maxj, x, y;
    	for (int i = 0;i<topsize;i++)
    	{
    		x = allpixels[i].x;y = allpixels[i].y;  //暗通道中最亮像素的坐标
    		const uchar* outData = srcimg.ptr<uchar>(x);
    		outData += 3 * y;
    		val0 = *outData++;
    		val1 = *outData++;
    		val2 = *outData++;
    		avg = (val0 + val1 + val2) / 3;
    		if (max<avg) { max = avg;maxi = x;maxj = y; }
    	}
    	for (int i = 0;i<3;i++)
    	{
    		A[i] = srcimg.at<Vec3b>(maxi, maxj)[i];
    		//A[i]=srcimg.at<Vec4b>(maxi,maxj)[i];  
    		//A[i]=A[i]>220?220:A[i];  
    	}
    	return A;  //返回A的3个b,g,r分量
    }
    
    //导向图滤波
    Mat guidedFilter(Mat& transmission, Mat& graymat, Mat& trans, int windowsize, double ap) {
    	windowsize = 6 * windowsize;
    	Mat mean_P(transmission.rows, transmission.cols, CV_32FC1);
    	Mat mean_I(graymat.rows, graymat.cols, CV_32FC1);
    	Mat corr_I(graymat.rows, graymat.cols, CV_32FC1);
    	Mat corr_IP(graymat.rows, graymat.cols, CV_32FC1);
    	Mat var_I(graymat.rows, graymat.cols, CV_32FC1);
    	Mat cov_IP(graymat.rows, graymat.cols, CV_32FC1);
    	Mat a(graymat.rows, graymat.cols, CV_32FC1);
    	Mat b(graymat.rows, graymat.cols, CV_32FC1);
    	Mat mean_a(graymat.rows, graymat.cols, CV_32FC1);
    	Mat mean_b(graymat.rows, graymat.cols, CV_32FC1);
    	blur(transmission, mean_P, Size(windowsize,windowsize));
    	blur(graymat, mean_I, Size(windowsize, windowsize));
    	corr_I = graymat.mul(graymat);
    	corr_IP = graymat.mul(transmission);
    	var_I = corr_I - mean_I.mul(mean_I);
    	cov_IP = corr_IP - mean_I.mul(mean_P);
    	a = cov_IP / (var_I + ap);
    	b = mean_P - a.mul(mean_I);
    	blur(a, mean_a, Size(windowsize, windowsize));
    	blur(b, mean_b, Size(windowsize, windowsize));
    	trans = mean_a.mul(graymat) + mean_b;
    	return trans;
    }
    
    //计算透射图t并精细化
    Mat getTransmission_dark(Mat& srcimg, Mat& darkimg, int *array, int windowsize)
    {
    	float test;
    	float avg_A = (array[0] + array[1] + array[2]) / 3.0;
    	float w = 0.95;
    	int radius = (windowsize - 1) / 2;
    	int nr = srcimg.rows, nl = srcimg.cols;
    	Mat transmission(nr, nl, CV_32FC1);
    
    	for (int k = 0;k<nr;k++) {
    		const uchar* inData = darkimg.ptr<uchar>(k);
    		for (int l = 0;l<nl;l++)
    		{
    			transmission.at<float>(k, l) = 1 - w*(*inData++ / avg_A);
    		}
    	}
    	Mat trans(nr, nl, CV_32FC1);
    	Mat graymat(nr, nl, CV_8UC1);
    	Mat graymat_32F(nr, nl, CV_32FC1);
    	cvtColor(srcimg, graymat, CV_BGR2GRAY);
    	for (int i = 0;i<nr;i++) {
    		const uchar* inData = graymat.ptr<uchar>(i);
    		for (int j = 0;j<nl;j++)
    			graymat_32F.at<float>(i, j) = *inData++ / 255.0;
    	}
    	guidedFilter(transmission, graymat_32F, trans, 6 * windowsize, 0.001);
    
    
    	return trans;
    }
    
    //计算J(X)
    Mat recover(Mat& srcimg, Mat& t, int *array, int windowsize)
    {
    	int test;
    	int radius = (windowsize - 1) / 2;
    	int nr = srcimg.rows, nl = srcimg.cols;
    	float tnow = t.at<float>(radius, radius);
    	float t0 = 0.1;
    	Mat finalimg = Mat::zeros(nr, nl, CV_8UC3);
    	int val = 0;
    	for (int i = 0;i<3;i++) {
    		for (int k = radius;k<nr - radius;k++) {
    			const float* inData = t.ptr<float>(k);  inData += radius;
    			const uchar* srcData = srcimg.ptr<uchar>(k);  srcData += radius * 3 + i;
    			uchar* outData = finalimg.ptr<uchar>(k);  outData += radius * 3 + i;
    			for (int l = radius;l<nl - radius;l++)
    			{
    				tnow = *inData++;
    				tnow = tnow>t0 ? tnow : t0;
    				val = (int)((*srcData - array[i]) / tnow + array[i]);
    				srcData += 3;
    				val = val<0 ? 0 : val;
    				*outData = val>255 ? 255 : val;
    				outData += 3;
    			}
    		}
    
    	}
    	return finalimg;
    }
    
    int main() {
    	int windowsize = 15;
    	Mat srcimg=imread("1.jpg");
    	imshow("原图", srcimg);
    	Mat darkimg(srcimg.rows,srcimg.cols, CV_8UC1);
    	Mat trans(srcimg.rows, srcimg.cols, CV_32FC1);
    	Mat pic(srcimg.rows, srcimg.cols, CV_8UC3);
    	int *A=new int[3];
    	
    	//暗通道的计算
    	darkimg=Producedarkimg(srcimg, windowsize);
    	//计算大气光值A
    	A=getatmospheric_light(darkimg, srcimg,windowsize);
    	//计算透射图t并精细化
    	trans = getTransmission_dark(srcimg, darkimg, A, windowsize);
    	//计算J(X)
    	pic = recover(srcimg, trans, A, windowsize);
    	//显示去雾后的图像
    	imshow("去雾后",pic);
    	waitKey(0);
    }

    五、效果图







    展开全文
  • 引导图像过滤演示(Python) 引导图像过滤的简单python演示[He et al。 2010]。 引导滤波器可以像流行的双边滤波器一样执行保留边缘的平滑滤波。 在这个演示包中,我还实现了快速引导过滤器[He et al。 2015]。 ...
  • 引导图滤波器是一种自适应权重滤波器,能够在平滑...这里只说一下自适应权重原理、C++实现灰度图像以及彩色图像引导滤波、验证结果。自适应权重原理引导滤波作为一种线性滤波器,可以简单定义为如下形式:其...

    引导图滤波器是一种自适应权重滤波器,能够在平滑图像的同时起到保持边界的作用,具体公式推导请查阅原文献《Guided Image Filtering》以及matlab源码:http://kaiminghe.com/eccv10/index.html。这里只说一下自适应权重原理、C++实现灰度图像以及彩色图像的引导图滤波、验证结果。

    自适应权重原理

    引导图滤波作为一种线性滤波器,可以简单定义为如下形式:

    cad6f3e1e389dee8ce394fc0fdae82ea.png

    其中I是引导图像(guided Image),P是输入的待滤波图像,Q是滤波后的输出图像,W是根据引导图I确定的权重值。权重值W可以用下式表示(原文献有详细推导):

    bdbfdeb8c8a87aae5367126553506d33.png

    μk是窗口内像素点的均值,Ii和Ij指相邻两个像素点的值,σk代表窗口内像素点的方差,ε是一个惩罚值。自适应权重可以根据上式分析得到:Ii和Ij在边界两侧时,(Ii-μk)和(Ij-μk)异号,否则,则同号。而异号时的权重值将远远小于同号时的权重值,这样处于平坦区域的像素则会被加以较大的权重,平滑效果效果更明显,而处于边界两侧的像素则会被加以较小的权重,平滑效果较弱,能够起到保持边界的效果。

    惩罚值ε对滤波效果影响也很大,当ε值很小时,滤波如前面所述;当ε值很大时,权重的计算公式将近似为一个均值滤波器,平滑效果会更明显。

    7a60ad47caa34b399cc754725ee5a740.png

    同样也可以根据线性滤波公式来看引导图滤波的自适应权重原理,局部线性滤波模型公式如下:

    a8644d612526f5050007f28d290bc254.png

    871c826b94c7bb8d5943a1bc196a7f4d.png

    I指引导图像,Q是输出图像,ak和bk两个系数根据引导图I和输入图像P共同决定。将上式两边求梯度,可以得到▽q=a*▽I,即输出图像的梯度信息完全由引导图像的梯度信息决定,当引导图中有边界时,输出图像中对应位置也会有边界。而a和b的值将会决定梯度信息和平滑信息的权重大小。

    通过观察a和b的公式,a的分子为I和P的协方差,分母部分为I的方差加上截断值ε;b的值为P的均值减去a乘以I的均值。可以看出当a值很小时,b约等于窗口内像素点的均值pk,近似于均值滤波;而当a值很大时,输出则主要取决于a*▽I的大小,梯度信息能够得到保留。

    C++实现灰度图像以及彩色图像的引导图滤波

    根据原文献中提供的伪代码,不难用C++实现引导图滤波算法。伪代码如下:

    af08058568c59df42212b7599bc857dd.png

    这里需要分两种情况,1.引导图为单通道的灰度图;2.引导图为三通道的彩色图。

    引导图为单通道

    分别算出I与P的均值图像,以及I²和I*P的均值图像;再求出I的方差图像,以及I*P的协方差图像;利用公式求出a和b的值;再窗口内对a和b求均值;再根据公式算出输出图像。

    这里又分为两种情况:

    ①输入图为单通道:按照上述步骤计算即可。

    ②输入图为三通道:先分离三个通道,对每个通道进行上述滤波操作,然后合并通道即可。

    引导图为三通道

    此时,将上述模型做了稍微修改,如下:

    a1a9af0cdf266430dd9739d3b1586de7.png

    不同之处在于求a时将原来的方差σ替换为协方差3x3矩阵∑k,表示如下:

    fe51c294a0cd25c44194bc1ae22977db.png

    U是3x3单位矩阵,求出来的a将不再是一个值,而是一个1*3的向量,然后求b。a为1*3的向量,μk为3*1的向量,相乘后b为一常量,由此可以求得常量b的值。

    这里又分为两种情况:

    ①输入图为单通道:按照上述步骤计算即可。

    ②输入图为三通道:先分离三个通道,对每个通道进行上述滤波操作,然后合并通道即可。

    注:引导图为彩色图比引导图为灰度图,边界保护更加明显,见原文。

    效果验证

    代码里面求均值部分,可以由OpenCV中的boxFilter()函数实现,或者blur()函数实现。总之是一个均值滤波器,之所以与窗口大小无关,是因为使用直方图实现的均值滤波,能够大大降低运算时间。VS2015+OpenCV3.4.0实现的代码放在我的码云code上:https://gitee.com/rxdj/guidedFilter.git。

    主要输入参数就是引导图I,输入图P,窗口半径r,截断值ε,输出参数为滤波后图像Q。引导图I和输入图像P可以相同,也可以不同,比如stereo matching中常常用原参考图像作为引导图,对代价空间图进行引导图滤波以实现代价聚合。这样能尽量保留原图像边界区域的匹配代价,而平滑平坦区域的匹配代价。

    (注:文献中的代码是通过matlab编写的,matlab中读取图像时会自动将图像归一化到0-1,因此截断值ε的设置也对应小很多,比如0.1,0.01等。而本文中读取图像后未进行归一化操作,所以截断值ε的设置会有不同。如果需要归一化,则自行读取图像后除以255即可)。

    单通道灰度图原图

    f4d59f7287a93daa42cdc6cfe448e488.png

    改变截断值ε

    r=10, ε=0                            r=10,  ε=100

    21b448b68d0449229870c803a833f997.png   

    7eed5af0a3bf875e94fabc7c9d5154c6.png 

    r=10 , ε=2000                          r=10, ε=8000

    2658219da0436a1d7bac704e7e418ef1.png   

    5c4c60921ae2016c1fa35e3e2a90462a.png 

    改变窗口半径r

    r=0, ε=500                                   r=5, ε=500

    f1f4338b52c742100a3a6d070c6fcb43.png    09847639340664a371698fb1625a929c.png

    r=10, ε=500                              r=20, ε=500

    c45fd71f2ad1f0ba9d9ed59a103a2ca6.png    

    a3ae0a99238a8a6d4a5d461b711e29da.png

    三通道彩色图

    原图

    c6e6ce37cc4ee18bb80d7c2d44c87a9d.png

    改变截断值ε

    r=10, ε=0                            r=10,  ε=100

    59a7546457b99272370a7f0a7db08119.png    

    893c231651746b1caa56823b03564114.png 

    r=10 , ε=2000                          r=10, ε=8000

    4e292c9e62f33f4e418bcf2453462945.png    

    1082645746a916062c74fa0a4d533a8b.png

    改变窗口半径r

    r=0, ε=500                             r=5, ε=500

    203ff78ee5ee5ee1f8fb99b2230d1839.png    

    931cb806c60ffeb5f02e5a0cb28197e0.png    

    r=10, ε=500                              r=20, ε=500

    001f5d8eef3fe752dc86d950bf63dd5e.png    

    077cd286d19ed830a769fc2148e4f60d.png

    快速引导图滤波算法

    快速引导图滤波算法见文献《fast guided filter》,上述主页中也有。快速的地方主要是采用了图像金字塔思想。步骤如下:

    对引导图像I和输入图像P进行1/s的降采样,得到I', P';

    利用I'和P'计算系数a和b,并计算输出图像Q';

    将Q'进行s倍的上采样得到最终输出图像Q。

    由于计算部分是降采样的图像,运算量会大大减小,而不会引入明显的失真,因此成为快速引导图滤波。代码见上述码云code链接的fastGuidedFilter分支。

    承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本科和硕士的均可,咸鱼交易,专业回答请走知乎,详谈请联系QQ号757160542,非诚勿扰。

    本文同步分享在 博客“于小勇”(CSDN)。

    如有侵权,请联系 support@oschina.cn 删除。

    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    展开全文
  • 针对上述问题,结合医学图像特点和光照估计模型提出一种基于Canny算子加权引导滤波的Retinex(CWGFR)医学图像增强算法。首先,利用Canny边缘检测算子准确估计加权引导滤波器的边缘权重并通.过加权引导滤波器对光照...
  • 数字图像处理——引导滤波

    千次阅读 2021-08-02 10:58:49
    引导滤波原理
  • 在水下环境中,由于水分子以及溶解的杂质对光线的吸收和散射作用,导致水下图像出现对比度低、噪声较大等严重的退化问题。这不仅降低了图像的整体视觉效果,而且给后续图像的自动处理和识别产生不利影响。因此,研究...
  • 针对红外和可见光图像融合结果背景信息不足、对比度较低的问题,提出一种结合引导滤波和快速共现滤波的融合方法。首先,以高斯滤波将源图像分解为细节层和基础层。然后以去除值域滤波器、全局统计共现信息的方式简化...
  • 实验内容2-1:实现图像的高斯滤波处理实验要求:1)通过调整高斯函数的标准差(sigma)来控制平滑程度;给定函数:void Gaussian(const MyImage &input, MyImage &output, double sigma);2)滤波窗口大小取为[6...
  • 这是基于引导滤波图像融合matlab源码。下载解压后直接运行。
  • 基于引导滤波和shearlet稀疏的遥感图像融合算法 图像滤波算法.pdf
  • 基于距离选通的激光成像受激光脉冲能量、距离...研究结果表明:采用引导滤波结合双边滤波的二维图像预处理得到的三维重建结果,在保证距离精度的同时,在边缘信息、结构信息的增强,以及图像的均匀度提升等方面具有优势。
  • 前言   引导滤波是何凯明等人在2010年提出的一种滤波方法,该方法与之前博客中介绍的...  引导滤波的思想用一张引导图像产生权重,从而对输入图像进行处理,这个过程可以表示为公式 (1)(1)(1) 中的内容。 qi=∑j...
  • 可以直接运行的梯度域引导滤波Gradient Domain Guided Image Filtering MATLAB源码
  • 我们提出了一种用于弱光图像增强的新颖方法。 基于照明反射模型,采用导引图像过滤器提取基础图像的照明分量。 然后,我们获得反射分量并分别通过非线性函数Sigmoid和γ对其进行增强。 我们在梯度域中使用一阶边缘...
  • 本文提出了一种新的全局引导图像滤波算法,该算法由全局结构转移滤波器和全局保持边缘平滑滤波器组成,将该滤波器应用于单幅图像的去雾处理。实验结果表明,提出的G-GIF图像确实能较好地保留去噪后的图像的精细结构...
  • 实现头发区域的引导滤波;输入图像为原图和mask图,对mask进行引导
  • 针对暗通道算法在对天空区域去雾存在失真的问题,提出一种基于引导滤波和自适应容差机制的图像去雾算法。首先,计算出不同尺寸窗口的拟合透射率图;然后,通过引导滤波对透射率进行细化处理,再利用自适应容差机制对...
  •  双边滤波很有名,使用广泛,简单的说就是一种同时考虑了像素空间差异与强度差异的滤波器,因此具有保持图像边缘的特性。 先看看我们熟悉的高斯滤波器  其中W是权重,i和j是像素索引,K是归一化常量。
  • 针对Kinect镜头采集的深度图像一般有噪声和黑洞现象,直接应用于人体动作跟踪和识别等系统中效果差的问题,提出一种基于联合双边滤波器的深度图像滤波算法。算法利用联合双边滤波原理,将Kinect镜头同一时刻采集的...
  • 针对多聚焦图像融合中聚焦物体边缘衔接处产生伪影的问题,提出一种基于非下采样Contourlet变换(NSCT)与引导滤波的多聚焦图像融合算法。该算法对多聚焦图像进行NSCT分解后,利用基于边缘的加权融合方案处理低频子带...
  • 图像引导滤波 HE

    2017-11-09 14:40:43
    图像引导滤波,通过频域上的处理,从而增强图片,利于处理。用于mura缺陷检测有效。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,607
精华内容 1,042
关键字:

引导图像滤波