Butterworth低通滤波器

Butterworth LPF


公式

利用一下方程得到一个和图像相同尺寸的滤波器 H H H,进行滤波:
H ( u , v ) = 1 1 + ( D ( u , v ) D 0 ) 2 n H(u, v) = \frac{1}{1 + (\frac{D(u, v)}{D_0})^{2n}} H(u,v)=1+(D0D(u,v))2n1
其中 D 0 D_0 D0是一个常数,我们称为截止频率
D(u, v)定义如下:
D ( u , v ) = [ ( u − M 2 ) 2 + ( v − N 2 ) 2 ] 1 2 D(u, v) = [(u - \frac{M}{2})^2 + (v - \frac{N}{2})^2]^{\frac{1}{2}} D(u,v)=[(u2M)2+(v2N)2]21
即在频率域中的点距离中心的距离。(通过对空域做中心变换后,我们在经过快速傅里叶变换之后得到的图像的中心将会是 ( M 2 , N 2 ) (\frac{M}{2}, \frac{N}{2}) (2M,2N),中心变换操作可以通过和 ( − 1 ) x + y (-1)^{x + y} (1)x+y做相关得到,可以通过傅里叶变换的平移性得到)

matlab步骤

(1)以 ( − 1 ) ( x + y ) (-1)^{(x + y)} (1)(x+y) 乘以输入图像进行中心变换;

% uint8
f = imread('your_image_file');
% double
f = im2double(f);
[X, Y] = meshgrid(1:width, 1:height);
cent = f.*(-1).^(X + Y);

(2)直接以FFT2进行傅立叶变换;

F = fft2(cent);

(3)进行Butterworth滤波

% generate Butterworth filtering kernel
kernel = zeros(height, width);
for u = 1:height
    for v = 1:width
        D = sqrt((u - height / 2)^2 + (v - width / 2)^2);
        kernel(u, v) = 1 / (1 + (D / D0)^2);
    end
end
% fitering
F = F.*kernel;

(4)DFT反变换后取实部;

% get conjugate F
for u = 1:height
    for v = 1:width
        F(u, v) = (real(F(u, v)) - imag(F(u, v)) * 1i) / (height * width);
    end
end
% get conjugate f by doing 2-dimension FFT on conjugate F
cent = fft2(F);
% get real part
for u = 1:height
    for v = 1:width
        cent(u, v) = real(cent(u, v));
    end
end

(5)以 ( − 1 ) ( x + y ) (-1)^{(x + y)} (1)(x+y) 乘以(3)中结果,反中心变换。

f = cent.* (-1).^(X + Y);

滤波效果


从频域的角度来看,观察我们用来构造滤波器的公式,当维度 n n n保持不变时,随着截止频率 D 0 D_0 D0的增大,分母越小,分母的增加速度也越小,也就是滤波器从中心往周围扩散的下降趋势变小了,变得较为平坦,我们可以从下图图像的滤波器的变化可以看出,滤波器亮度高的部分逐渐展开变宽。这也意味着更多的高频成分被保留了,图像的细节也就越明显了。
Butterworth低通滤波器_第1张图片
从空域的角度来看,考虑高斯低通滤波器,再考虑高斯滤波器的傅里叶变换,高斯滤波器的傅里叶变换之后还是一个高斯滤波器,那么显然,高斯滤波器傅里叶反变换之后的结果也是一个高斯滤波器,也就是在空域中。Butterworth低通滤波器结构与效果和高斯低通滤波器相似,那么,当我们对Butterworth反变换与图像在空域中进行卷积,也将会类似在空域中进行高斯滤波后的效果,即对图片进行平滑操作,图像会变得模糊。参考一下空域卷积和到频域的转换式子:
f ( x , y ) ∗ g ( x , y ) ⟷ F ( x , y ) ⋅ G ( x , y ) f(x, y) * g(x, y) \longleftrightarrow F(x, y) \cdot G(x, y) f(x,y)g(x,y)F(x,y)G(x,y)
即,空域的卷积相当于频域率的逐点相乘的结果,反过来也就是说,在频域中进行Butterworth滤波,相当于对Butterworth滤波器反变换到空域中和图像做卷积。

你可能感兴趣的:(数字图像处理,matlab)