1.影象頻域處理的意義
在影象處理和分析中,經常會將影象從影象空間轉換到其他空間中,並利用這些空間的特點進行對轉換後影象進行分析處理,然後再將處理後的影象轉換到影象空間中,這稱之為影象變換。
在一些影象處理和分析中通過空間變換往往會取得更有效的結果。影象頻域處理是指將影象從影象空間轉換到頻域空間進行處理的過程。最常用的頻域轉換是傅利葉變換。
傅利葉變換的計算量較大,人們為了提高速度,提出了快速傅利葉變換,並得到了廣泛的應用。本篇部落格主要來學習vtk中的快速傅利葉變換。
2.快速傅利葉變換及其逆變換
快速傅利葉變換(fast fourier transform),簡稱做fft。它是根據離散傅氏變換的奇、偶、虛、實等特性,對離散傅利葉變換的演算法進行改進獲得的。傅利葉變換是可逆的,其逆變換為rfft。
fft在數字影象處理中有著廣泛的應用,例如數字影象頻域濾波,去噪,增強等等。 目前vtk中兩變換都已經實現,對應的類分別為vtkimagefft和vtkimagerfft。
vtkimagefft和vtkimagerfft的輸入為實數或者複數資料,輸出都為複數資料。因此,vtkimagefft與vtkimagerfft的輸出結果不能直接顯示,因為vtk會將其當做彩色影象顯示,需要通過vtkimageextractcomponents提取某一組分影象顯示。
vtk頻率域的影象處理步驟如下:
下面**演示了怎樣對影象進行傅利葉變換,以及將傅利葉變換結果進行逆變換:
#include #include #include #include #include #include #include #include #include #include #include #include int main()
; double fftview[4] = ;
double rfftview[4] = ;
vtksmartpointerorigrender = vtksmartpointer::new();
origrender->setviewport(origview);
origrender->addactor(origactor);
origrender->resetcamera();
origrender->setbackground(1, 1, 1);
vtksmartpointerfftrender = vtksmartpointer::new();
fftrender->setviewport(fftview);
fftrender->addactor(fftactor);
fftrender->resetcamera();
fftrender->setbackground(1, 1, 1);
vtksmartpointerrfftrender = vtksmartpointer::new();
rfftrender->setviewport(rfftview);
rfftrender->addactor(rfftactor);
rfftrender->resetcamera();
rfftrender->setbackground(1, 1, 1);
/ vtksmartpointerrw = vtksmartpointer::new();
rw->addrenderer(origrender);
rw->addrenderer(fftrender);
rw->addrenderer(rfftrender);
rw->setwindowname("frequncy_fft_rfft");
rw->setsize(960, 320);
vtksmartpointerrwi = vtksmartpointer::new();
vtksmartpointerstyle = vtksmartpointer::new();
rwi->setinteractorstyle(style);
rwi->setrenderwindow(rw);
rwi->initialize();
rwi->start();
return 0;
}
執行結果如下:
首先建立乙個jpeg影象reader來讀取一副灰度影象。然後定義乙個vtkimagefft指標,直接接收reader的輸出即原影象資料作為輸入進行二維快速傅利葉變換。其輸出為乙個畫素型別為複數的vtkimagedata資料,即每個畫素值為兩個組分(component):複數實部和虛部。因此如果直接顯示這個vtkimagedata,會發現是乙個彩色影象。如果需要顯示頻域影象,需要通過vtkimageextractcomponents類來提取某乙個組分影象來顯示。上例中通過定義vtkimageextractcomponents類指標,利用函式setcomponents(0)指定提取實部影象顯示;由於vtkimageactor類僅支援unsigned char資料型別的影象,利用vtkimagecast類的setoutputscalartypetounsignedchar()指定輸出型別為unsigned char,將fft結果影象轉換為需要的型別。
對於逆變換的過程也是類似。首先定義vtkimagerfft指標,並接收輸入為vtkimagefft指標的輸出,呼叫update執行函式完成快速傅利葉逆變換。vtkimagerfft的輸出同樣為一副複數影象,通常不能直接顯示或者進行其他操作。對於傅利葉逆變換的影象中虛數部分值為0,實數部分影象即為重建的原始影象。因此再次利用vtkimageextractcomponents提取實數部分影象,並通過setoutputscalartypetounsignedchar()將影象轉換為unsigned char型別進行顯示。
傅利葉變換與快速傅利葉變換
作為電子資訊專業的學生老說,這個不知道,或者理解不清楚,是十分不應該的,作為乙個學渣,有時候確實是理解不清楚的 1 首先離散傅利葉變換目的 簡單點說 就是將乙個訊號從時域變換到頻域 標準點說 將以時間為自變數的訊號 與 頻率為自變數的頻譜函式之間的某種關係變換 數學描述 對於 n點序列 其中自然對數...
快速傅利葉變換
學習快速傅利葉變化是量子計算中的基礎,查了很多資料,以下鏈結可以作為參考 本部落格部分知識學習於 最後這個裡面有解釋蝴蝶效應是怎麼來的!實用數字訊號處理 dft 離散傅利葉變換 o n2 計算多項式乘法 fft 快速傅利葉變換 o n log n 計算多項式乘法 fntt ntt 快速傅利葉變換的優...
快速傅利葉變換
傅利葉變換 fft fast fourier transformation 是離散傅氏變換 dft 的快速演算法。即為快速傅氏變換。它是根據離散傅氏變換的奇 偶 虛 實等特性,對離散傅利葉變換的演算法進行改進獲得的。採用這種演算法能使計算機計算離散傅利葉變換所需要的乘法次數大為減少,特別是被變換的抽...