图像增强(3-频域滤波)——内涵MATLAB源码

        频域中的图像增强其实质也就卷积操作,它采用傅立叶变换实现对图像的增强处理。

        频域中的卷积操作公式:

                                                                 G(u,v) = F(u,v)H(u,v)

           其中,F(u,v)为原图像的傅立叶变换,H(u,v)为传递函数,G(u,v)为经过滤波处理输出图像的傅立叶形式。

        将图像由时域变换到频域后,能得到它的频谱分布图,一般情况下,在一幅图像中目标的边缘以及噪声呈现在高频部分,大面积的背景呈现在低频部分,这就为图像在频域中的处理提供了很好的条件。

  •        在频域中通过衰减指定图像的高频成分,可实现平滑图像、滤除噪声的效果;
  •        在频域中通过衰减指定图像的低频成分,可实现增强图像边缘的效果。

因此,在该部分可分为:低通滤波高通滤波两部分。

1. 低通滤波

        图像在传递的过程中,噪声主要集中在高频成分上,为了去除噪声改善图像质量,滤波器采用低通滤波器来抑制高频成分,通过低频成分,然后再进行逆傅立叶变换获得滤波图像,就可以达到平滑图像、滤除噪声的效果。

目前常用的低通滤波器有:理想低通滤波器巴特沃斯低通滤波器梯形低通滤波器指数低通滤波器

假设傅立叶平面上低通滤波器离开远点的截止频率为D_{0}

1)理想低通滤波器

       低通滤波器的转移函数为:H(u,v) = \left \ \begin{cases} 1& \text{ if } D(u,v)\leq D_{0}\\ 0& \text{ if } D(u,v)> D_{0} \end{cases} \right.

式中,D(u,v) = (u^{2}+v^{2})^{1/2}表示点(u,v)到原点的距离,D_{0}表示截止频率点到原点的距离。

D_0 = 80时,其图像为:

实现代码:

close all; clear all; clc
u = -500:500;
v = -500:500;
[U,V] = meshgrid(u,v);
D = sqrt((U).^2 + (V).^2);
D0 = 80;
H = double(D<=D0);
figure;
mesh(U,V,H)

2)巴特沃斯低通滤波器

            n阶巴特沃斯低通滤波器的转移函数为:      H(u,v) = \frac{1}{1+\left ( \frac{D(u,v)}{D_{0}}\right )^{2n}}

当n=4,D_0 = 80时,其图象为:

实现代码:

close all; clear all; clc
u = -500:500;
v = -500:500;
[U,V] = meshgrid(u,v);
D = sqrt((U).^2 + (V).^2);
D0 = 80;
n = 4;
H = 1./(1+(D/D0).^(2*n));
figure;
mesh(U,V,H);title('巴特沃斯低通滤波器的图像')

3) 梯形低通滤波器

梯形低通滤波器的转移函数:H(u,v) = \left \{ \begin{matrix} 1 \ \ \ \ \ \ \ \ \ \ \ \ \ \ D(u,v)\leq D'\\ \frac{D(u,v)-D_0}{D'-D_0}\ \ \ \ \ D'<D(u,v<D_0)\\ 0\ \ \ \ \ \ \ \ \ \ \ \ \ D(u,v)\geq D_0\\ \end{matrix} \right.,其中,D'为小于的D_0另一个另一个截止频率。

D_0 = 80D' = 40时,其图像为:

实现代码:

close all; clear all; clc
u = -500:500;
v = -500:500;
[U,V] = meshgrid(u,v);
D = sqrt((U).^2 + (V).^2);
D0 = 80;
D1 = 40;
[m,n] = size(D);
for i=1:m
    for j=1:n
        if D(i,j) <= D1
            H(i,j) = 1;
        elseif D(i,j) >= D0
            H(i,j) = 0;
        else
            H(i,j) = (D(i,j)-D0)./(D1-D0);
        end
    end
