日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

18-傅里叶变化

發布時間:2023/12/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 18-傅里叶变化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以時間為參照就是時域分析,當然時間是動態變化的
而傅里葉變換是以頻域為基準的,不用關心動態變化,只關心做了多少次而已,次數,頻率
傅里葉說過,任何一個周期函數都可以用正弦函數堆疊起來形成。強吧?
傅里葉變換思想

傅里葉變換的作用

高頻:變化劇烈的灰度分量,比如邊界
低頻:變化緩慢的灰度分量,比如一個池塘里面水(非邊界)

濾波

低通濾波器:只保留低頻(低通:低頻通過),會使得圖像模糊
高通濾波器:只保留高頻(高通:高頻通過),會使得圖像細節增強

opencv中主要就是cv2.dft()和cv2.idft(),輸入圖像需要先轉換成np.float32格式
得到的結果中頻率為0的部分會在左上角,通常要轉換到中心位置,可以通過shift變換來實現
cv2.dft()返回的結果是雙通道的(實部和虛部),通常還需轉換成圖像格式才能展示(0,255)

低頻濾波效果展示

import cv2 import numpy as np from matplotlib import pyplot as pltdef show_photo(name,picture):#圖像顯示函數cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',0)img_float32 = np.float32(img)#將圖片轉換格式,opencv官方要求的dft = cv2.dft(img_float32,flags = cv2.DFT_COMPLEX_OUTPUT)#傳入圖片,執行傅里葉變換 dft_shift = np.fft.fftshift(dft)#將低頻值轉換到中間位置顯示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()

左圖為原圖
右圖為低通濾波之后的結果,這里通過shift將最低頻移動到中心位置了,越離中心越近越低頻,越遠離中心越高頻

低通濾波器

高頻過濾,低頻保留,效果會變模糊

import cv2 import numpy as np from matplotlib import pyplot as pltdef show_photo(name,picture):#圖像顯示函數cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',0)img_float32 = np.float32(img)dft = cv2.dft(img_float32,flags = cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft)rows,cols = img.shape#獲取圖像的shape值daxiao,[h,w] crow,ccol = int(rows/2),int(cols/2)#中心位置 強轉成int要不然容易報錯#獲取掩模 mask = np.zeros((rows,cols,2),np.uint8)#低通濾波 mask[crow-30:crow+30,ccol-30:ccol+30] = 1#只有中心位置是1,其他的都是0#DFT是原圖變成濾波之后的圖像 #IDFT傅里葉逆變換,往原始圖像變換 fshift = dft_shift * mask#將掩模和圖像進行結合,不在掩模范圍內置為0變黑,在掩模范圍內保持不變 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()

左圖為原圖
右圖為低通濾波之后的圖像(圖像會相對模糊因為只保留了低頻)

高通濾波器

與低通濾波器類似,把低通濾波后的中間位置去掉,因為中間位置顯示的是低頻,剩下的就是高頻

import cv2 import numpy as np from matplotlib import pyplot as pltdef show_photo(name,picture):#圖像顯示函數cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',0)img_float32 = np.float32(img)dft = cv2.dft(img_float32,flags = cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft)rows,cols = img.shape crow,ccol = int(rows/2),int(cols/2)mask = np.ones((rows,cols,2),np.uint8)#掩模中是1的全都保留原始數據 mask[crow-30:crow+30,ccol-30:ccol+30] = 0#中間位置置為0,也就是中間位置不要了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()

左圖為原圖
右圖為高通濾波后的效果(因為高頻保留了,也就是邊緣都保留下來了)

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的18-傅里叶变化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。