数字图像处理——陷波滤波算法

陷波滤波

1.什么是陷波滤波?

滤波器种类:低通、高通、带通、带阻、全通。其中的带阻滤波器就是指能通过大多数频率分量、但将某些范围的频率分量衰减到极低水平的滤波器,而陷波滤波器就是带阻滤波器的特殊情况,即不再是“某些范围的频率分量”而是指“阻带范围极小的频率分量”。

2.陷波带阻滤波算法

n阶布特沃斯陷波带阻滤波器表达式:
在这里插入图片描述
零相移滤波器必须是关于原点对称的,因此,一个中心位于(u0,v0)的陷波在位置(-u0,-v0)必须有一个对应的陷波
在这里插入图片描述

3.陷波带通滤波算法

n阶布特沃斯陷波带通滤波器表达式:
在这里插入图片描述

4.陷波滤波算法Matlab实现

镇楼图:
在这里插入图片描述
Matlab代码:

close all;
clear all;
clc;
%------------------- Input ---------------------------%
%读取图像
I = imread('.\Images\test1.tif');

%------------------- Image Processing ----------------%
%图像填充
[M,N] = size(I);
P = 2*M;
Q = 2*N;
fillimage = uint8(zeros(P,Q));
fillimage(1:M,1:N) = I;

%频域中心化
for x=1:P
    for y=1:Q
        h(x,y)=(-1)^(x+y);
    end
end
fillimagecenter = h.*double(fillimage);

%二维傅里叶变换
F = fft2(double(fillimagecenter));

%陷波滤波算法
H_NF = ones(P,Q);%为了方便后面的累乘,所以用ones,如果是累加就用zeros
for u = 1:P
     for v = 1:Q
        D = 30;
        
        v_k = 59; u_k = 77;
        D_k1 = ((u-P/2-u_k)^2 + (v-Q/2-v_k)^2)^(0.5);
        D_k2 = ((u-P/2+u_k)^2 + (v-Q/2+v_k)^2)^(0.5);
        H_NF(u,v) = H_NF(u,v) * 1/(1+(D/D_k1)^4) * 1/(1+(D/D_k2)^4);
        
        v_k = 59; u_k = 159;
        D_k1 = ((u-P/2-u_k)^2 + (v-Q/2-v_k)^2)^(0.5);
        D_k2 = ((u-P/2+u_k)^2 + (v-Q/2+v_k)^2)^(0.5);
        H_NF(u,v) = H_NF(u,v) * 1/(1+(D/D_k1)^4) * 1/(1+(D/D_k2)^4);
        
        v_k = -54; u_k = 84;
        D_k1 = ((u-P/2-u_k)^2 + (v-Q/2-v_k)^2)^(0.5);
        D_k2 = ((u-P/2+u_k)^2 + (v-Q/2+v_k)^2)^(0.5);
        H_NF(u,v) = H_NF(u,v) * 1/(1+(D/D_k1)^4) * 1/(1+(D/D_k2)^4);
        
        v_k = -54; u_k = 167;
        D_k1 = ((u-P/2-u_k)^2 + (v-Q/2-v_k)^2)^(0.5);
        D_k2 = ((u-P/2+u_k)^2 + (v-Q/2+v_k)^2)^(0.5);
        H_NF(u,v) = H_NF(u,v) * 1/(1+(D/D_k1)^4) * 1/(1+(D/D_k2)^4);
     end
end

%傅里叶逆变换
G_1 = H_NF .* F;
g_1 = real(ifft2(G_1));
g_1 = g_1(1:M,1:N);     

for x = 1:M
    for y = 1:N
        g_1(x,y) = g_1(x,y) * (-1)^(x+y);
    end
end
%------------------- Show ---------------------------%
figure(1);
subplot(221);imshow(I);title('原图');%显示原图

f=fft2(I);          %傅里叶变换
f=fftshift(f);      %使图像对称
r=real(f);          %图像频域实部
i=imag(f);          %图像频域虚部
margin=log(abs(f)); %图像幅度谱,加log便于显示
subplot(222);imshow(margin,[]);title('原图幅度谱');
subplot(223);imshow((H_NF));title('陷波滤波器');
subplot(224);imshow(uint8(g_1));title('陷波滤波后的结果图');

效果图:
在这里插入图片描述

  • 13
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
数字图像处理中的滤波是基于matlab的一种常用技术,用于去除图像中的噪声或者干扰信号。滤波在信号处理中常用于去除特定频率的噪声或干扰,使得信号更加准确和清晰。 在matlab中,实现滤波可以通过多种方法。其中,常用的方法之一是使用数字滤波器设计工具包(Digital Filter Design Toolkit),该工具包提供了多种数字滤波器设计方法,如IIR滤波器设计、FIR滤波器设计等。用户可以根据实际需求选择合适的滤波器类型,并使用工具包中的函数进行设计和实现。 具体而言,用户可以通过以下步骤在matlab中实现滤波: 1. 读取图像:使用imread函数读取需要进行滤波处理的图像。 2. 图像预处理:根据需要,可以对图像进行预处理,如灰度化、调整亮度和对比度等,以便更好地展示和处理图像。 3. 设计滤波器:利用Digital Filter Design Toolkit中的函数,如fir1函数或者iirnotch函数,根据特定的频率选取参数进行滤波器设计。 4. 滤波处理:使用设计好的滤波器,通过filter函数对图像进行滤波处理。 5. 结果显示:通过imshow函数将滤波处理后的图像显示出来,以便用户观察图像的效果。 需要注意的是,滤波的效果与所选择的滤波器类型、频率参数以及图像本身的特点有关,因此在使用matlab进行滤波时,需要根据实际情况进行参数调整和反复尝试,以获得最佳的滤波效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值