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