chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Numpy和OpenCV實現(xiàn)傅里葉和逆傅里葉變換

新機器視覺 ? 來源:CSDN ? 作者:暴風雨中的白楊 ? 2022-07-05 16:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

文章從實際出發(fā),講述了什么是傅里葉變換,它的理論基礎(chǔ)以及Numpy和OpenCV實現(xiàn)傅里葉和逆傅里葉變換,并最終用高通濾波和低通濾波的示例。

1. 什么是傅里葉變換及其基礎(chǔ)理論

1.1傅里葉變換

圖像處理一般分為直接對圖像內(nèi)的像素進行處理的空間域處理和頻率域處理。

空間域處理主要劃分為灰度變換和空間濾波兩種形式。

灰度變換是對圖像內(nèi)的單個像素進行處理,比如調(diào)節(jié)對比度和處理閾值等。

空間濾波涉及圖像質(zhì)量的改變,例如圖像平滑處理??臻g域處理的計算簡單方便,運算速度更快。

頻率域處理是先將圖像變換到頻率域,然后在頻率域?qū)D像進行處理,最后再通過反變換將圖像從頻率域變換到空間域。

1.2基礎(chǔ)理論

時間差,在傅里葉變換里就是相位。相位表述的是與時間差相關(guān)的信息。

在圖像處理過程中,傅里葉變換就是將圖像分解為正弦分量和余弦分量兩部分,即將圖像從空間域轉(zhuǎn)換到頻域。

數(shù)字圖像經(jīng)過傅里葉變換后,得到的頻域值是復數(shù)。因此,顯示傅里葉變換的結(jié)果需要使用實數(shù)圖像(real image)加虛數(shù)圖像(complex image),或者幅度圖像(magnitude image)加相位圖像(phase image)的形式。因為幅度圖像包含了原圖像中我們所需要的大部分信息,所以在圖像處理過程中,通常僅使用幅度圖像。

如果希望先在頻域內(nèi)對圖像進行處理,再通過逆傅里葉變換得到修改后的空域圖像,就必須同時保留幅度圖像和相位圖像。對圖像進行傅里葉變換后,會得到圖像中的低頻和高頻信息。低頻信息對應圖像內(nèi)變化緩慢的灰度分量。高頻信息對應圖像內(nèi)變化越來越快的灰度分量,是由灰度的尖銳過渡造成的。

傅里葉變換的目的,就是為了將圖像從空域轉(zhuǎn)換到頻域,并在頻域內(nèi)實現(xiàn)對圖像內(nèi)特定對象的處理,然后再對經(jīng)過處理的頻域圖像進行逆傅里葉變換得到空域圖像。

2. Numpy實現(xiàn)傅里葉和逆傅里葉變換

2.1Numpy實現(xiàn)傅里葉變換

Numpy模塊中的fft2()函數(shù)可以實現(xiàn)圖像的傅里葉變換。

Numpy提供的實現(xiàn)傅里葉變換的函數(shù)是numpy.fft.fft2(),它的語法格式是:

返回值 = numpy.fft.fft2(原始圖像)

參數(shù)“原始圖像”的類型是灰度圖像,函數(shù)的返回值是一個復數(shù)數(shù)組(complex ndarray)。經(jīng)過該函數(shù)的處理,就能得到圖像的頻譜信息。此時,圖像頻譜中的零頻率分量位于頻譜圖像(頻域圖像)的左上角。

為了便于觀察,通常會使用numpy.fft.fftshift()函數(shù)將零頻率成分移動到頻域圖像的中心位置。函數(shù)numpy.fft.fftshift()的語法格式是:

返回值=numpy.fft.fftshift(原始頻譜)

為了顯示為圖像,需要將它們的值調(diào)整到[0, 255]的灰度空間內(nèi),使用的公式為:

像素新值=20*np.log(np.abs(頻譜值))

用Numpy實現(xiàn)傅里葉變換,觀察得到的頻譜圖像。