end

figure;
mesh(U,V,H);title('梯形低通滤波器的图像')

4) 指数低通滤波器

      指数低通滤波器的转移函数:H(u,v) = e^{-[D(u,v)/D_0]^n}

当n=4,D_0 = 80时,其图象为:

实现代码:

close all; clear all; clc
u = -500:500;
v = -500:500;
[U,V] = meshgrid(u,v);
D = sqrt((U).^2 + (V).^2);
D0 = 80;
n = 4;
H = exp(-(D./D0).^(n));
figure;
mesh(U,V,H);title('指数低通滤波器的图像')

 上面是主要针对每种低通滤波器的数学模型及分布图像的演示。

 接下来以一幅图像cameraman.tif为例来看看每种滤波器的性能。

@理想低通滤波器的处理结果

         从上图处理结果可以看出,经过理想低通滤波器后的图片出现了振铃现象所谓振铃现象就是指处理后的图像灰度剧烈变化的部分出现震荡,就好像钟被敲击后产生的空气震荡。

源码:

clear all; close all; clc
I = imread('cameraman.tif');
I = im2double(I);
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U,V] = meshgrid(u,v);
D0 = 80;
D = sqrt(U.^2 + V.^2);

%理想低通滤波器
H = double(D<=D0);
J = fftshift(fft2(I, size(H,1), size(H,2)));
C = J.*H;
C = ifft2(ifftshift(C));
C = C(1:size(I,1), 1:size(I,2));
figure;
subplot(121);imshow(I);title('原图')
subplot(122);imshow(C);title('理想低通滤波后的图像')

 @巴特沃斯低通滤波器

源码:

