AHU數字圖像處理作業——交換圖像的幅度和相位


爲了方便區分,我選擇在網上隨便選擇了一個獅子和豹子的圖片,根據上課所學,圖像的信息主要在相位中,所以預測結果是交換獅子和豹子的相位,纔會出現圖像內容的反轉,下面使用Python+OpneCV驗證。
請添加圖片描述
在這裏插入圖片描述

1. 讀取圖像信息,對圖像進行標準化

這裏我們只提取灰度信息,所以OpencV的imgread的flags參數選擇0.其次,兩個圖像的信息可以交換必須保證圖像大小一致,這裏用resize把兩個圖像統一爲512*288大小。

import numpy as np
import cv2
# read image
figure1_filename = 'leopard.jpg'
figure2_filename = 'lion.jpg'

figure1 = cv2.imread(figure1_filename, 0)
figure2 = cv2.imread(figure2_filename, 0)
# Uniform image size
figure1 = cv2.resize(figure1, (512, 288))
figure2 = cv2.resize(figure2, (512, 288))

2. 快速傅里葉變換提取圖像幅度、相位信息

這裏用numpy的fft包,使用fft2快速傅里葉變換,會返回一個複數類型,用type函數提取到的類型爲<class ‘numpy.complex128’>

# Fourier transform
fft_fig1 = np.fft.fft2(figure1)
fft_fig2 = np.fft.fft2(figure2)  # the result from is complex number <class 'numpy.complex128'>

numpy有angle和abs可以提取複數的相位、幅度信息

# Extract the amplitude phase information
fig1_amp = np.abs(fft_fig1)
fig1_pha = np.angle(fft_fig1)

fig2_amp = np.abs(fft_fig2)
fig2_pha = np.angle(fft_fig2)

3. 交換幅度信息

我們都知道歐拉公式ejω=cosω+jsinωe^{j\omega}=cos\omega +jsin\omega
歐拉公式告訴了我們複數信息可以用sin和cos實現。幅度也好理解,對於虛數z=a+bjz = a+bj,其 幅值爲a2+b2\sqrt{a^2+b^2}
有了這些,我們可以通過一下代碼交換幅度信息

# exchange amplitude
fig1_transform = fig2_amp*np.cos(fig1_pha) + fig2_amp*np.sin(fig1_pha)*1j
fig2_transform = fig1_amp*np.cos(fig2_pha) + fig1_amp*np.sin(fig2_pha)*1j

4. 傅里葉反變換,顯示結果

得到這樣一個複數的信息之後,我們要把頻域變換爲時域顯示,這裏仍然使用numpy的fft包,使用ifft2函數,最後一定的一定要用unit8類型強制轉換,因爲灰度圖像只能允許0~255的值存在。

# IFFT
fig1_Amp2_Pha1 = np.uint8(np.fft.ifft2(fig1_transform))
fig2_Amp1_Pha2 = np.uint8(np.fft.ifft2(fig2_transform))

# show
cv2.imshow('figure1_has_amp2', fig1_Amp2_Pha1)
cv2.imshow('figure2_has_amp1', fig2_Amp1_Pha2)

5. 交換相位

這類其實對步驟三稍微改一下就好了,剩下的都是重複的步驟

# exchange phase
fig1_transform_p = fig1_amp*np.cos(fig2_pha) + fig1_amp*np.sin(fig2_pha)*1j
fig2_transform_p = fig2_amp*np.cos(fig1_pha) + fig2_amp*np.sin(fig1_pha)*1j

# IFFT
fig1_Amp1_Pha2 = np.uint8(np.fft.ifft2(fig1_transform_p))
fig2_Amp2_Pha1 = np.uint8(np.fft.ifft2(fig2_transform_p))

# show
cv2.imshow('figure1_has_pha2', fig1_Amp1_Pha2)
cv2.imshow('figure2_has_pha1', fig2_Amp2_Pha1)

cv2.waitKey(0)

顯示結果

在這裏插入圖片描述
附上代碼下載地址:
https://download.csdn.net/download/qq_42635142/12502662

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章