import cv2 import numpy as np import matplotlib.pyplot as plt
img=cv2.imread('./img/hand1.png',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('original') plt.axis('off') plt.subplot(122) plt.imshow(magnitude_spectrum, cmap = 'gray') plt.title('result') plt.axis('off') plt.show()

2.2 實現(xiàn)逆傅里葉變換

注意: 如果在傅里葉變換過程中使用了numpy.fft.fftshift()函數(shù)移動零頻率分量,那么在逆傅里葉變換過程中,需要先使用numpy.fft.ifftshift()函數(shù)將零頻率分量移到原來的位置,再進行逆傅里葉變換

函數(shù)numpy.fft.ifftshift()是numpy.fft.fftshift()的逆函數(shù),其語法格式為:

調(diào)整后的頻譜 = numpy.fft.ifftshift(原始頻譜)

numpy.fft.ifft2()函數(shù)可以實現(xiàn)逆傅里葉變換,返回空域復數(shù)數(shù)組。

它是numpy.fft.fft2()的逆函數(shù),該函數(shù)的語法格式為:

返回值=numpy.fft.ifft2(頻域數(shù)據(jù))

函數(shù)numpy.fft.ifft2()的返回值仍舊是一個復數(shù)數(shù)組(complex ndarray)。

逆傅里葉變換得到的空域信息是一個復數(shù)數(shù)組,需要將該信息調(diào)整至[0, 255]灰度空間內(nèi),使用的公式為:

iimg = np.abs(逆傅里葉變換結(jié)果)

在Numpy內(nèi)實現(xiàn)傅里葉變換、逆傅里葉變換,觀察逆傅里葉變換的結(jié)果圖像。

import cv2 import numpy as np import matplotlib.pyplot as plt
img = cv2.imread('./img/hand1.png',0) f = np.fft.fft2(img) fshift = np.fft.fftshift(f)
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()

2.3高通濾波示例

一幅圖像內(nèi),同時存在著高頻信號和低頻信號。

低頻信號對應圖像內(nèi)變化緩慢的灰度分量。例如,在一幅大草原的圖像中,低頻信號對應著顏色趨于一致的廣袤草原。高頻信號對應圖像內(nèi)變化越來越快的灰度分量,是由灰度的尖銳過渡造成的。如果在上面的大草原圖像中還有一頭獅子,那么高頻信號就對應著獅子的邊緣等信息。

濾波器能夠允許一定頻率的分量通過或者拒絕其通過,按照其作用方式可以劃分為低通濾波器和高通濾波器。

允許低頻信號通過的濾波器稱為低通濾波器。低通濾波器使高頻信號衰減而對低頻信號放行,會使圖像變模糊。允許高頻信號通過的濾波器稱為高通濾波器。高通濾波器使低頻信號衰減而讓高頻信號通過,將增強圖像中尖銳的細節(jié),但是會導致圖像的對比度降低。

傅里葉變換可以將圖像的高頻信號和低頻信號分離。通過對圖像的頻域處理,可以實現(xiàn)圖像增強、圖像去噪、邊緣檢測、特征提取、壓縮和加密等操作。

在Numpy內(nèi)對圖像進行傅里葉變換,得到其頻域圖像。然后,在頻域內(nèi)將低頻分量的值處理為0,實現(xiàn)高通濾波。最后,對圖像進行逆傅里葉變換,得到恢復的原始圖像。

import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('./img/hand1.png',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()

3.OpenCV實現(xiàn)傅里葉和逆傅里葉變換及低通濾波示例

3.1 OpenCV實現(xiàn)傅里葉變換

OpenCV提供了函數(shù)cv2.dft()和cv2.idft()來實現(xiàn)傅里葉變換和逆傅里葉變換

函數(shù)cv2.dft()的語法格式為:

返回結(jié)果=cv2.dft(原始圖像,轉(zhuǎn)換標識)

在使用該函數(shù)時,需要注意參數(shù)的使用規(guī)范:對于參數(shù)“原始圖像”,要首先使用np.float32()函數(shù)將圖像轉(zhuǎn)換成np.float32格式。“轉(zhuǎn)換標識”的值通常為“cv2.DFT_COMPLEX_OUTPUT”,用來輸出一個復數(shù)陣列。

函數(shù)cv2.dft()返回的結(jié)果與使用Numpy進行傅里葉變換得到的結(jié)果是一致的,但是它返回的值是雙通道的,第1個通道是結(jié)果的實數(shù)部分,第2個通道是結(jié)果的虛數(shù)部分。

經(jīng)過函數(shù)cv2.dft()的變換后,得到了原始圖像的頻譜信息。此時,零頻率分量并不在中心位置,為了處理方便需要將其移至中心位置,可以用函數(shù)numpy.fft.fftshift()實現(xiàn)。

例如,如下語句將頻譜圖像dft中的零頻率分量移到頻譜中心,得到了零頻率分量位于中心的頻譜圖像dftshift。

dftShift = np.fft.fftshift(dft)

經(jīng)過上述處理后,頻譜圖像還只是一個由實部和虛部構(gòu)成的值。要將其顯示出來,還要做進一步的處理才行。

函數(shù)cv2.magnitude()可以計算頻譜信息的幅度。該函數(shù)的語法格式為:

返回值=cv2.magnitude(參數(shù)1,參數(shù)2)

參數(shù)1:浮點型x坐標值,也就是實部。參數(shù)2:浮點型y坐標值,也就是虛部,它必須和參數(shù)1具有相同的size

函數(shù)cv2.magnitude()的返回值是參數(shù)1和參數(shù)2的平方和的平方根,公式為:

得到頻譜信息的幅度后,通常還要對幅度值做進一步的轉(zhuǎn)換,以便將頻譜信息以圖像的形式展示出來。簡單來說,就是需要將幅度值映射到灰度圖像的灰度空間[0, 255]內(nèi),使其以灰度圖像的形式顯示出來。

這里使用的公式為:

result = 20*np.log(cv2.magnitude(實部,虛部))
import numpy as np import cv2 img = cv2.imread('./img/hand1.png',0) dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT) print(dft) dftShift = np.fft.fftshift(dft) print(dftShift) result = 20*np.log(cv2.magnitude(dftShift[:, :,0], dftShift[:, :,1])) #兩個參數(shù),需要拆分通道print(result)
用OpenCV函數(shù)對圖像進行傅里葉變換,并展示其頻譜信息。
import numpy as np import cv2 import matplotlib.pyplot as plt
img=cv2.imread('./img/hand1.png',0)dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT) dftShift = np.fft.fftshift(dft) result = 20*np.log(cv2.magnitude(dftShift[:, :,0], dftShift[:, :,1])) plt.subplot(121), plt.imshow(img, cmap = 'gray') plt.title('original'), plt.axis('off') plt.subplot(122), plt.imshow(result, cmap = 'gray') plt.title('result'), plt.axis('off') plt.show()

