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()

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

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378688.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378688.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378688.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java中訪問修飾符_Java中的非訪問修飾符是什么?

java中訪問修飾符Java非訪問修飾符 (Java non access modifiers) We have 7 non-access modifiers in Java. The name of these non-access modifiers are given below, Java中有7個非訪問修飾符 。 這些非訪問修飾符的名稱如下所示: native 本機 synchronized 已同…

mui實現分享功能_MUI 分享功能(微信、QQ 、朋友圈)

配置文件:manifest.jsonplus ->plugins 下邊"share": {/*配置應用使用分享功能,參考http://ask.dcloud.net.cn/article/27*/"qq": {"appid": "",/*騰訊QQ開放平臺申請應用的AppID值*/"description"…

Java 注解學習筆記

轉自:http://wanqiufeng.blog.51cto.com/409430/458883 一、什么是java注解 注解,顧名思義,注解,就是對某一事物進行添加注釋說明,會存放一些信息,這些信息可能對以后某個時段來說是很有用處的。 Java注解又叫java標注…

Prime Palindromes

博客園速度非常不穩定,可能要考慮換地方了。雖然我非常喜歡博客園的模板和氣氛。 這個題早就知道是怎么做的了。先求出回文數在再判斷是不是素數。關鍵是不知道區間,那就把所有的全部求出來。雖然可能會超時,但是如果使用點技巧的話還是沒問題…

Opencv——DFT變換(實現兩個Mat的卷積以及顯示Mat的頻域圖像)

DFT原理:(單變量離散傅里葉變換) 數學基礎: 任何一個函數都可以轉換成無數個正弦和余弦函數的和的形式。 通常觀察傅里葉變換后的頻域函數可以獲得兩個重要的信息:幅頻曲線和相頻曲線。 在數字圖像處理中的作用&#…

python方法items_Python字典items()方法與示例

python方法items字典items()方法 (Dictionary items() Method) items() method is used to get the all items as a view object, the view object represents the key-value pair of the dictionary. items()方法用于獲取所有項目作為視圖對象,該視圖對象表示字典的…

基于(Python下的OpenCV)圖像處理的噴墨墨滴形狀規范檢測

通過圖像處理,分析數碼印花的噴頭所噴出來的墨滴形狀,與標準墨滴形狀對比分析,來判斷墨水及其噴頭設備的狀態,由兩部分構成 PS:獲取墨滴形狀照片和標準墨滴形狀照片都是手繪的,將就的看吧,主要…

const_iterator,const 迭代器

const 迭代器:是迭代器產量,該迭代器的值不能被修改,且需要初始化,初始化之后不能指向其他元素。const_iterator:當我們對const_iterator類型解引用時,返回一個const值,所以只能讀,不能寫。它是一種迭代器…

臨時禁止令:諾西購摩托羅拉面臨流產窘境?

近日,美國伊利諾伊州北區法院就中國華為起訴摩托羅拉公司和諾西一案作出初步裁決,禁止摩托羅拉解決方案公司(Motorola Solutions)向諾西披露華為的機密資料。此判決一出,各方評論紛沓而來。筆者認為,從諾西12以美元并購摩托羅拉部…

mysql replace into 語法_mysql Replace into與Insert update

Replace intoreplace into 跟 insert 功能類似,不同點在于:replace into 首先嘗試插入數據到表中,1. 如果發現表中已經有此行數據(根據主鍵或者唯一索引判斷)則先刪除此行數據,然后插入新的數據。2. 否則,直接插入新數…

微機原理——指令系統——傳送類指令(MOV、LEA、LDS、LES、LAHF、SAHF、XCHG、XLAT、PUSH、POP、PUSHF、POPF)

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 【沒事兒可以到我主頁看看】https://blog.csdn.net/qq_42604176 傳送類指令1&…

lastindexof方法_Java Vector lastIndexOf()方法與示例

lastindexof方法向量類別的lastIndexOf()方法 (Vector Class lastIndexOf() method) Syntax: 句法: public int lastIndexOf (Object ob);public int lastIndexOf (Object ob, int indices);lastIndexOf() method is available in java.util package. lastIndexOf(…

李開復:微博的價值在哪里

導讀:微博可以改變社會現象,可以傳播信息,可以幫助你成長,可以發出你的聲音。它讓我們能夠人人成為記者,讓每一個轉發的人都變成了一個編輯 很多人問微博是搶了誰的生意,開心網還是人人網?其實它…

mysql 任務計劃 /etc/cron.d_Linux /etc/cron.d增加定時任務

一般情況下我們添加計劃任務時,都是直接修改/etc/crontab。但是,不建議這樣做,/etc/cron.d目錄就是為了分項目設置計劃任務而創建的。例如,增加一項定時的備份任務,我們可以這樣處理:在/etc/cron.d目錄下新…

19-Harris角點檢測

角點檢測顧名思義,就是對類似頂點的檢測,與邊緣有所區別 邊緣可能在某一方向上變化不是特別明顯,但角點在任何方向上變換都很明顯 cv2.cornerHarris(img,blockSize,ksize,k) cv2.cornerHarris(gray,2,3,0.04) 參數一:img&#xff…

微機原理——指令系統——算數運算指令(ADD、ADC、SUB、SBB、INC、DEC、NEG、CMP、MUL、IMUL、DIV、IDIV、CBW、CWD、BCD調整)

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 算數運算指令1、加減法指令ADD、ADC 、SUB 、SBB 和增量減量指令INC、DEC、NEGADD…

linux系統出現Too many open files 錯誤、linux too many open files

故障一、linux too many open files linux系統出現Too many open files 錯誤,這是因為文件描述符大小不夠,或者有不正常的網絡連接(Socket也是一種特殊的文件)、文件IO沒有關閉并釋放出文件描述符(文件句柄,File Operator&#xf…

精通init ramfs構建

一、init ramfs是什么   在2.6版本的linux內核中,都包含一個壓縮過的cpio格式的打包文件。當內核啟動時,會 從這個打包文件中導出文件到內核的rootfs文件系統,然后內核檢查rootfs中是否包含有init文件,如果有則執行它&#xff0…

python 示例_帶有示例的Python date isocalendar()方法

python 示例Python date.isocalendar()方法 (Python date.isocalendar() Method) date.isocalendar() method is used to manipulate objects of date class of module datetime. date.isocalendar()方法用于操作模塊datetime的日期類的對象。 It uses a date class object a…

mysql 函數重載_[賦值]函數,變量,重載 ,_第1頁_169IT

[java/j2ee] java實現簡單的給sql語句賦值的示例代碼本身很簡單。拼接sql的時候?不好數,簡單的用來賦值。代碼如下:/** * TODO 循環賦值,缺少的類型可隨時添加 * author Lucius * param pt * param list * throws SQLException */ public static…