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:Mfor j=1:Nif D(i,j)^2<=D0H(i,j)=0;endend
endshiftH=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:Mfor j=1:Nif D(i,j)^2<=D0H(i,j)=1;endend
endshiftH=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階巴斯沃特高通濾波器函數表達式為:
實現代碼:
clc;
clear;
close all;img=imread('test.jpg');
F=fft2(img);
[M,N]=size(F);
n=2;
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.05*M;
H=1./(1+(D0./D).^(2*n));
shiftH=fftshift(H);
subplot(222),mesh(shiftH(1:10:600,1:10:600)),title('巴特沃斯2階高通濾波透視圖');
subplot(223),imshow(fftshift(H),[]),title('巴特沃斯2階高通濾波器圖像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('巴特沃斯2階高通濾波');
代碼效果:
巴特沃斯低通
截止頻率位于距原點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('高斯高通濾波');
代碼效果展示:
總結
以上是生活随笔為你收集整理的Matlab频域高/低通滤波的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab大气湍流退化模型
- 下一篇: Linux gcc 制作动/静态链接库