OpenCV半小時掌握基本操作之傅里葉變換_第1頁
OpenCV半小時掌握基本操作之傅里葉變換_第2頁
OpenCV半小時掌握基本操作之傅里葉變換_第3頁
OpenCV半小時掌握基本操作之傅里葉變換_第4頁
OpenCV半小時掌握基本操作之傅里葉變換_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第OpenCV半小時掌握基本操作之傅里葉變換目錄概述高頻vs低頻傅里葉變換代碼詳解輸入轉(zhuǎn)換傅里葉變換獲取幅度譜傅里葉逆變換獲取低頻獲取高頻

概述

OpenCV是一個跨平臺的計算機視覺庫,支持多語言,功能強大.今天小白就帶大家一起攜手走進OpenCV的世界.

高頻vs低頻

高頻vs低頻:

高頻:變換劇烈的灰度分量,例如邊界

低頻:變換緩慢的灰度分量,例如一片大海

濾波:

低通濾波器:只保留低頻,會使得圖像模糊

高通濾波器:只保留高頻,會使得圖像細節(jié)增強

傅里葉變換

傅里葉變化(FourierTransform)是一種分析信號的方法.傅里葉變化可分析信號的成分,也可以用這些成分合成信號.

效果:

傅里葉變換:

傅里葉逆變換:

在OpenCV中實現(xiàn)傅里葉變換的函數(shù)是cv2.dft()和cv2.idft()(傅里葉逆變化)

代碼詳解

輸入轉(zhuǎn)換

傅里葉變換支持的輸入格式是np.float32,所以我們需要先把圖像轉(zhuǎn)換到要求的格式.

代碼實現(xiàn):

importnumpyasnp

importcv2

#讀取圖片,并轉(zhuǎn)換成灰度圖

img=cv2.imread("Mona_Lisa.jpg",cv2.IMREAD_GRAYSCALE)

print(img.dtype)#unit8數(shù)據(jù)類型

#轉(zhuǎn)換成np.float32

img_float32=np.float32(img)

print(img_float32.dtype)#float32數(shù)據(jù)類型

輸出結(jié)果:

uint8

float32

傅里葉變換

格式:

cv2.dft(src,dst=None,flags=None,nonzeroRows=None)

參數(shù):

src:輸入圖像

dst:輸出圖像,默認為None

flags:轉(zhuǎn)換標志(5種)

nonezeroRows:要處理的dst行數(shù),默認為None

返回值:

實部和虛部(雙通道)

實部:代表所有的偶函數(shù)(余弦函數(shù))的部分

虛部:代表所有的奇函數(shù)(正弦函數(shù))的部分

代碼實現(xiàn):

#傅里葉變換

dft=cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT)

#中心轉(zhuǎn)換,將低頻挪到中心

dft_shift=np.fft.fftshift(dft)

獲取幅度譜

幅度譜(MagnitudeSpectrum),即從構(gòu)成波形的頻率側(cè)面看過去,每一個頻率分量都會在側(cè)面的投影,如圖:

通過```cv2.magnitude``我們可以極端二維矢量的幅值.

格式:

cv2.magnitude(x,y,magnitude=None)

參數(shù):

x:實部

y:虛部

代碼實現(xiàn):

#獲取幅度譜,映射到灰度空間[0,255]

magnitude_spectrum=20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))

#幅度譜展示

combine=np.hstack((img,magnitude_spectrum.astype(np.uint8)))

cv2.imshow("combine",combine)

cv2.waitKey(0)

cv2.destroyAllWindows()

輸出結(jié)果:

傅里葉逆變換

格式:

cv2.idft(src,dst=None,flags=None,nonzeroRows=None)

參數(shù):

src:輸入圖像

dst:輸出圖像,默認為None

flags:轉(zhuǎn)換標志(5種)

nonezeroRows:要處理的dst行數(shù),默認為None

返回值:

實部和虛部(雙通道)

實部:代表所有的偶函數(shù)(余弦函數(shù))的部分

虛部:代表所有的奇函數(shù)(正弦函數(shù))的部分

代碼實現(xiàn):

#獲取中心位置

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

#傅里葉逆變換

fshidt=dft_shift*mask

f_ishift=np.fft.ifftshift(fshidt)

img_back=cv2.idft(f_ishift)

獲取低頻

importnumpyasnp

importcv2

#讀取圖片,并轉(zhuǎn)換成灰度圖

img=cv2.imread("Mona_Lisa.jpg",cv2.IMREAD_GRAYSCALE)

print(img.dtype)#unit8數(shù)據(jù)類型

#轉(zhuǎn)換成np.float32

img_float32=np.float32(img)

print(img_float32.dtype)#float32數(shù)據(jù)類型

#傅里葉變換

dft=cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT)

#中心轉(zhuǎn)換,將低頻挪到中心

dft_shift=np.fft.fftshift(dft)

#獲取幅度譜

magnitude_spectrum=20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))

#幅度譜展示

combine=np.hstack((img,magnitude_spectrum.astype(np.uint8)))

cv2.imshow("combine",combine)

cv2.waitKey(0)

cv2.destroyAllWindows()

#獲取中心位置

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

fshidt=dft_shift*mask

f_ishift=np.fft.ifftshift(fshidt)

#傅里葉逆變換,獲取低頻圖像

img_back=cv2.idft(f_ishift)

img_back=cv2.magnitude(img_back[:,:,0],img_back[:,:,1])

#結(jié)果展示

img_back=255*cv2.normalize(img_back,None,norm_type=cv2.NORM_MINMAX,dtype=cv2.CV_32F)#標準化

result=np.hstack((img,img_back.astype(np.uint8)))

cv2.imshow("result",result)

cv2.waitKey(0)

cv2.destroyAllWindows()

輸出結(jié)果:

獲取高頻

importnumpyasnp

importcv2

#讀取圖片,并轉(zhuǎn)換成灰度圖

img=cv2.imread("Mona_Lisa.jpg",cv2.IMREAD_GRAYSCALE)

print(img.dtype)#unit8數(shù)據(jù)類型

#轉(zhuǎn)換成np.float32

img_float32=np.float32(img)

print(img_float32.dtype)#float32數(shù)據(jù)類型

#傅里葉變換

dft=cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT)

#中心轉(zhuǎn)換,將低頻挪到中心

dft_shift=np.fft.fftshift(dft)

#獲取幅度譜

magnitude_spectrum=20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))

#幅度譜展示

combine=np.hstack((img,magnitude_spectrum.astype(np.uint8)))

cv2.imshow("combine",combine)

cv2.waitKey(0)

cv2.destroyAllWindows()

#獲取中心位置

rows,cols=img.shape

crow,ccol=int(rows/2),int(cols/2)

#高通濾波

mask=np.ones((rows,cols,2),np.uint8)

mask[crow-30:crow+30,ccol-30:ccol+30]=0

fshidt=dft_shift*mask

f_ishift=np.fft.ifftshift(fshidt)

#傅里葉逆變換,獲取高頻圖像

img_back=cv2.idft(f_ishift)

img_back=cv2.magnitude(img_back[:,:,0],img_back[:,:,1])

#結(jié)果展示

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論