作業說明:
請撰寫一個程式,讀取一張256色灰階圖像。
(1) 計算輸入圖的離散傅立葉轉換結果,
並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。
(2) 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。
操作環境:
l
作業系統 : Windows10
l
編譯軟體 : Visual
Studio Code
l
使用語言 : Python
/ OpenCV 4.5.1
實作方法:
1. (1) 運用OpenCV提供之讀取圖片檔函數cv2.imread將圖片讀取進來。
(2) 將圖片Zero Padding成2M*2N的圖 ,並且讓圖維持在左上角。
(3) 讓頻譜置中,將圖的顏色值存入 f(u,v) 再做 DFT 得到 F(u,v)。
(4) 將上述公式取得之實數存放第一個陣列, 虛數存放第二個陣列,
並且計算Spectrum的值和Phase angle的值。
(5) Spectrum不易觀察,故進行log算法,log (1+sqrt(r*r+i*i)),
並將Spectrum和Phase angle 的值域調整至0~255
2. 方法一:
(1) 由上述步驟得到的傅立葉轉換F(u,v),計算 D(u,v) 與H(u,v)。
(2) 再計算G(u,v)=H(u,v)*F(u,v),對G(u,v)做inverse
(3) 將圖片裁切左上角轉回原圖
方法二:
(1) 計算Mask
(2)
對原圖周圍做Padding
(3) 用計算出的Mask對原圖做Convolution
執行結果:
原圖:
頻譜大小:
相位角度:
平滑後圖像:
沒有留言:
張貼留言