s1091536 作業4

 

1.題目說明:

附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜 訊去除)


2.開發環境:

OS: Windows 11

Editor: PyCharm
Language: python 3.8
Package: OpenCV 4.7.0

 

3.操作:

“python .\hw4_1091536_noise-remove.py”啟動程式。

一次出現原始影像與還原影像




4.方法及實作:

(a)概念:

Step1.   計算輸入圖的離散傅立葉轉換結果

Step2.   將頻譜大小與相位角度個以灰階256色圖像方式呈現出

Step3.   對圖像進行gaussian low pass filter處理

使用子下兩條式子分別找到D(u,v)H(u,v),再使已進行傅立葉轉換的相位角圖與H(u,v)相乘進行low pass的濾波。

Step4.   對濾波完成的圖像反傅立葉轉換

 

(b)程式:

                              Step0.   以灰階讀入影像

# Get image as gray
img = cv2.imread('image4.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Step1.           計算輸入圖的離散傅立葉轉換結果

# Opnecv2傅立葉變換函數

# 需要將影象進行一次float轉換
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
# 將頻譜低頻從左上角移動至中心位置
dft_shift = np.fft.fftshift(dft)
# 正向結束

Step2.        將頻譜大小與相位角度個以灰階256色圖像方式呈現出

# 顯示傅立葉頻譜圖&相位圖

# 頻譜影象雙連結複數轉換為 0-255 區間
magnitude_spectrum = 20*np.log(cv2.magnitude(...)
phase = cv2.normalize(cv2.phase(
...).astype(np.uint8)

Step3.   對圖像進行gaussian low pass filter處理

# create filter
filter = gaussian(rows, cols, ...)
# filt the spectrum of img
blur = blur(dft_shift, rows, cols, filter)

              Step4.   對濾波完成的圖像反傅立葉轉換

# 反向傅立葉變換開始

inv_shift = np.fft.ifftshift(blur)
invdft = cv2.idft(inv_shift)
invdft = cv2.magnitude(
...)

Create Gaussian low pass flitter

def gaussian(rows, cols, D0):
H = np.zeros((rows
, cols), dtype = 'float32')
D = np.zeros((rows
, cols), dtype = 'float32')
   ...
return H

Flit the spectrum of img

def blur(img, rows, cols, filt):
r = np.zeros((rows, cols, 2), dtype = 'float32')
...
return r

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1081444 Homework #7