其他分享
首页 > 其他分享> > Matlab频域高/低通滤波

Matlab频域高/低通滤波

作者:互联网

建议参考书籍:数字图像处理_第三版 冈萨雷斯

写在前面:
对于给定的低通滤波器的函数表达式,可以得到高通滤波器的函数表达式:在这里插入图片描述

理想高/低通滤波器

理想高通

一个二维理想高通滤波器(IHPF)定义为:
在这里插入图片描述其中,D0为截至频率。D的表达式为:(后同)
在这里插入图片描述是频域率中点(u, v)与频率矩形中心的距离,其中P,Q为频率矩形的长宽。

具体实现代码:

clc;
clear;
close all;

img=imread('test.jpg');
subplot(221),imshow(img),title('原图');
F=fft2(img);
[M,N]=size(F);
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=M;% 可以自己调节截止频率
H=ones(M,N);
for i=1:M
    for j=1:N
        if D(i,j)^2<=D0
            H(i,j)=0;
        end
    end
end

shiftH=fftshift(H);
subplot(222),surf(shiftH(1:10:600,1:10:600)),title('理想高通滤波器透视图');
subplot(223),imshow(fftshift(H),[]),title('理想高通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('高频滤波');

代码效果:

在这里插入图片描述

理想低通

在以原点为圆心、以D0为半径的圆内,无衰减地通过所有频率,而在圆外‘切断‘所有频率的二维滤波器,称为理想低通滤波器(ILPF);它由以下函数确定:

在这里插入图片描述具体代码实现:

clc;
clear;
close all;

img=imread('test.jpg');
subplot(221),imshow(img),title('原图');
F=fft2(img);
[M,N]=size(F);
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=M;% 可以自己调节截止频率
H=zeros(M,N);
for i=1:M
    for j=1:N
        if D(i,j)^2<=D0
            H(i,j)=1;
        end
    end
end

shiftH=fftshift(H);
subplot(222),surf(shiftH(1:10:600,1:10:600)),title('理想低通滤波器透视图');
subplot(223),imshow(fftshift(H),[]),title('理想低通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('低通滤波');

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

高斯高/低通滤波

高斯高通

高斯高通滤波器函数表达式:

在这里插入图片描述
实现代码:

clc;
clear;
close all;


img=imread('test.jpg');
F=fft2(img);
[M,N]=size(F);
subplot(221),imshow(img),title('原图');
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=0.1*M;
H=1-exp(-(D.^2)/(2*(D0)^2));
shiftH=fftshift(H);
subplot(222),mesh(shiftH(1:10:600,1:10:600)),title('高斯高通滤波透视图');
subplot(223),imshow(fftshift(H),[]),title('高斯高通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('高斯高通滤波');

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

高斯低通

高斯低通滤波器函数表达式:

在这里插入图片描述
具体代码实现:

clc;
clear;
close all;


img=imread('test.jpg');
F=fft2(img);
[M,N]=size(F);
subplot(221),imshow(img),title('原图');
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=0.1*M;
H=exp(-(D.^2)/(2*(D0)^2));
shiftH=fftshift(H);
subplot(222),mesh(shiftH(1:10:600,1:10:600)),title('高斯低通滤波透视图');
subplot(223),imshow(fftshift(H),[]),title('高斯低通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('高斯低通滤波');

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

巴特沃斯高/低通滤波器

巴特沃斯高通

n阶巴斯沃特高通滤波器函数表达式为:

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

巴特沃斯低通

截止频率位于距原点D0处的n阶巴特沃斯低通滤波器(BLPF)的传递函数为:
在这里插入图片描述
具体实现代码:

clc;
clear;
close all;


img=imread('test.jpg');
F=fft2(img);
[M,N]=size(F);
subplot(221),imshow(img),title('原图');
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=0.1*M;
H=1-exp(-(D.^2)/(2*(D0)^2));
shiftH=fftshift(H);
subplot(222),mesh(shiftH(1:10:600,1:10:600)),title('高斯高通滤波透视图');
subplot(223),imshow(fftshift(H),[]),title('高斯高通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('高斯高通滤波');

代码效果展示:

在这里插入图片描述

标签:subplot,imshow,img,idx,idy,title,频域,Matlab,通滤波
来源: https://blog.csdn.net/qq_44310495/article/details/110008135