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