我們生活在時間的世界中,早上7:00起來吃早飯,8:00去擠地鐵,9:00開始上班。。。以時間為參照就是時域分析。
但是在頻域中一切都是靜止的!
- 高頻:變化劇烈的灰度分量,例如邊界
- 低頻:變化緩慢的灰度分量,例如一片大海
- 低通濾波器:只保留低頻,會使得影象模糊
- 高通濾波器:只保留高頻,會使得影象細節增強
- opencv中主要就是cv2.dft()和cv2.idft(),輸入影象需要先轉換成np.float32 格式。
- 得到的結果中頻率為0的部分會在左上角,通常要轉換到中心位置,可以通過shift變換來實現。
- cv2.dft()返回的結果是雙通道的(實部,虛部),通常還需要轉換成影象格式才能展示(0,255)。
#得到灰度圖能表示的形式
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) #
中心位置
#低通濾波
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)
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
#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()
效果:
Opencv離散傅利葉變換
include include includeusing namespace std using namespace cv int main mat compleximage merge plannes,2,compleximage 進行離散傅利葉變換 dft compleximage,comple...
Opencv之傅利葉變換
想要了解什麼是傅利葉變換的,牆裂推薦這篇文章 傅利葉變換 import numpy as np import cv2 import matplotlib.pyplot as plt 載入 將畫素從整型轉換到浮點型 img float32 np.float32 img 傅利葉變換 時域 頻域 dft ...
opencv之離散傅利葉變換
c intgetoptimaldftsize intvecsize int cv getoptimaldftsize int size0 returnoptimaldftsizetab b optimaldftsizetab定義在namespace cv中,裡邊的數值為2 x 3 y 5 z sta...