08 傅利葉變化

2021-10-05 20:49:06 字數 3761 閱讀 7853

對進行頻域上的處理

opencv中主要就是cv2.dft()cv2.idft(),輸入影象需要先轉換成np.float32格式。

得到的結果中頻率為0的部分會在左上角,通常要轉換到中心位置,可以通過shift變換來實現。

cv2.dft()返回的結果是雙通道的(實部,虛部),通常還需要轉換成影象格式才能展示(0,255)。

#將頻率為0的移到中心

# 因為傅利葉變換返回的是實部和虛部,故要轉換為矩陣的形式用影象展示出來

#magnitude函式的作用是計算二維向量的幅值,這裡就是計算虛數的幅值

magnitude_spectrum =

20*np.log(cv2.magnitude(dft_shift[:,

:,0]

,dft_shift[:,

:,1]

))plt.subplot(

121)

,plt.imshow(img, cmap =

'gray'

)plt.title(

'input image'

), plt.xticks(

), plt.yticks(

)plt.subplot(

122)

,plt.imshow(magnitude_spectrum, cmap =

'gray'

)plt.title(

'magnitude spectrum'

), plt.xticks(

), plt.yticks(

)plt.show(

)左圖為原圖,右圖為原圖在頻域上頻率分布的情況,中間的低頻,隨著向四周擴散頻率逐漸公升高

#以上的**都和前面相同

rows, cols = img.shape

crow, ccol =

int(rows/2)

,int

(cols/2)

#取中心位置,製作掩膜,將高頻的區域置0覆蓋掉,保留低頻訊號

# 低通濾波,通過建立掩膜來提取低頻訊號

mask = np.zeros(

(rows, cols,2)

, np.uint8)

mask[crow-

30:crow+

30, ccol-

30:ccol+30]

=1# idft 傅利葉逆變換

fshift = dft_shift*mask #相當於與操作

f_ishift = np.fft.ifftshift(fshift)

#前面將頻率為0移到了中心,現在要先移回左上角再做逆變換

img_back = cv2.idft(f_ishift)

img_back = cv2.magnitude(img_back[:,

:,0]

,img_back[:,

:,1]

)#和上面一樣,虛數求幅值轉為矩陣,繼而用影象表示

plt.subplot(

121)

,plt.imshow(img, cmap =

'gray'

)plt.title(

'input image'

), plt.xticks(

), plt.yticks(

)plt.subplot(

122)

,plt.imshow(img_back, cmap =

'gray'

)plt.title(

'result'

), plt.xticks(

), plt.yticks(

)plt.show(

)效果如下

同理,高通濾波也一樣,只是掩膜不同

# 中心位置

# 高通濾波

mask = np.ones(

(rows, cols,2)

, np.uint8)

mask[crow-

30:crow+

30, ccol-

30:ccol+30]

=0#這裡將中間低頻的部分置0覆蓋掉,保留高頻的部分

# idft

fshift = dft_shift*mask

f_ishift = np.fft.ifftshift(fshift)

img_back = cv2.idft(f_ishift)

img_back = cv2.magnitude(img_back[:,

:,0]

,img_back[:,

:,1]

)plt.subplot(

121)

,plt.imshow(img, cmap =

'gray'

)plt.title(

'input image'

), plt.xticks(

), plt.yticks(

)plt.subplot(

122)

,plt.imshow(img_back, cmap =

'gray'

)plt.title(

'result'

), plt.xticks(

), plt.yticks(

)plt.show(

)效果如下

教程來自:

傅利葉變化

1.尤拉公式 2.傅利葉級數 任何週期函式都可以轉化成正弦函式和 2.1 三角函式表現形式 2.2 指數表現形式 f t 是傅利葉的指數展開式子,fn 正弦波的實質是在圓周運動在一條直線上的投影 下圖中乙個復合信合可以有很多正弦函式疊加而成,並且從不同的方向看這些疊加函式,可以得到時域和頻域函式。3...

FFT快速傅利葉變化原始碼

fft1.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include pch.h include include include define n 64 64點 define log2n 6 log2n 6 複數型別 typedef struct complex complex ...

傅利葉 灰度

假設你原來的圖象為 i n,n 傅利葉變換後的矩陣為 f n,n 顯示傅利葉變換後的圖象其實就是顯示矩陣 f n,n 啊,因為變換後的係數是複數,所以取幅值。同時為了顯示方便,有時候會進行 normalize,把 f n,n 的範圍變換到0 255區間,有時候為了突出黑 白對比,還會進行對數運算 l...