基于Python語言的OpenCV3實(shí)例學(xué)習(xí)---傅里葉變換
圖像處理中常常應(yīng)用到傅里葉變換的概念。傅里葉變換實(shí)質(zhì)上是指觀察得到所有的波形都可以由一系列簡單且不同頻率的正弦波疊加而來。在學(xué)習(xí)信號處理時(shí),我們已經(jīng)應(yīng)用過這個(gè)概念。但是,這個(gè)概念在圖像處理上有什么用呢
圖像處理中常常應(yīng)用到傅里葉變換的概念。傅里葉變換實(shí)質(zhì)上是指觀察得到所有的波形都可以由一系列簡單且不同頻率的正弦波疊加而來。在學(xué)習(xí)信號處理時(shí),我們已經(jīng)應(yīng)用過這個(gè)概念。但是,這個(gè)概念在圖像處理上有什么用呢?其實(shí)圖像也是信號的一種表達(dá)形式,常見的圖像就是二維的離散信號,可以將圖像理解為二維矩陣,其中的元素就是像素值。
圖像中的頻率和幅度譜
一張?jiān)紙D片往往由許多頻率組成。比如在目標(biāo)邊緣處,像素值的變換一般比較強(qiáng),即某一個(gè)像素點(diǎn)與鄰處像素點(diǎn)的像素值差異比較大;或者也有差異小的點(diǎn)。這樣,我們先來理解兩個(gè)概念:圖像的頻率和幅度譜。
- 圖像的頻率:用于表征圖像中灰度變化劇烈程度的指標(biāo)。圖像中的高低頻部分是指與鄰域點(diǎn)像素差異的強(qiáng)弱(梯度的大小),一般梯度越大,在頻譜中亮度就越強(qiáng)。如果一張圖片中低頻部分越多,圖像相對來說就比較柔和。
- 幅度譜:圖像經(jīng)過傅里葉變換后,會(huì)得到幅度譜,它是原始圖像在變化方面的一種表征。一般是把一張圖像中最亮的像素放在幅度譜正中央,然后逐漸變暗。從而可以較為直觀地顯示原始圖像中亮暗像素所占的比例。
實(shí)例學(xué)習(xí):基于Python的OpenCV3傅里葉變換
首先,我們需要在Python環(huán)境中編譯程序,并導(dǎo)入必要的庫。接下來,我們選取一張測試圖片,并進(jìn)行傅里葉變換和逆變換。
```python
import cv2
import numpy as np
from matplotlib import pyplot as plot
img ('', 0) 讀入圖像的路徑
f np.fft.fft2(img) 二維傅里葉變換
fshift np.fft.fftshift(f)
magnitude_spectrum 20 * np.log(np.abs(fshift)) 幅度譜
row, cols
crow, ccol row / 2, cols / 2
fshift[crow - 30 : crow 30, ccol - 30 : ccol 30] 0
f_ishift np.fft.ifftshift(fshift) 逆變換
img_back np.fft.ifft2(f_ishift)
img_back np.abs(img_back) 取模
(221), (img, cmap'gray')
plot.title('Input'), plot.xticks([]), ([])
(222), (magnitude_spectrum, cmap'gray')
plot.title('Magnitude Spectrum'), plot.xticks([]), ([])
(223), (img_back, cmap'gray')
plot.title('Input in JET'), plot.xticks([]), ([])
()
```
最后,我們看一下實(shí)驗(yàn)結(jié)果。傅里葉變換可以幫助我們理解圖像所包含的意義,從數(shù)學(xué)角度直觀地理解各個(gè)像素與像素之間的關(guān)系。通過分析傅里葉變換的結(jié)果,我們能實(shí)現(xiàn)其他的圖像操作。