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

opencv python 傅里葉變換的使用

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

理論

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

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

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

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

Numpy中的傅里葉變換

np.fft.fft2()

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

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

一旦得到結(jié)果,零頻率分量(DC分量)將位于左上角。 如果要將其置于中心位置,則需要在兩個(gè)方向上將結(jié)果移動(dòng)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)在可以在頻域做一些運(yùn)算,比如高通濾波和重建圖像也就是找到逆DFT,只需用一個(gè)矩形窗口大小的60x60來移除低頻部分,使用np.fft.ifftshift()應(yīng)用反向移動(dòng),使DC組件再次出現(xiàn)在左上角,然后使用np.ifft2()函數(shù)找到反FFT,結(jié)果將會(huì)是一個(gè)復(fù)數(shù),可以取它的絕對(duì)值.

代碼:

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é)果表明,高通濾波是一種邊緣檢測(cè)操作.

OpenCV中的傅里葉變換

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

輸入圖像首先應(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(),它可以在一次拍攝中同時(shí)返回大小和相位.

現(xiàn)在我們要做的是逆DFT.這次我們將移除圖像中的高頻內(nèi)容,即我們將LPF應(yīng)用到圖像中.它實(shí)際上模糊了圖像.為此,我們先創(chuàng)建一個(gè)具有高值(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

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

相關(guān)文章

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

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

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

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

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

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

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

    Python中的變量與常量

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

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

    本文主要介紹了Python使用LRU緩存策略進(jìn)行緩存的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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的庫(kù)有很多,如HTMLParser、sgmllib、htmllib、BeautifulSoup、mxTidy、uTidylib等,這里介紹一下HTMLParser、BeautifulSoup等模塊
    2014-06-06
  • Django實(shí)現(xiàn)發(fā)送郵件功能

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

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

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

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

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

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

    python tkinter界面居中顯示的方法

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

最新評(píng)論

美姑县| 油尖旺区| 藁城市| 沅江市| 垫江县| 灵山县| 徐汇区| 榆中县| 榆树市| 乌拉特中旗| 山西省| 渑池县| 青川县| 手游| 绥德县| 莒南县| 伊吾县| 左云县| 沾化县| 南雄市| 安康市| 静宁县| 南部县| 商洛市| 湛江市| 万安县| 胶南市| 博野县| 易门县| 宾阳县| 密山市| 靖远县| 三门峡市| 金寨县| 温泉县| 蕲春县| 道真| 古丈县| 塔河县| 年辖:市辖区| 萍乡市|