最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

opencv python 傅里葉變換的使用

 更新時間:2018年07月21日 11:07:47   作者:sakurala  
這篇文章主要介紹了opencv python 傅里葉變換的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

理論

傅立葉變換用于分析各種濾波器的頻率特性,對于圖像,2D離散傅里葉變換(DFT)用于找到頻域.快速傅里葉變換(FFT)的快速算法用于計算DFT.

于一個正弦信號,x(t)=Asin(2πft),我們可以說 f 是信號的頻率,如果它的頻率域被接受,我們可以看到 f 的峰值.如果信號被采樣來形成一個離散信號,我們得到相同的頻率域,但是在[−π,π] or [0,2π]范圍內(nèi)是周期性的 (or [0,N] for N-point DFT).

可以將圖像視為在兩個方向上采樣的信號.因此,在X和Y方向上進(jìn)行傅里葉變換可以得到圖像的頻率表示.

更直觀的是,對于正弦信號,如果振幅在短時間內(nèi)變化得非???,你可以說它是一個高頻信號.如果它變化緩慢,它是一個低頻信號,可以把同樣的想法擴展到圖片上,邊和噪聲是圖像中的高頻內(nèi)容,如果振幅沒有很大的變化,那就是低頻分量.

Numpy中的傅里葉變換

np.fft.fft2()

第一個參數(shù)是輸入圖像,它是灰度圖像

第二個參數(shù)是可選的,它決定了輸出數(shù)組的大小,如果它大于輸入圖像的大小,則輸入圖像在計算FFT之前填充了0.如果它小于輸入圖像,輸入圖像將被裁剪,如果沒有參數(shù)傳遞,輸出數(shù)組的大小將與輸入相同.

一旦得到結(jié)果,零頻率分量(DC分量)將位于左上角。 如果要將其置于中心位置,則需要在兩個方向上將結(jié)果移動N2.np.fft.fftshift(),一旦你找到頻率變換,你就能找到大小譜.

代碼:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg',0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))

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

可以在中心看到更多的白色區(qū)域,表示低頻率的內(nèi)容更多.

現(xiàn)在可以在頻域做一些運算,比如高通濾波和重建圖像也就是找到逆DFT,只需用一個矩形窗口大小的60x60來移除低頻部分,使用np.fft.ifftshift()應(yīng)用反向移動,使DC組件再次出現(xiàn)在左上角,然后使用np.ifft2()函數(shù)找到反FFT,結(jié)果將會是一個復(fù)數(shù),可以取它的絕對值.

代碼:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg',0)

f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))

rows, cols = img.shape
crow,ccol = int(rows/2) , int(cols/2)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)


plt.subplot(221),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(222),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(223),plt.imshow(img_back)
plt.title('Result in JET'), plt.xticks([]), plt.yticks([])
plt.subplot(224),plt.imshow(img_back, cmap = 'gray')
plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])
plt.show()

結(jié)果表明,高通濾波是一種邊緣檢測操作.

OpenCV中的傅里葉變換

OpenCV提供了cv.dft()cv.idft()函數(shù).它返回與前面相同的結(jié)果,但是有兩個通道.第一個通道將會有結(jié)果的實部,第二個通道將會有一個虛部.

輸入圖像首先應(yīng)該轉(zhuǎn)換為np.float32

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg',0)


dft = cv2.dft(np.float32(img),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()

也可以使用cv.cartToPolar(),它可以在一次拍攝中同時返回大小和相位.

現(xiàn)在我們要做的是逆DFT.這次我們將移除圖像中的高頻內(nèi)容,即我們將LPF應(yīng)用到圖像中.它實際上模糊了圖像.為此,我們先創(chuàng)建一個具有高值(1)低頻率的掩模,即我們通過低頻內(nèi)容,而在高頻區(qū)域則是0。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg',0)

dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)

rows, cols = img.shape
crow,ccol = int(rows/2) , int(cols/2)

# create a mask first, center square is 1, remaining all zeros
mask = np.zeros((rows,cols,2),np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

# apply mask and inverse DFT
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('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()

NOTE:

OpenCV函數(shù)cv.dft()cv.idft()比Numpy函數(shù)更快.但是Numpy功能更加用戶友好.

Fourier Transform

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用python進(jìn)行文件操作

    利用python進(jìn)行文件操作

    這篇文章主要介紹了如何利用python進(jìn)行文件操作,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 使用Python的Django和layim實現(xiàn)即時通訊的方法

    使用Python的Django和layim實現(xiàn)即時通訊的方法

    這篇文章主要介紹了使用Python的Django和layim實現(xiàn)即時通訊的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • python實現(xiàn)小程序推送頁面收錄腳本

    python實現(xiàn)小程序推送頁面收錄腳本

    這篇文章主要介紹了python實現(xiàn)小程序推送頁面收錄腳本,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Python中的變量與常量

    Python中的變量與常量

    本文基于Python基礎(chǔ),主要介紹了Python基礎(chǔ)中變量和常量的區(qū)別,對于變量的用法做了詳細(xì)的講解,用豐富的案例 ,代碼效果圖的展示幫助大家更好理解,需要的朋友可以參考下
    2021-11-11
  • Python使用LRU緩存策略進(jìn)行緩存的方法步驟

    Python使用LRU緩存策略進(jìn)行緩存的方法步驟

    本文主要介紹了Python使用LRU緩存策略進(jìn)行緩存的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)

    python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)

    在python中能夠進(jìn)行html和xhtml的庫有很多,如HTMLParser、sgmllib、htmllib、BeautifulSoup、mxTidy、uTidylib等,這里介紹一下HTMLParser、BeautifulSoup等模塊
    2014-06-06
  • Django實現(xiàn)發(fā)送郵件功能

    Django實現(xiàn)發(fā)送郵件功能

    這篇文章主要介紹了Django實現(xiàn)發(fā)送郵件功能,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-07-07
  • Python學(xué)習(xí)之基礎(chǔ)語法介紹

    Python學(xué)習(xí)之基礎(chǔ)語法介紹

    大家好,本篇文章主要講的是Python學(xué)習(xí)之基礎(chǔ)語法介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 11個Python的循環(huán)技巧分享

    11個Python的循環(huán)技巧分享

    當(dāng)我們處理數(shù)據(jù)時,有時候需要創(chuàng)建多個列表以存儲不同類型或不同條件下的數(shù)據(jù),在Python中,我們可以利用循環(huán)來快速、高效地創(chuàng)建這些列表,本文將介紹如何使用循環(huán)在Python中創(chuàng)建多個列表,需要的可以參考下
    2024-04-04
  • python tkinter界面居中顯示的方法

    python tkinter界面居中顯示的方法

    今天小編就為大家分享一篇python tkinter界面居中顯示的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10

最新評論

巴彦淖尔市| 巴彦淖尔市| 社会| 来安县| 澎湖县| 宁化县| 会理县| 余姚市| 阿尔山市| 南溪县| 寿宁县| 辽宁省| 兰溪市| 萝北县| 夏邑县| 安福县| 邛崃市| 鸡东县| 汾阳市| 广东省| 西贡区| 连江县| 乐安县| 四平市| 淮阳县| 中西区| 新疆| 普格县| 孟州市| 天津市| 高雄市| 商都县| 瓦房店市| 巨野县| 广灵县| 虹口区| 高密市| 高碑店市| 余干县| 二连浩特市| 若尔盖县|