3.2實現(xiàn)逆傅里葉變換

在OpenCV中,使用函數(shù)cv2.idft()實現(xiàn)逆傅里葉變換,該函數(shù)是傅里葉變換函數(shù)cv2.dft()的逆函數(shù)。其語法格式為:

返回結(jié)果=cv2.idft(原始數(shù)據(jù))

對圖像進行傅里葉變換后,通常會將零頻率分量移至頻譜圖像的中心位置。如果使用函數(shù)numpy.fft.fftshift()移動了零頻率分量,那么在進行逆傅里葉變換前,要使用函數(shù)numpy.fft.ifftshift()將零頻率分量恢復到原來位置。

注意: 在進行逆傅里葉變換后,得到的值仍舊是復數(shù),需要使用函數(shù)cv2.magnitude()計算其幅度。

用OpenCV函數(shù)對圖像進行傅里葉變換、逆傅里葉變換,并展示原始圖像及經(jīng)過逆傅里葉變換后得到的圖像。

import numpy as np import cv2 import matplotlib.pyplot as plt
img=cv2.imread('./img/hand1.png',0)dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT) dftShift = np.fft.fftshift(dft)
ishift=np.fft.ifftshift(dftShift)iImg = cv2.idft(ishift) iImg= cv2.magnitude(iImg[:, :,0], iImg[:, :,1]) # 計算幅度plt.subplot(121), plt.imshow(img, cmap = 'gray') plt.title('original'), plt.axis('off') plt.subplot(122), plt.imshow(iImg, cmap = 'gray') plt.title('inverse'), plt.axis('off') plt.show()

3.3低通濾波示例

