什么是引导图像滤波?
引导图像滤波使用一个单独图像(称为引导图像)的上下文来影响图像滤波的输出。像其他滤波运算一样,引导图像滤波是一种邻域运算。不过,它在计算输出像素的值时,会考虑引导图像滤波中对应空间邻域中某个区域的统计量。引导图像可以是图像本身、图像的不同版本或完全不同的图像。通过选择不同引导图像,您可以执行各种图像处理运算,如着色、图像抠图、闪光灯/无闪光灯去噪和保边滤波。
算法
当您使用引导图像 G
对图像 A
进行滤波时,引导图像滤波使用输入图像 A
中的像素 i 及其空间邻域的值以及引导图像 G
中的对应像素及其对应空间邻域来确定输出 B
中的像素 i 处的值。如果引导图像 G
与输入图像 A
相同,则输出图像 B
中的结构保持与输入图像 A
中的结构相同。如果引导图像 G
不同于输入图像 A
,则引导图像 G
中的结构影响输出图像 B
,实际上将这些结构压印在输入图像 A
上。这种效应称为结构转移。
输出图像 B
是引导图像 G
的局部线性变换。
bi 和 gi 分别是 B
和 G
的第 i 个像素。xk 和 yk 是方形窗 ωk 中的系数,算法假定其为常量。
imguidedfilter
函数优化线性变换的权重,以最小化输入图像 A
和输出图像 B
之间的误差 E。
ai 是 A
的第 i 个像素。ε 是控制引导图像 G
对输出图像 B
的影响程度的正则化参数,相当于平滑度。
如果为 ε 指定较高的值,则系数 xk 必须较小,并且 yk 必须与输入图像 A
的像素 ai 的值相似,以最小化代价函数。xk 和 yk 的这些值会降低引导图像 G
的影响程度,并使输出图像 B
更加平滑。另一方面,如果为 ε 指定较低的值,则您可以为系数 xk 指定较大的值,这会增大引导图像 G
的影响程度,并使输出图像 B
更不平滑。使用 imguidedfilter
函数时,您可以通过调节 DegreeOfSmoothing
名称-值参量来控制 ε 的值,通过指定 NeighborhoodSize
名称-值参量来控制邻域对滤波的影响程度。邻域大小是窗 ωk 的半径。
应用
通过选择不同引导图像,您可以执行各种图像处理运算,如着色、图像抠图、闪光灯/无闪光灯去噪和保边滤波。
着色 - 如果您有灰度图像,并且在该图像的不同部分以交互方式涂上了所需的颜色,则可以使用所需的颜色为整个图像着色。使用图像的色度通道作为输入图像
A
,使用亮度通道作为影响结构的引导图像G
。图像抠图 - 您可以增强 RGB 图像的 alpha 抠图数据,以便它捕获到细小的结构。使用 alpha 抠图作为输入图像
A
,使用 RGB 图像作为影响结构的引导图像G
。闪光灯/无闪光灯去噪 - 在不使用闪光灯的情况下拍摄的图像更容易包含噪声。您可以使用通过闪光灯拍摄的对应图像来消除非闪光灯图像的噪声。使用无闪光灯图像作为输入图像
A
,使用闪光灯图像作为影响结构的引导图像G
。有关使用引导滤波器的闪光灯/无闪光灯去噪示例,请参阅Perform Flash/No-flash Denoising with Guided Filter。
保边滤波 - 您可以使用与输入图像
A
和引导图像G
相同的图像对图像进行滤波,同时保持其边缘。有关使用导向滤波器进行保边滤波的示例,请参阅Segment Thermographic Image After Edge-Preserving Filtering。
参考
[1] He, Kaiming, Jian Sun, and Xiaoou Tang. “Guided Image Filtering.” IEEE Transactions on Pattern Analysis and Machine Intelligence 35, no. 6 (June 2013): 1397–1409. https://doi.org/10.1109/TPAMI.2012.213.