一、在频率域中直接生成滤波器
1,创建用于实现频域滤波器的网格数组的M函数
要在频域内生成一个滤波器,创建一个能够计算任何一点到频率矩形中指定点的距离的M函数是基础的一步。
M函数代码如下:
function [U,V]=dftuv(M,N)
u=single(0:(M-1));
v=single(0:(N-1));
idx=find(u>M/2);
u(idx)=u(idx)-M;
idy=find(v>N/2);
v(idy)=v(idy)-N;
[V,U]=meshgrid(v,u);
dftuv函数能够得到一个网格数组,利用网格数组能够得到任何一点到频率矩形中指定点的距离。
[U,V]=dftuv(8,5);
>> DSQ=U.^2+V.^2
DSQ =
8×5 single 矩阵
0 1 4 4 1
1 2 5 5 2
4 5 8 8 5
9 10 13 13 10
16 17 20 20 17
9 10 13 13 10
4 5 8 8 5
1 2 5 5 2
>> fftshift(DSQ)
ans =
8×5 single 矩阵
20 17 16 17 20
13 10 9 10 13
8 5 4 5 8
5 2 1 2 5
4 1 0 1 4
5 2 1 2 5
8 5 4 5 8
13 10 9 10 13
将 DSQ的ans进行dftshift后得到的就是各点相对频域中心点的距离的平方。
2,低通频域滤波器
理想低通滤波器(ILPF)的传递函数:

其中D0是正数,D(u,v)是点(u,v)到滤波器中心的距离。该滤波器乘以一幅图像的傅里叶变换,显然滤波器会切断以D0为半径的圆的圆外F(u,v)分量,圆内以及圆上保持不变。但是事实上电子元件无法实现理想的低通滤波

&spm=1001.2101.3001.5002&articleId=89306080&d=1&t=3&u=93139e0d340643d7951519d6e79a17c9)
2万+

被折叠的 条评论
为什么被折叠?



