图像滤波处理:频域滤波器实现

该博客详细介绍了如何使用Matlab实现图像处理中的理想、巴特沃斯和高斯高通及低通滤波器。通过傅里叶变换、滤波器运算和傅里叶反变换等步骤,展示了滤波过程,并提供了代码示例和处理结果。低通滤波导致图像模糊,而高通滤波则能突出边缘信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课后作业,实现“理想、巴特沃斯、高斯”高通低通滤波器。


代码基于Matlab实现。完整代码及处理结果见:GitHub

步骤

  1. 加载图像
  2. 中心化图像
  3. 傅里叶变换
  4. 与滤波器做运算(空域的卷积运算对应频域的乘法运算)
  5. 傅里叶反变换
  6. 裁剪图像

低通滤波器

理想低通滤波器

实现代码

close all;
clear all;
f = imread('cameraman.tif');
f = mat2gray(f,[0 255]);

[M,N] = size(f);
P = 2*M;
Q = 2*N;
fc = zeros(M,N);

for x = 1:1:M
    for y = 1:1:N
        fc(x,y) = f(x,y) * (-1)^(x+y);
    end
end

F = fft2(fc,P,Q);

H_1 = zeros(P,Q);
H_2 = zeros(P,Q);
H_3 = zeros(P,Q);

for x = (-P/2):1:(P/2)-1
     for y = (-Q/2):1:(Q/2)-1
        D = (x^2 + y^2)^(0.5);
        if(D <= 10)  H_1(x+(P/2)+1,y+(Q/2)+1) = 1; end    
        if(D <= 50)  H_2(x+(P/2)+1,y+(Q/2)+1) = 1; end
        if(D <= 150)  H_3(x+(P/2)+1,y+(Q/2)+1) = 1; end
     end
end

G_1 = H_1 .* F;
G_2 = H_2 .* F;
G_3 = H_3 .* F;

g_1 = real(ifft2(G_1));
g_1 = g_1(1:1:M,1:1:N);

g_2 = real(ifft2(G_2));
g_2 = g_2(1:1:M,1:1:N);         

g_3 = real(ifft2(G_3));
g_3 = g_3(1:1:M,1:1:N);  

for x = 1:1:M
    for y = 1:1:N
        g_1(x,y) = g_1(x,y) * (-1)^(x+y);
        g_2(x,y) = g_2(x,y) * (-1)^(x+y);
        g_3(x,y) = g_3(x,y) * (-1)^(x+y);
    end
end

%% -----show-------
figure();
subplot(2,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');

subplot(2,2,2);
imshow(g_1,[0 1]);
xlabel('b).Ideal_Lowpass/D0=10');

subplot(2,2,3);
imshow(g_2,[0 1]);
xlabel('c).Ideal_Lowpass/D0=50');

subplot(2,2,4);
imshow(g_3,[0 1]);
xlabel('d).Ideal_Lowpass/D0=150');

结果

可以看到D0的值越少,即允许用过的频率越低。高频信息损失越多,表现在图像上是边缘信息的丢失,看起来图像模糊。如图b。

巴特沃斯低通滤波器

这里只展示核心的滤波器实现代码。完整代码见GitHub

for x = (-P/2):1:(P/2)-1
     for y = (-Q/2):1:(Q/2)-1
        D = (x^2 + y^2)^(0.5);
        D_0 = 10;
        H_1(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D/D_0)^2);
        D_0 = 50;
        H_2(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D/D_0)^2);
        D_0 = 150;
        H_3(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D/D_0)^2);    
     end
end

高斯低通滤波器

for x = (-P/2):1:(P/2)-1
     for y = (-Q/2):1:(Q/2)-1
        D = (x^2 + y^2)^(0.5);
        D_0 = 10;
        H_1(x+(P/2)+1,y+(Q/2)+1) = exp(-(D*D)/(2*D_0*D_0));
        D_0 = 50;
        H_2(x+(P/2)+1,y+(Q/2)+1) = exp(-(D*D)/(2*D_0*D_0));
        D_0 = 150;
        H_3(x+(P/2)+1,y+(Q/2)+1) = exp(-(D*D)/(2*D_0*D_0));
     end
end

高通滤波器

高通滤波器和低通滤波器在形式上相反,即之前允许通过的频率截止,之间截止的频率允许通过。公式上表示为高通滤波器=1-低通滤波器的关系。

理想高通滤波器

for x = (-P/2):1:(P/2)-1
     for y = (-Q/2):1:(Q/2)-1
        D = (x^2 + y^2)^(0.5);
        if(D >= 10)  H_1(x+(P/2)+1,y+(Q/2)+1) = 1; end    
        if(D >= 50)  H_2(x+(P/2)+1,y+(Q/2)+1) = 1; end
        if(D >= 150)  H_3(x+(P/2)+1,y+(Q/2)+1) = 1; end
     end
end

巴特沃斯高通滤波器

for x = (-P/2):1:(P/2)-1
     for y = (-Q/2):1:(Q/2)-1
        D = (x^2 + y^2)^(0.5);
        D_0 = 10;
        H_1(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D_0/D)^2);
        D_0 = 50;
        H_2(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D_0/D)^2);
        D_0 = 150;
        H_3(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D_0/D)^2);       
     end
end

高斯高通滤波器

for x = (-P/2):1:(P/2)-1
     for y = (-Q/2):1:(Q/2)-1
        D = (x^2 + y^2)^(0.5);
        D_0 = 10;
        H_1(x+(P/2)+1,y+(Q/2)+1) = 1-exp(-(D*D)/(2*D_0*D_0));
        D_0 = 50;
        H_2(x+(P/2)+1,y+(Q/2)+1) = 1-exp(-(D*D)/(2*D_0*D_0));
        D_0 = 150;
        H_3(x+(P/2)+1,y+(Q/2)+1) = 1-exp(-(D*D)/(2*D_0*D_0));
     end
end

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值