Guided Image Filter 学习笔记
相关滤波器学习
Bilateral Filter
Bilateral Filter 为双边滤波, 其降噪效果在达到平滑降噪的功能的同时亦能保护边缘特征(edge-preserving). 这与他的滤波器的两个功能函数有关, 第一个便是空间核域函数, 这个函数通过欧氏距离来衡量每一个filter中各个像素与中心像素的距离来给每一个像素赋予权重; 第二个便是值域核函数, 这个函数通过对每一个filter中各个像素值与中心像素值的差值来对该filter中的每一个像素赋予权重.
在对Bilateral Filter的学习过程中, 借鉴了pan_jinquan博客的相关内容.
首先, 引用其他博主的关于对区域和边缘的理解, 如下:
我们都知道,一幅自然的图像可以被看成是有(过渡平缓的,也就是梯度较小)区域和(过渡尖锐的,也就是梯度较大)边缘(也包括图像的纹理、细节等)共同组成的。噪声是影响图像质量的不利因素,我们希望将其滤除。噪声的特点通常是以其为中心的各个方向上梯度都较大而且相差不多。边缘则不同,边缘相比于区域也会出现梯度的越变,但是边缘只有在其法向方向上才会出现较大的梯度,而在切向方向上梯度较小。
空间核函数
w d i , j ( k , l ) = e x p ( − ( k − i ) 2 + ( l − j ) 2 2 σ 2 ) w_d^{i, j}(k, l) = exp(-\frac{(k - i)^2 + (l - j)^2}{2\sigma^2}) wdi,j(k,l)=exp(−2σ2(k−i)2+(l−j)2)
在该数学函数式中, (i, j)为该filter的中心的坐标, (k, l)为filter中每一个像素点的坐标, ( k − i ) 2 + ( l − j ) 2 (k - i)^2 + (l - j)^2 (k−i)2+(l−j)2为该像素点与中心像素点的欧式空间距离, 下部的 σ \sigma σ正态分布的标准差;
理解:在某一个filter中, 距离中心像素点越近, 其空间核函数的值越大; 反之, 距离中心像素点越远, 其空间核函数值越小. 在相对较平坦区域, 该函数其主要作用. 可以结合下图理解空间核函数.
值域核函数
w r i , j ( k , l ) = e x p ( − ( f ( k , l ) − f ( i , j ) ) 2 2 σ 2 ) w_r^{i, j}(k, l) = exp(-\frac{(f(k, l) - f(i, j))^2}{2\sigma^2}) wri,j(k,l)=exp(−2σ2(f(k,l)−f(i,j))2)
在该数学函数式中, f ( i , j ) f(i, j) f(i,j)为该filter中心像素的值, f ( k , l ) f(k, l) f(k,l)为filter中周围的像素点的值.
理解: 在某一个filter中, 周围像素点的值与中心像素点的值越接近, w r w_r wr所给赋予该像素点的值域权重越大; 反之, 周围像素点的值与中心像素点的值相差越大, w r w_r wr所给赋予该像素点的值域权重越小. 这样的处理方式保证了在对边缘处理时的特征保留, 即在陡峭区域, 该函数起主要作用.
权值 w w w
w i , j ( k , l ) = w d i , j ( k , l ) ∗ w r i , j ( k , l ) w_{i, j}(k, l) = w_d^{i, j}(k, l) * w_r^{i, j}(k, l) wi,j(k,l)=wdi,j(k,l)∗wri,j(k,l)
应用模型
将应用模型分为三个部分, input_part§, process_part(箭头), output_part()q
input_part
左图为输入部分, 我们想计算机输入一张图片, 假设该图片为 m ∗ n m*n m∗n像素, 我们可以用一个矩阵来表示输入的内容:
i n p u t C o n t e n t = [ i n p u t 1 , 1 … i n p u t 1 , n … i n p u t i , j … i n p u t m , 1 … i n p u t m , n ] inputContent = \begin{bmatrix} input_{1, 1}&…&input_{1, n}\\ \\…&input_{i, j}&…\\ \\input_{m, 1}&…&input_{m, n} \end{bmatrix} \quad inputContent=⎣⎢⎢⎢⎢⎡input1,1…inputm,1…inputi,j…input1,n…inputm,n⎦⎥⎥⎥⎥⎤
output_part
右图为输出部分, 经过处理后, 计算机将输出一张和输入图片同尺寸的图片, 我们也用一个矩阵存储.
o u t p u t C o n t e n t = [ o u t p u t 1 , 1 … o u t p u t 1 , n … o u t p u t i , j … o u t p u t m , 1 … o u t p u t m , n ] outputContent = \begin{bmatrix} output_{1, 1}&…&output_{1, n}\\ \\…&output_{i, j}&…\\ \\output_{m, 1}&…&output_{m, n} \end{bmatrix} \quad outputContent=⎣⎢⎢⎢⎢⎡output1,1…outputm,1…outputi,j…output1,n…outputm,n⎦⎥⎥⎥⎥⎤
process_part
处理输入的数据, 输出处理后的数据, 便是process_part的功能, 具体处理过程如下:
将 i n p u t C o n t e n t inputContent inputContent处理成一个 m ∗ n ∗ ( t ∗ t ) m*n*(t * t ) m∗n∗(t∗t)的矩阵 i n p u t C o n t e n t ′ inputContent' inputContent′, 其元素 i n p u t C o n t e n t i , j ′ inputContent'_{i, j} inputContenti,j′的值为 ( n ∗ n ) (n * n) (n∗n)的矩阵,
o u t p u t C o