關(guān)于matlab圖像濾波詳解(二維傅里葉濾波)
matlab圖像濾波詳解(二維傅里葉濾波)
在matlab中,圖像濾波有很多中
- 比如平滑濾波(smooth()函數(shù))
- 中值濾波medfilt2()函數(shù))
這些相對簡單,可以直接參考函數(shù)解釋,不做詳細解說
這里重點講解一下傅里葉濾波,在matlab中,常用的為快速傅里葉變換。進行濾波的難點就在于如何將圖像轉(zhuǎn)換到頻率域以及如何將頻率域的圖像逆變換為空間域中的圖像
第一步:讀取圖像并對圖像進行傅里葉變換
Path='images.jpg'; im=imread(Path); img=rgb2gray(im);%將彩色圖變成二維灰度圖圖像 img2=double(img);%將數(shù)據(jù)改成double類型,方便進行數(shù)據(jù)變換 subplot(131) imshow(img); title('原始圖像') f=fft2(img2);
此時,f為圖像的二維頻譜,但是此時的零頻分量并不在中間,如果直接進行顯示的話,會出現(xiàn)如下結(jié)果(見左圖),matlab提供ffishift()函數(shù),可以將圖像零頻分量移到中間
代碼見下:
subplot(121) imshow(log(abs(f)+1),[]);%直接顯示圖像,未移動零頻分量 title('未移動零頻分量頻譜圖') subplot(122) f2=fftshift(f); imshow(log(abs(f2)+1),[]);%直接顯示圖像,未移動零頻分量 title('移動零頻分量頻譜圖')
這里有人肯定會疑問 log(abs(f)+1)中為什么要+1,不加也行,就是為了畫圖的時候,讓f為零 log(abs(f)+1),不加1的話 log(abs(f))會很大,圖像不好看
結(jié)果如下
第二步:濾波
濾波分為低通、高通、帶通、帶阻、高斯低通、高低高通濾波,其本質(zhì)就是令頻譜F乘以濾波器H,針對不同的濾波器,H不同
低通濾波器【D(u,v)表示點(u,v)到中心的距離】
在此我們以高斯低通濾波器為例,利用matlab設(shè)計濾波器(設(shè)D0為10)
D0=10; [M,N]=size(f2); m=floor(M/2); n=floor(N/2);%(n,m)為中心點 for i=1:M for j=1:N D=sqrt((i-m)^2+(j-n)^2); H(i,j)=exp(-1/2*D^2/D0^2); end end figure subplot(121) imshow(H); title('高斯低通濾波器')
濾波器與頻譜相乘,即得到濾波后的頻譜
subplot(122) f3=f2.*H; imshow(log(abs(f3)+1),[]) title('濾波后的頻譜')
結(jié)果如下
第三步:傅里葉逆變換
進行逆變換時,要先將頻譜移動回原位置,即通過ifftshift( )函數(shù)實現(xiàn),代碼如下
img3 = (ifft2(ifftshift(f3))); img4 = uint8(real(img3));%real函數(shù)表示留下復數(shù)的實部 figure subplot(121) imshow(img); title('原圖'); subplot(122) imshow(img4); title('逆變換');
結(jié)果如下
這里要注意的是逆變換后的img3為復數(shù),要刪除虛數(shù)部分,并轉(zhuǎn)換成uint8圖像格式數(shù)據(jù)才能用imshow顯示
總結(jié)
1. 其他濾波器原理只要在H函數(shù)定義部分稍微改動一下即可
2. 不必過多糾結(jié)log(abs(f3)+1)為什么取對數(shù)以及為何加1,只是單純的為了顯示更加直觀
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python?魔法方法之?__?slots?__的實現(xiàn)
本文主要介紹了python?魔法方法之?__?slots?__的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03在Pycharm中調(diào)試Django項目程序的操作方法
今天小編就為大家分享一篇在Pycharm中調(diào)試Django項目程序的操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07python獲取當前時間對應(yīng)unix時間戳的方法
這篇文章主要介紹了python獲取當前時間對應(yīng)unix時間戳的方法,涉及Python時間操作的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下2015-05-05Python?庫?PySimpleGUI?制作自動化辦公小軟件的方法
Python?在運維和辦公自動化中扮演著重要的角色,PySimpleGUI?是一款很棒的自動化輔助模塊,讓你更輕松的實現(xiàn)日常任務(wù)的自動化,下面通過本文給大家介紹下Python?庫?PySimpleGUI?制作自動化辦公小軟件的過程,一起看看吧2021-12-12使用Matplotlib創(chuàng)建漂亮的數(shù)據(jù)可視化圖表
在 Python 中,Matplotlib 是一個強大而靈活的工具,可以用來創(chuàng)建各種類型的數(shù)據(jù)可視化圖表,本文給大家介紹了如何使用Matplotlib創(chuàng)建漂亮的數(shù)據(jù)可視化圖表,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下2024-04-04淺談Python類的__getitem__和__setitem__特殊方法
下面小編就為大家?guī)硪黄獪\談Python類的__getitem__和__setitem__特殊方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12