在一幅圖像內(nèi),低頻信號對應圖像內(nèi)變化緩慢的灰度分量。圖像進行低通濾波后會變模糊

實現(xiàn)的中間步驟

rows, cols = img.shape crow, ccol = int(rows/2) , int(cols/2) mask = np.zeros((rows, cols,2), np.uint8) # 二維的原因,有實部和虛部 mask[crow-30:crow+30, ccol-30:ccol+30,:] = 1

然后,將其與頻譜圖像進行運算,實現(xiàn)低通濾波。這里采用的運算形式是:

fShift = dftShift*mask

使用函數(shù)cv2.dft()對圖像進行傅里葉變換,得到其頻譜圖像。然后,在頻域內(nèi)將其高頻分量的值處理為0,實現(xiàn)低通濾波。最后,對圖像進行逆傅里葉變換,得到恢復的原始圖像。

import numpy as np import cv2 import matplotlib.pyplot as plt img = cv2.imread('./img/hand1.png',0) dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT) dftShift = np.fft.fftshift(dft)
rows, cols = img.shape crow, ccol = int(rows/2) , int(cols/2) mask = np.zeros((rows, cols,2), np.uint8) #兩個通道,與頻域圖像匹配 mask[crow-30:crow+30, ccol-30:ccol+30,:] = 1 fShift = dftShift*mask ishift = np.fft.ifftshift(fShift) iImg = cv2.idft(ishift) iImg= cv2.magnitude(iImg[:, :,0], iImg[:, :,1])
plt.subplot(121), plt.imshow(img, cmap = 'gray') plt.title('original'), plt.axis('off') plt.subplot(122), plt.imshow(iImg, cmap = 'gray') plt.title('inverse'), plt.axis('off') plt.show()
經(jīng)過低通濾波后,圖像的邊緣信息被削弱了。

審核編輯:郭婷


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 濾波
    +關(guān)注

    關(guān)注

    10

    文章

    699

    瀏覽量

    57813
  • 頻率
    +關(guān)注

    關(guān)注

    4

    文章

    1580

    瀏覽量

    61698

