1072 CS362 影像處理概論 作業 3
1051447 梁雅錡
作業題目:撰寫一個程式,讀取一張 256 色灰階圖像。計算輸入圖的離散傅立葉轉換結果,並 將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出。
撰寫過程
(1) 作業系統環境:Windows
(2) 程式語言:Python
(3) 程式開發軟體:Pycharm
(1) 作業系統環境:Windows
(2) 程式語言:Python
(3) 程式開發軟體:Pycharm
(4) 開發環境:
開發環境名稱
|
使用情形
|
Python 3.6
|
採用Python 3.6編寫程式。
|
OpenCV.4.0.0.21
|
利用OpenCV 4.0.0.21的套件讀取讀片、對圖片進行各式轉換、以及存取圖片檔。
|
Numpy 1.15.4
|
使用Numpy 1.15.4調整圖片的各個像素變動。
|
Matplotlib2.1.2
|
利Matplotlib2.1.2畫出頻譜圖以及相位圖,存取輸出內容。
|
(5) 程式內容:
1.在傅立葉的轉換上,我使用Numpy來實現,使用np.fft.fft2(),主要是將空間域轉化為頻率域,第一個參數是輸入影像,它是灰度影像,第二個參數是可選的,它決定了輸出陣列的大小,如果它大於輸入影像的大小,則輸入影象在計算FFT之前填充了0。如果它小於輸入影像,輸入影像將被裁剪,如果沒有引數傳遞,輸出陣列的大小將與輸入相同。
2.得到結果後,零頻率分量(DC分量)將位於左上角。 如果要將其置於中心位置,則需要在兩個方向上將結果移動,這邊我使用np.fft.fftshift()進行移動,將低頻部分移動到影像的中心。
3.目前得到的結果並不是一個歸一化的影像,我利用20*np.log(np.abs(img))進行歸一化,取得頻譜;接著用numpy自帶的angle函式(np.angle()),可以直接根據複數的實部與虛部求出角度(默認出來的角度是弧度),取得相位。
3.目前得到的結果並不是一個歸一化的影像,我利用20*np.log(np.abs(img))進行歸一化,取得頻譜;接著用numpy自帶的angle函式(np.angle()),可以直接根據複數的實部與虛部求出角度(默認出來的角度是弧度),取得相位。
(6) 程式成果:
I. 左上圖為原圖,右邊依序是原圖轉灰階圖、頻譜圖、相位圖
I. 左上圖為原圖,右邊依序是原圖轉灰階圖、頻譜圖、相位圖
II.左上圖為原圖,右邊依序是原圖轉灰階圖、頻譜圖、相位圖
III.左上圖為原圖,右邊依序是原圖轉灰階圖、頻譜圖、相位圖
- 在成果中,可以在中心看到更多的白色區域,表示低頻率的內容更多.。
- 可以將影像視為在兩個方向上取樣的訊號
- 在X和Y方向上進行傅立葉變換可以得到影像的頻率表示。
如下圖所示,儲存每次matplot畫出的影像,使用的是plt.savefig()。
沒有留言:
張貼留言