Matlab圖像頻域濾波器的生成
大雞腿鎮樓~~·
自己做的幾種基於傅里葉變換的頻域濾波器~~~喜歡拿去用好啦~~~
公式都是自己在書上找的~~~
低通濾波器可以通過低頻分量,濾出高頻分量,在圖像處理領域,低頻分量指圖像的變化不大的部分;高通濾波器可以通過高頻分量,濾出低頻分量,在圖像處理領域,高頻分量指圖像變化較大的的部分,對應圖像的邊緣、細節、紋理信息。
clc;clear;I=imread(lena.png);[m,n]=size(I);Do=0.1*m;F=fft2(I);u=0m-1);v=0n-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);D=sqrt(U.^2+V.^2);%%距離矩陣,表示各個像素與圖像中心距離的矩陣way=inputdlg(輸入濾波器種類ILPF,BLPF,GLPF,IHPF,BHPF,GHPF,圖像濾波);way=char(way);switch way case ILPF H=double(D<=Do);%%理想低通濾波器 Ideal low-path filter case BLPF H=1./(1+(D./Do).^4);%%巴特沃斯低通濾波器butterworth low-path filter case GLPF H=exp(-(D.^2)./(2*(Do^2)));%%高斯低通濾波器guassian high-path filter case IHPF H=double(D>=Do);%%理想高通濾波器 Ideal low-path filter case BHPF H=1./(1+(Do./D).^4);%%巴特沃斯高通濾波器butterworth low-path filter case GHPF H=1-exp(-(D.^2)./(2*(Do^2)));%%高斯高通濾波器guassian high-path filter otherwise errordlg(聽不懂你說啥,嚇嚇~);endFout=F.*H;imshow(log(fftshift(abs(Fout))+1),[]);%顯示濾波後圖像的頻譜圖f=real(ifft2(Fout));f=uint8(f);figure,imshow(f),title([way,處理後]);figure,imshow(I),title(處理前);
低通濾波運行如圖所示,模糊了圖像。可以看出頻譜圖中圖像只剩下了低頻部分,高頻部分被濾除。
高通濾波如圖所示,勾勒了圖像邊緣。低頻部分被濾出。
推薦閱讀:
※Android如何繪製絢麗的彩色筆跡?
※python計算機視覺-基本圖像操作和處理(1)
※圖像去霧項目中遇到的問題
※MATLAB圖像處理:把照片變成素描風格
TAG:圖像處理 |