原文標題:圖像處理:使用Numpy和OpenCV實現(xiàn)傅里葉和逆傅里葉變換

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    數(shù)學-級數(shù)的推導

    本篇摘錄“信號與系統(tǒng)3-傅里葉變換與頻域分析”的小部分內(nèi)容,作為正弦波生成的級數(shù)展開法的補充。 1、矢量的正交分解 兩矢量V1與V2正交,夾角為90°,那么兩正交矢量的 內(nèi)積為零
    的頭像 發(fā)表于 10-09 10:23 ?22次閱讀
    數(shù)學-<b class='flag-5'>傅</b><b class='flag-5'>里</b><b class='flag-5'>葉</b>級數(shù)的推導

    知識分享-信號帶寬與上升時間的關(guān)系

    信號完整性揭秘-于博士SI設(shè)計手記2.6信號帶寬與上升時間的關(guān)系2.4節(jié)已經(jīng)說明了由信號的頻譜可以得到時域波形,實質(zhì)上是變換過程,只不過對于周期信號來說,這一
    的頭像 發(fā)表于 08-15 17:56 ?861次閱讀
    知識分享-信號帶寬與上升時間的關(guān)系

    如何使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)?

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤使用樹莓派與OpenCV實現(xiàn)面部和運動追
    的頭像 發(fā)表于 08-14 17:45 ?933次閱讀
    如何使用樹莓派與<b class='flag-5'>OpenCV</b><b class='flag-5'>實現(xiàn)</b>面部和運動追蹤的云臺系統(tǒng)?

    傅里葉變換的原理及應用

    01什么是傅里葉變換?一句話概括:“把復雜信號拆成多個簡單正弦波的疊加。”就像把一道混合光分解成彩虹(七色光),傅里葉變換能把任何波動信號(聲音、圖像、電磁波等)拆解成不同頻率的“正弦波”組合。02
    的頭像 發(fā)表于 06-30 09:54 ?4393次閱讀
    <b class='flag-5'>傅里葉變換</b>的原理及應用

    VirtualLab:光柵的優(yōu)化與分析

    的算法: TEA和FMM(也稱為RCWA)。比較了不同周期的兩種類型的光柵(正弦和閃耀)結(jié)果。 傾斜光柵的參數(shù)優(yōu)化及公差分析 以模態(tài)法(FMM)作為參數(shù)優(yōu)化的核心,設(shè)計了一個傾斜光柵來
    發(fā)表于 05-23 08:49

    VirtualLab 應用:薄元近似(TEA)與模態(tài)法(FMM)的光柵建模

    (General Grating Component)允許用戶在模擬中選擇不同的求解算法。用戶可以在嚴格的模態(tài)法(FMM)和近似,但更快的薄元近似(TEA)之間進行選擇。關(guān)于解算器的更多信息可以在這里找到
    發(fā)表于 05-22 08:56

    進群免費領(lǐng)FPGA學習資料!數(shù)字信號處理、傅里葉變換與FPGA開發(fā)等

    進群免費領(lǐng)FPGA學習資料啦!小編整理了數(shù)字信號處理、傅里葉變換與FPGA開發(fā)等FPGA必看資料,需要的小伙伴可以加小助手(微信:elecfans123)或進 QQ 群:913501156 群免費領(lǐng)
    發(fā)表于 04-07 16:41

    VirtualLab Fusion應用:非近軸衍射分束器的設(shè)計與優(yōu)化

    地介紹了這一部分。 非近軸衍射分束器的嚴格分析 采用模態(tài)法(FMM)對非近軸衍射分束器進行了嚴格的評價,該方法最初采用迭代傅里葉變換算法(IFTA)和薄元近似算法(TEA)進行
    發(fā)表于 03-10 08:56

    信號與系統(tǒng) MIT

    信號與系統(tǒng)的主要內(nèi)容有:線性時不變系統(tǒng),周期信號的級數(shù)表示,連線時間
    發(fā)表于 02-27 19:17

    VirtualLab Fusion案例:高NA單分子成像顯微鏡

    1.摘要 顯微術(shù)廣泛應用于單分子成像、表面等離子體觀測、光子晶體成像等領(lǐng)域。它使直接觀察空間頻率分布成為可能。在高NA
    發(fā)表于 01-15 09:39

    DFT與離散時間傅里葉變換的關(guān)系 DFT在無線通信中的應用

    DFT與離散時間傅里葉變換(DTFT)的關(guān)系 DFT(離散傅里葉變換)與DTFT(離散時間傅里葉變換)都是信號處理中的重要工具,用于將信號從時域轉(zhuǎn)換到頻域。它們之間存在一定的聯(lián)系和區(qū)別: 定義與對象
    的頭像 發(fā)表于 12-20 09:21 ?2477次閱讀

    傅立葉變換在機器學習中的應用 常見傅立葉變換的誤區(qū)解析

    存在的各種頻率,從而實現(xiàn)語音識別、音樂分類和降噪等任務。 圖像分析:通過傅里葉變換,可以從圖像中提取紋理和圖案信息,檢測邊緣、形狀和其他視覺特征,這對于圖像識別、對象檢測和圖像壓縮等任務至關(guān)重要。 時間序列分析 :
    的頭像 發(fā)表于 12-06 17:06 ?1477次閱讀

    傅立葉變換在圖像處理中的作用

    ,然后利用低通濾波器濾除高頻噪聲,再通過傅里葉變換將圖像轉(zhuǎn)換回空間域,從而實現(xiàn)圖像的去噪。 增強 :另一方面,圖像的邊緣也是高頻分量。為了增強圖像的邊緣,可以提取圖像的高頻分量,并適當?shù)貙⑵涮砑拥皆紙D像中,從
    的頭像 發(fā)表于 12-06 16:55 ?3045次閱讀

    傅立葉變換的基本概念 傅立葉變換在信號處理中的應用

    傅里葉變換的基本概念 傅里葉變換是一種數(shù)學變換,它能夠?qū)M足一定條件的某個函數(shù)表示成三角函數(shù)(正弦和/或余弦函數(shù))或者它們的積分的線性組合。這種變換在不同的研究領(lǐng)域有多種變體形式,如連
    的頭像 發(fā)表于 12-06 16:48 ?2304次閱讀