c# 傅里叶变换 频域_傅里叶变换在MATLAB中的应用(频域滤波)
本文主要講述如何在MATLAB中實現頻域濾波,那么,怎么實現呢,我們這里講的所有的濾波都是通過傅里葉變換在頻域中實現的,所有這部分和傅里葉變換淵源很深,至于傅里葉變換本身,我自己也不能解釋的很清楚,我們只講他如何在matlab中實現和應用。
深入了解傅里葉變換請戳文末鏈接!!!!
大佬介紹的深入淺出,每每有茅塞頓開之感,大家學完教材上有關傅里葉變換的,再看看文中所寫,真的是柳暗花明,瞻仰大佬之余,大家別忘了切回來啊,我們繼續講MATLAB。
一、圖像增強中的頻域濾波(通過傅里葉變換實現)1.頻域濾波的基本概念
空間域和頻域線性濾波的基礎都是卷積定理,該定理可以寫作:
至于卷積定理本身是什么,大家可以看看知乎上另一個大佬的解釋:
J Pan:“卷積”其實沒有那么難以理解:
https://zhuanlan.zhihu.com/p/41609577
我們依舊是只講述濾波問題,我們這里需要知道的是,頻域濾波的目的是選擇一個濾波器傳遞函數,以便按照指定的方式修改F(u,v)。
例如,圖(a)所示的濾波器有一- 個傳遞函數,在乘以-一個居中處理后的函數F(u, 0)后,該傳遞函數會衰減F(u, v)的高頻分量,而保持低頻分量相對不變。具有這種特性的濾波器稱為低通濾波器。低通濾波器的結果會導致圖像出現模糊現象(平滑)。
基于卷積理論,我們知道為了在空間域中得到相應的濾波后的圖像,僅需要計算積H(u, v),F(u, v)的傅里葉逆變換。應當記住,上述方法所得到的結果與我們在空間域中使用卷積所得到的結果是相同的,只要濾波掩模h(x,y)是H(u,v)的傅里葉變換。
2.函數介紹
paddedsize函數,他的作用是填充輸入圖像,需要注意的是,很多人的matlab文件里面沒有這個函數,需要自己定義,所以調用的時候會顯示錯誤,可以關注公眾號Asoul水云天課堂,后臺回復padd函數獲取源代碼,定義的步驟是,復制源代碼,新建腳本,粘貼運行之后保存在matlab文件夾中。
freqz2函數 ?
[H,f1,f2] = freqz2(h) 的返回值 H是h的64*64頻率響應,f1和f2是長度為64的頻率向量。h 是一個二維的有限脈沖響應濾波器(FIR filter),其形式為計算單元(computational molecule)。
3.freqz2函數和fft函數的比較
對于一個給定的空間濾波器h,生成一個頻域濾波器H的明顯方法是令H=fft2(h,PQ1,PQ2),而freqz2函數可以把空間濾波器轉換成等價的頻域濾波器,他可以求系統的頻率響應。
4.DFT(離散傅里葉變換)濾波的基本步驟
Step1.使用函數paddedsize獲得填充參數:
PQ = paddedsize (size(f)) ;Step2.得到使用填充的傅里葉變換:
F = fft2(f, PQ(1), PQ(2)) ;Step3.生成個大小為PQ(1) x PQ (2)的濾波函數H。該濾波函數的格式必須如圖4.4(b)所示。另外,若它已居中,則在使用該濾波函數之前要令
H= fftshift (H)。Step4.將變換乘以濾波函數:
G = H.*F;Step5.獲得G的傅里葉逆變換的實部:
g=real (ifft2(G));Step6:將右上部的矩形修剪為原始大小
g=g(1:size(f,1),1:size(f,2));如果看不懂沒關系,后面會舉例子。
二、空間濾波與頻域濾波的比較這個實驗比較有綜合性,也能有助于我們更透徹的掌握濾波這部分的內容。
題目:空間濾波和頻域濾波的比較
Step1:獲得圖像f的傅里葉頻譜
g=imread('hh.jpg');f=rgb2gray(g);
subplot(2,3,1);
imshow(f)
F=fft2(f);
S=fftshift(log(1 + abs(F)) ) ;
S = gscale(S) ;
subplot(2,3,2);
imshow(S)
Step2:生成濾波器
空間濾波器
h=fspecial('sobel')'h=[1 0 -1;2 0 -2;1 0 -1];
freqz2(h) %查看濾波器圖形
頻域濾波器可以用如下函數生成:
PQ = paddedsize (size(f));H = freqz2 (h,PQ(1),PQ(2)) ;
H1 = ifftshift(H);
subplot(2,2,1);
imshow(abs(H), [ ])
subplot(2,2,2);
imshow (abs (H1), [ ])
(以圖像的形式顯示了H和H1的絕對值)
Step3:生成濾波后的圖像
在空間域中,我們使用
gs=imfilter(double(f),h);頻域中,注意這個函數也需要自己定義,可以關注公眾號獲取源代碼
gf=dftfilt(f,H1);讓他們顯示在一起
subplot(2,3,4);imshow(gs)
subplot(2,3,5);
imshow(gf)
這就是分別進行兩種濾波后的效果圖, 圖像中的灰色調是由于gs和gf存在負值,這會使得圖像的平均值在使用命令imshow后增大。我們再進行操作
>> figure, imshow(abs(gs),[ ])>> figure, imshow (abs(gf), [])這是上面兩幅圖片的絕對值
通過c創建一幅閾值二值圖像,我們可以更清楚的看到邊緣
subplot(1,2,1);imshow(abs(gs)>0.2*abs(max(gs(:))));
subplot(1,2,2);
imshow(abs(gf)>0.2*abs(max(gf(:))));
使用空間域濾波和頻域濾波得到的圖像對所有實用目的來說,都是相同的。下面我們通過計算它們的關來確證這一點:
>>d = abs(gs - gf) ;最大差和最小差別分別為
>> max(d(:) )ans =
5.4015e-012
>> min(d(:) )
ans =
0
圖像濾波分為空間域濾波和頻域濾波,空間濾波的內容見本人的另一篇文章:
清逸:MATLAB中圖像變換之線性空間濾波:
https://zhuanlan.zhihu.com/p/187517189
深入了解傅里葉變換請戳這里哦!!
Heinrich:傅里葉分析之掐死教程(完整版):
https://zhuanlan.zhihu.com/p/19763358
關于MATLAB的學習:
大家可以關注我們的知乎專欄——數據可視化和數據分析中matlab的使用:
https://zhuanlan.zhihu.com/c_1131568134137692160
歡迎大家加入我們的MATLAB學習交流群:953314432
這篇有點長,如果感覺對自己有用的話,可以點個贊,別老是偷偷的收藏哦。
▼往期精彩回顧▼圖像處理中的代數運算及幾何變換數據預處理——噪聲值平滑處理數據預處理小結MATLAB中的非線性空間濾波基礎掃碼關注我們更多精彩等待你發現出品:Asoul水云天課堂工作室好看你就點點我 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c# 傅里叶变换 频域_傅里叶变换在MATLAB中的应用(频域滤波)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maya python 开根号_maya
- 下一篇: python 字典组成的列表_pytho