clear all; close all; clc
I = imread('cameraman.tif');
I = im2double(I);
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U,V] = meshgrid(u,v);
D0 = 80;
D = sqrt(U.^2 + V.^2);
%4阶-巴特沃斯低通滤波器
n = 4;
H = 1./(1+(D/D0).^(2*n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C = J.*H;
C = ifft2(ifftshift(C));
C = C(1:size(I,1), 1:size(I,2));
figure;imshow(C);title('4阶巴特沃斯低通滤波后的图像')

%6-巴特沃斯低通滤波器
n1 = 6;
H = 1./(1+(D/D0).^(2*n1));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C1 = J.*H;
C1 = ifft2(ifftshift(C1));
C1 = C1(1:size(I,1), 1:size(I,2));
figure;imshow(C1);title('6阶巴特沃斯低通滤波后的图像')

%10-巴特沃斯低通滤波器
n2 = 10;
H = 1./(1+(D/D0).^(2*n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C2 = J.*H;
C2 = ifft2(ifftshift(C2));
C2 = C2(1:size(I,1), 1:size(I,2));
figure;imshow(C2);title('10阶巴特沃斯低通滤波后的图像')

figure;
subplot(221);imshow(I);title('原图')
subplot(222);imshow(C);title('4阶巴特沃斯低通滤波后的图像')
subplot(223);imshow(C1);title('6阶巴特沃斯低通滤波后的图像')
subplot(224);imshow(C2);title('10阶巴特沃斯低通滤波后的图像')

 @指数形低通滤波器(与高斯低通滤波器一致)

 源码:

clear all; close all; clc
I = imread('cameraman.tif');
I = im2double(I);
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U,V] = meshgrid(u,v);
D = sqrt(U.^2 + V.^2);
% H = ones(size(D,1), size(D,2));
D0 = 80;
%n=4指数低通滤波器
n = 4;
H = exp(-(D/D0).^(n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C1 = J.*H;
C1 = ifft2(ifftshift(C1));
C1 = C1(1:size(I,1), 1:size(I,2));
figure;imshow(C1);title('n=4指数低通滤波后的图像')
%n=6指数低通滤波器
n = 6;
H = exp(-(D/D0).^(n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C2 = J.*H;
C2 = ifft2(ifftshift(C2));
C2 = C2(1:size(I,1), 1:size(I,2));
figure;imshow(C2);title('n=6指数低通滤波后的图像')
%n=10指数低通滤波器
n = 10;
H = exp(-(D/D0).^(n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C3 = J.*H;
C3 = ifft2(ifftshift(C3));
C3 = C3(1:size(I,1), 1:size(I,2));
figure;imshow(C3);title('n=10指数低通滤波后的图像')
figure;
subplot(221);imshow(I);title('原图')
subplot(222);imshow(C1);title('n=4指数低通滤波后的图像')
subplot(223);imshow(C2);title('n=6指数低通滤波后的图像')
subplot(224);imshow(C3);title('n=10指数低通滤波后的图像')

@梯形低通滤波器

 

源码:

clear all; close all; clc
I = imread('cameraman.tif');
I = im2double(I);
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U,V] = meshgrid(u,v);
D = sqrt(U.^2 + V.^2);
H = ones(size(D,1), size(D,2));
D0 = 250;
% 梯形低通滤波器
D1 = 170;
for i=1:M
    for j=1:N
        if D(i,j)<=D1
            H(i,j) = 1;
        elseif D(i,j) >D1 && D(i,j) < D0
            H(i,j) = (D(i,j) - D0)./(D1 - D0);
        else
            H(i,j) = 0;
        end
    end
end
J = fftshift(fft2(I, size(H,1), size(H,2)));
C = J.*H;
C = ifft2(ifftshift(C));
C = C(1:size(I,1), 1:size(I,2));
figure;
subplot(121);imshow(I);title('原图');
subplot(122);imshow(C);title('梯形低通滤波器处理后的图像')

综合以上来看,除了理想低通滤波器外,其余的滤波器基本无振铃现象。故在实际的运用中基本不会运用理想低通滤波器,

2. 高通滤波

        高通滤波也被称为高频滤波器,由于图像中的细节边缘在频率域中为高频分量,故而高通滤波器能够实现对图像的锐化,将边缘特征更好的显示出来。从名称上来看,它与低通滤波器相反,能够使图像中的高频分量通过,而抑制低频分量。

        与低通滤波器相对应,目前常用的高通滤波器有:理想高通滤波器巴特沃斯高通滤波器梯形高通滤波器指数高通滤波器。 它的图像显示与低通的相反。

假设傅立叶平面上低通滤波器离开远点的截止频率为D_{0}

1)理想高通滤波器

       理想高通滤波器的转移函数为:H(u,v) = \left \ \begin{cases} 0& \text{ if } D(u,v)\leq D_{0}\\ 1& \text{ if } D(u,v)> D_{0} \end{cases} \right.

式中,D(u,v) = (u^{2}+v^{2})^{1/2}表示点(u,v)到原点的距离,D_{0}表示截止频率点到原点的距离。

D_0 = 80时,其图像为:

实现代码:

close all; clear all; clc
u = -500:500;
v = -500:500;
[U,V] = meshgrid(u,v);
D = sqrt((U).^2 + (V).^2);
D0 = 80;
H = double(D>=D0);
figure;
mesh(U,V,H)

2)巴特沃斯高通滤波器

            n阶巴特沃斯高通滤波器的转移函数为:      H(u,v) = \frac{1}{1+\left ( \frac{D_0}{D(u,v)}\right )^{2n}}

当n=4,D_0 = 80时,其图象为:

实现代码:

close all; clear all; clc
u = -500:500;
v = -500:500;
[U,V] = meshgrid(u,v);
D = sqrt((U).^2 + (V).^2);
D0 = 80;
n = 4;
H = 1./(1+(D/D0).^(2*n));
figure;
mesh(U,V,H);title('巴特沃斯高通滤波器的图像')

3) 梯形低通滤波器

梯形高通滤波器的转移函数:H(u,v) = \left \{ \begin{matrix} 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ D(u,v)\leq D'\\ \frac{D(u,v)-D_0}{D'-D_0}\ \ \ \ \ D'<D(u,v<D_0)\\ 1\ \ \ \ \ \ \ \ \ \ \ \ \ D(u,v)\geq D_0\\ \end{matrix} \right.,其中,D'为大于的D_0另一个另一个截止频率。

D_0 = 80D' = 40时,其图像为:

实现代码:

close all; clear all; clc
u = -500:500;
v = -500:500;
[U,V] = meshgrid(u,v);
D = sqrt((U).^2 + (V).^2);
D1 = 80;
D0 = 40;
[m,n] = size(D);
for i=1:m
    for j=1:n
        if D(i,j) <= D0
            H(i,j) = 0;
        elseif D(i,j) >= D1
            H(i,j) = 1;
        else
            H(i,j) = (D(i,j)-D0)./(D1-D0);
        end
    end
end

figure;
mesh(U,V,H);title('梯形高通滤波器的图像')

4) 指数高通滤波器

      指数高通滤波器的转移函数:H(u,v) = 1-e^{-[D(u,v)/D_0]^n}

当n=4,D_0 = 80时,其图象为:

实现代码:

close all; clear all; clc
u = -500:500;
v = -500:500;
[U,V] = meshgrid(u,v);
D = sqrt((U).^2 + (V).^2);
D0 = 80;
n = 4;
H = 1 - exp(-(D./D0).^(n));
figure;
mesh(U,V,H);title('指数高通滤波器的图像')

 上面是主要针对每种高通滤波器的数学模型及分布图像的演示。

接下来以一幅图像cameraman.tif为例来看看每种滤波器的性能。

@理想高通滤波器的处理结果

         

源码:

clear all; close all; clc
I = imread('cameraman.tif');
I = im2double(I);
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U,V] = meshgrid(u,v);
D0 = 80;
D = sqrt(U.^2 + V.^2);

%理想低通滤波器
H = double(D>=D0);
J = fftshift(fft2(I, size(H,1), size(H,2)));
C = J.*H;
C = ifft2(ifftshift(C));
C = C(1:size(I,1), 1:size(I,2));
figure;
subplot(121);imshow(I);title('原图')
subplot(122);imshow(C);title('理想低通滤波后的图像')

 @巴特沃斯高通滤波器

源码:

clear all; close all; clc
I = imread('cameraman.tif');
I = im2double(I);
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U,V] = meshgrid(u,v);
D0 = 80;
D = sqrt(U.^2 + V.^2);
%4阶-巴特沃斯高通滤波器
n = 4;
H = 1./(1+(D0./D).^(2*n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C = J.*H;
C = ifft2(ifftshift(C));
C = C(1:size(I,1), 1:size(I,2));
figure;imshow(C);title('4阶巴特沃斯高通滤波后的图像')

%6-巴特沃斯高通滤波器
n1 = 6;
H = 1./(1+(D0./D).^(2*n1));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C1 = J.*H;
C1 = ifft2(ifftshift(C1));
C1 = C1(1:size(I,1), 1:size(I,2));
figure;imshow(C1);title('6阶巴特沃斯高通滤波后的图像')

%10-巴特沃斯高通滤波器
n2 = 10;
H = 1./(1+(D0./D).^(2*n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C2 = J.*H;
C2 = ifft2(ifftshift(C2));
C2 = C2(1:size(I,1), 1:size(I,2));
figure;imshow(C2);title('10阶巴特沃斯高通滤波后的图像')

figure;
subplot(221);imshow(I);title('原图')
subplot(222);imshow(C);title('4阶巴特沃斯高通滤波后的图像')
subplot(223);imshow(C1);title('6阶巴特沃斯高通滤波后的图像')
subplot(224);imshow(C2);title('10阶巴特沃斯高通滤波后的图像')

 @指数形低通滤波器(与高斯低通滤波器一致)

 

源码:

clear all; close all; clc
I = imread('cameraman.tif');
I = im2double(I);
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U,V] = meshgrid(u,v);
D = sqrt(U.^2 + V.^2);
D0 = 80;
%n=4指数高通滤波器
n = 4;
H = 1 - exp(-(D/D0).^(n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C1 = J.*H;
C1 = ifft2(ifftshift(C1));
C1 = C1(1:size(I,1), 1:size(I,2));
figure;imshow(C1);title('n=4指数高通滤波后的图像')
%n=6指数高通滤波器
n = 6;
H = 1 - exp(-(D/D0).^(n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C2 = J.*H;
C2 = ifft2(ifftshift(C2));
C2 = C2(1:size(I,1), 1:size(I,2));
figure;imshow(C2);title('n=6指数高通滤波后的图像')
%n=10指数高通滤波器
n = 10;
H = 1 - exp(-(D/D0).^(n));
J = fftshift(fft2(I, size(H,1), size(H,2)));
C3 = J.*H;
C3 = ifft2(ifftshift(C3));
C3 = C3(1:size(I,1), 1:size(I,2));
figure;imshow(C3);title('n=10指数高通滤波后的图像')
figure;
subplot(221);imshow(I);title('原图')
subplot(222);imshow(C1);title('n=4指数高通滤波后的图像')
subplot(223);imshow(C2);title('n=6指数高通滤波后的图像')
subplot(224);imshow(C3);title('n=10指数高通滤波后的图像')

@梯形低通滤波器

 

源码:

clear all; close all; clc
I = imread('cameraman.tif');
I = im2double(I);
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U,V] = meshgrid(u,v);
D = sqrt(U.^2 + V.^2);
H = ones(size(D,1), size(D,2));
D1 = 80;
% 梯形高通滤波器
D0 = 40;
for i=1:M
    for j=1:N
        if D(i,j)<=D0
            H(i,j) = 0;
        elseif D(i,j) >D1 && D(i,j) < D0
            H(i,j) = (D(i,j) - D0)./(D1 - D0);
        else
            H(i,j) = 1;
        end
    end
end
J = fftshift(fft2(I, size(H,1), size(H,2)));
C = J.*H;
C = ifft2(ifftshift(C));
C = C(1:size(I,1), 1:size(I,2));
figure;
subplot(121);imshow(I);title('原图');
subplot(122);imshow(C);title('梯形高通滤波器处理后的图像')

低通滤波和高通滤波是最主要的两种形式,除此之外,还有带阻滤波器和同态滤波器两种。

带阻滤波器:其数学表达式为:

                                                         H(u,v) =\frac{1}{\frac{1}{1+(D(u,v)*W/(D(u,v)^2-D0^2)^{2n})}}

         其中W是阻带的宽度,D0是阻带的中心半径。带阻滤波器就是阻止特定范围内频率的信号通过,而允许其他范围内的信号通过。

同态滤波器:其数学表达式为:

                                                                      H(u,v) = rl + \frac{rh}{1+D_{0}/D(u,v)^{2n})}

        其中rl和rh为设定的参数。同态滤波器是一种非线性滤波器,是一种在频域中进行的图像对比度增强和压缩图像亮度范围的特殊方法。同态滤波器能够减少低频并且增加高频,从而能减少光照变化并锐化边缘细节,其基本原理是基于特征的对比度增强方法,主要用于因减少光照不均匀引起的图像降质,并对感兴趣的目标进行有效的增强。

这两种滤波器就不一一实现了,算是留个小作业,有兴趣的小伙伴,可以自己实现以下。

OK,图像增强到这就结束了,谢谢大家的关注。。。。。。有问题的可以留言,咱们一块讨论。

发布了15 篇原创文章 · 获赞 5 · 访问量 4393

猜你喜欢

转载自blog.csdn.net/qq_33668060/article/details/98943070