February 2, 2009
cachingballet
在天空部落發表於16:30:02 |
寫程式是愉快的事
鼓勵此網誌:0

影像傅立葉轉換是一般常被用來進行影像處裡的前步驟
意思是將影像轉成頻率域來進行處裡
過程是先把每個像素取出來進行Fourier 轉換
今天不意外的還是找了lena來當測試影像
意思是將影像轉成頻率域來進行處裡
過程是先把每個像素取出來進行Fourier 轉換
今天不意外的還是找了lena來當測試影像
至於轉換的公式還蠻複雜的,在此不贅述
實作的寫法因為是二維Fourier 轉換
所以必須用到四層for迴圈
且要考慮實部虛部的運算
g2 = GetGValue(Image3->Canvas->Pixels[r2][c2]);
var2 = 2*PI/100*(u2*r2+v2*c2);
temp2 = pow(-1,r2+c2);
Real += g2 * temp2 * cos(var2); //實部
Image += g2 * temp2 * sin(var2); //虛部
這部份是最核心也卡最久的地方....
最後再用尤拉公式算出其像素: pixels = sqrt(pow(Real,2)+pow(Image,2))
有轉換,當然也要有反轉換
反轉換比較單純
由於所算出的虛部非常小,
因此我們不用去考慮,只要針對實部來計算
Real+= g3 * cos(aatan[r3][c3]) * cos(var3);
Real+= -g3 * sin(aatan[r3][c3]) * sin(var3);
上面是算出其向位角,來對應出原始像素及位置
接下來是實作結果
我利用Fourier 轉換實作出filter
分別是: 理想, 巴特沃斯,高斯這三種的高通及低通濾波器
低通濾波器就是低頻部份可通過,高頻部份被衰減
因此會變成邊緣模糊化
高通濾波器就是高頻部份可通過,低頻部份被衰減
因此會變成黑色的圖
下面是讀取100*100像素大小的lena影像
先進行灰階化後再做Fourier 轉換,第三張是反轉
實作的寫法因為是二維Fourier 轉換
所以必須用到四層for迴圈
且要考慮實部虛部的運算
g2 = GetGValue(Image3->Canvas->Pixels[r2][c2]);
var2 = 2*PI/100*(u2*r2+v2*c2);
temp2 = pow(-1,r2+c2);
Real += g2 * temp2 * cos(var2); //實部
Image += g2 * temp2 * sin(var2); //虛部
這部份是最核心也卡最久的地方....
最後再用尤拉公式算出其像素: pixels = sqrt(pow(Real,2)+pow(Image,2))
有轉換,當然也要有反轉換
反轉換比較單純
由於所算出的虛部非常小,
因此我們不用去考慮,只要針對實部來計算
Real+= g3 * cos(aatan[r3][c3]) * cos(var3);
Real+= -g3 * sin(aatan[r3][c3]) * sin(var3);
上面是算出其向位角,來對應出原始像素及位置
接下來是實作結果
我利用Fourier 轉換實作出filter
分別是: 理想, 巴特沃斯,高斯這三種的高通及低通濾波器
低通濾波器就是低頻部份可通過,高頻部份被衰減
因此會變成邊緣模糊化
高通濾波器就是高頻部份可通過,低頻部份被衰減
因此會變成黑色的圖
下面是讀取100*100像素大小的lena影像
先進行灰階化後再做Fourier 轉換,第三張是反轉

下面是理想低通和高通濾波處裡,可以發現其模糊效果非常粗糙

下列是巴特沃斯濾波器的效果,可以發現其邊緣比理想還平化

最後是高思濾波器,是模糊效果最佳的一個方法


其實在高通濾波器方面,人眼是很難辨識出其差異的
至於執行效能方面
我的電腦是
Core 2 Duo CPU E8200 2.66GHz
2G RAM
NV GF8600 GS
跑Fourier 轉換需要2-3分鐘
至於用實驗室的跑呢...-.-"
因為比較爛只有512RAM
CPU 2.66 單核心
需要4-5分鐘,衰一點還會當機... (真希望老闆趕快買新的)
至於執行效能方面
我的電腦是
Core 2 Duo CPU E8200 2.66GHz
2G RAM
NV GF8600 GS
跑Fourier 轉換需要2-3分鐘
至於用實驗室的跑呢...-.-"
因為比較爛只有512RAM
CPU 2.66 單核心
需要4-5分鐘,衰一點還會當機... (真希望老闆趕快買新的)
當然還是有快速傅立葉寫法
不用幾秒就可以跑出來
以後有機會再來研究

最後非常感謝一路和我互相研究討論的石同學
沒有他的指點,我還真的是卡超久的
真不愧是國立大學生
以上是Fourier 轉換的心得分享~
由於是上學期忙亂中寫出來
或許有些地方記錯,有誤地方請包涵











