opencv学习笔记22:傅里叶变换,高通滤波,低通滤波
傅里葉變換原理
任何連續的周期信號,都可以由一組適當的正弦曲線組合而成。
下列左上圖由其他三圖構成。
左圖經過傅里葉變換,由時域圖轉換到頻域圖。相互可逆
相位:不是同時開始的一組余弦函數,在疊加時要體現剛開始的時間。
sin(wx+a)中a是相位
numpy實現傅里葉變換
numpy.fft.fft2()
實現傅里葉變換,返回的是一個復數數組。
numpy.fft.fftshift()
將零頻域分量移到頻譜中心
白色為fft.fft2得到的低頻部分。將低頻部分移到中心。
20*np.log(np.abs(fshift))
傅里葉得到有負數數據,重新設置頻譜的范圍如【0-255】,否則圖像無法展示。
傅里葉變換能得到高頻,低頻信息。針對低頻,高頻處理能得到不同的目的。
傅里葉變換是可逆的,逆傅里葉變換能得到原始圖像。
在頻域對圖像進行處理后,在頻域處理的結果能反映到逆傅里葉變換圖像上。
numpy實現逆傅里葉變換
numpy.fft.ifftshift()
numpy.fft.fftshift()的逆操作
numpyfft.ifft2().
逆傅里葉變換
iimg = np.abs(逆傅里葉變換結果)
逆傅里葉變換也有負數,調整至的范圍為[0-255}
高通濾波,低通濾波
低頻對應圖像中變化緩慢的灰度分量,例如在一幅草原圖上,低頻對應著廣袤的顏色趨于一致額草原。
高頻對應著圖像內變化越來越快的灰度分量,是由灰度的過度尖銳造成的。如對應草原圖中獅子的邊緣信息。
濾波
接受或者拒絕一定頻率的分量
通過低頻的濾波器叫低通濾波器
通過高頻的濾波器叫高通濾波器
頻域濾波
修改傅里葉變換達到特殊目的,然后計算IDFT返回圖像域
特殊目的:圖像增強,圖像去噪,邊緣檢測,特征提取,壓縮,加密等。
低通濾波:衰減高頻通低頻,會模糊一張圖。
高通濾波:衰減低頻通高頻,增強圖像尖銳細節,但是會造成圖像對比度下降。
高通濾波numpy實現
高通濾波:將頻譜圖像的中心的位置區域設置為0(中心部位為低頻,之前傅里葉變換將低頻移到中心位置啦,由前文得知低頻為白色)
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('lena.bmp',0) f = np.fft.fft2(img) fshift = np.fft.fftshift(f) rows, cols = img.shape crow,ccol = int(rows/2) , int(cols/2) fshift[crow-30:crow+30, ccol-30:ccol+30] = 0 ishift = np.fft.ifftshift(fshift) iimg = np.fft.ifft2(ishift) iimg = np.abs(iimg) plt.subplot(121),plt.imshow(img, cmap = 'gray') plt.title('original'),plt.axis('off') plt.subplot(122),plt.imshow(iimg, cmap = 'gray') plt.title('iimg'),plt.axis('off') plt.show()opencv實現傅里葉變換
返回結果=cv2.dft(原始圖像,轉換標識)
返回結果:是雙通道的,第一個為結果的實數部分。第二個為結果的虛數部分。
原始圖像:要求圖像格式是np.float32。得首先轉換np.float32(img)
轉換標識: 一般使用flags = cv2.DFT_COMPLEX_OUTPUT,輸出的是一個復數陣列。
numpy.fft.fftshift(dft)
仍然使用這個將頻破譜譜圖像低頻移到中心位置
返回值=cv2.magnitude(參數1,參數2)
使用這個函數將數值轉換到8位數值形式(圖像形式)
result = 20*np.log(cv2.magnitude(dftShift[:,:,0],dftShift[:,:,1]))
使用這個將值轉換到【0-255】
opencv實現逆傅里葉變換
返回結果=cv2.idft(原始數據)
cv2.dft()的逆操作.
返回結果:取決于原始數據的類型和大小。
原始數據:實數或者復數均可。
返回值=cv2.magnitude(參數1,參數2)
使用這個將值轉換到【0-255】即把這個數值轉換到8位數值形式
ishift = np.fft.ifftshift(dftShift)
將中間低頻部分,移動會原處。numpy.fft.fftshift(dft)的逆操作
低通濾波opencv實現
前面實現了高通濾波
這里實現低通濾波。用opencv。也可以用numpy,參考前面高通濾波numpy實現.
低頻是大量細節,高頻是邊緣。
低通濾波:相當于把下面右圖中心部分白色保留,周圍黑色舍棄。
實現方法
低通濾波器構造
總目錄鏈接:
python3+opencv學習筆記匯總目錄(適合基礎入門學習)
電氣專業的計算機小白,寫博文不容易。如果你覺得本文不錯。請點個贊支持下。謝謝
總結
以上是生活随笔為你收集整理的opencv学习笔记22:傅里叶变换,高通滤波,低通滤波的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么设置U盘启动不显示U盘 U盘设置启动
- 下一篇: 36篇博文带你学完opencv :pyt