一、 作業說明
- 計算輸入圖像的傅立葉轉換結果,以灰階256色圖像方式呈現出頻譜大小與相位角角度。
- 利用Gaussian Low-Pass Filter對輸入圖像進行處理,並輸出平滑後圖像。
二、 作業環境
- MacOS Monterey 12.2
- PyCharm 2019.3.3
- Python 3.8
- OpenCV 4.5.5
三、 實作功能與方法
傅立葉轉換
利用 numpy.fft.fftshift (numpy.fft.fft2( input_image ) )計算二維離散傅立葉變換,並將zero-frequency 分量移動到頻譜的中心,得𝐹(𝝁, 𝜈)。
- numpy.fft.fft2( ) 通過快速傅裏葉變換 (FFT) 計算 M-dimensional 數組中任意軸上的 n 維離散傅裏葉變換,默認情況下,變換是在輸入數組的最後兩個軸上計算的,即二維 FFT。
- numpy.fft.fftshift( ) 為列出的所有軸交換half-spaces(默認為全部)。請注意,僅當
len(x)
為偶數時,y[0]
才是奈奎斯特分量。
計算頻譜大小
根據頻譜大小計算公式,𝑆𝑝𝑒𝑐𝑡𝑟𝑢𝑚=|𝐹(𝝁, 𝜈)|,利用abs( 𝐹(𝝁, 𝜈) )得出頻譜大小。
- 由於FFT計算完成後之結果高頻數據集中於中心,低頻數據分散於四角,需要透過numpy.log( )運算以顯示結果。
計算相位角角度
根據相位角角度計算公式,
使用numpy.arctan2( 虛部, 實部)再將結果單位弧度轉換為角度,得出最終結果。高斯平滑處理
根據Frequency Filter步驟利用Gaussian Low-Pass Filter處理圖像。
- 輸入M*N的圖像
- 對該圖像做Zero-Padded,將圖像大小擴大成2M*2N (𝑓𝑝(𝝁, 𝜈) ),並將圖像保持在左上角
- 確保傅立葉轉換時頻譜置中,將𝑓𝑝(𝝁, 𝜈) 奇數點乘以-1
- 對𝑓𝑝(𝝁, 𝜈) 做離散傅立葉轉換得到𝐹(𝝁, 𝜈)
- 計算𝐷(𝝁, 𝜈)與𝐻(𝝁, 𝜈),取得G(𝝁, 𝜈)
- 根據兩公式,
- 設定大小為2M*2N的Gaussian Low-Pass Filter並將中心點定位在M*N,得出𝐻(𝝁, 𝜈)。
- 再根據公式,G(𝝁, 𝜈)=𝐹(𝝁, 𝜈)*𝐻(𝝁, 𝜈)計算後得出G(𝝁, 𝜈)。
- 對結果做IDFT所得即為Gaussian Low-Pass Filter在頻域作用後的結果
- 將大小裁減為原始大小M*N,保留左上角圖像部分
*自己的方法*使用fftshift代替步驟2和3,利用Gaussian Low-Pass Filter處理圖像。
四、 執行結果
第一部分
沒有留言:
張貼留言