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

Python?OpenCV實現圖像傅里葉變換

 更新時間:2022年01月23日 09:16:32   作者:小白YouCans  
傅里葉變換,也稱作傅立葉變換,表示能將滿足一定條件的某個函數表示成三角函數(正弦和/或余弦函數)或者它們的積分的線性組合。本文將介紹如何通過OpenCV實現圖像的傅里葉變換,需要的可以參考一下

二維離散傅里葉變換(DFT)

對于二維圖像處理,通常使用 x , y x, yx,y 表示離散的空間域坐標變量,用 u , v u,vu,v 表示離散的頻率域變量。二維離散傅里葉變換(DFT)和反變換(IDFT)為:

二維離散傅里葉變換也可以用極坐標表示:

傅里葉頻譜(Fourier spectrum)為:

傅里葉相位譜(Fourier phase spectrum)為:

傅里葉功率譜(Fourier power spectrum)為:

空間取樣和頻率間隔是相互對應的,頻率域所對應的離散變量間的間隔為:Δu=1/MΔT, Δυ=1/NΔZ。即:頻域中樣本之間的間隔,與空間樣本之間的間隔及樣本數量的乘積成反比。

空間域濾波器和頻率域濾波器也是相互對應的,二維卷積定理是在空間域和頻率域濾波之間建立等價關系的紐帶:

這表明 F 和 H 分別是 f 和 h 的傅里葉變換;f 和 h 的空間卷積的傅里葉變換,是它們的變換的乘積。

OpenCV 實現圖像傅里葉變換(cv.dft)

使用 OpenCV 中的 cv.dft() 函數也可以實現圖像的傅里葉變換,cv.idft() 函數實現圖像傅里葉逆變換。

函數說明:

cv.dft(src[, dst[, flags[, nonzeroRows]]]) → dst
cv.idft(src[, dst[, flags[, nonzeroRows]]]) → dst

參數說明:

src:輸入圖像,單通道灰度圖像,使用 np.float32 格式

dst:輸出圖像,圖像大小與 src 相同,數據類型由 flag 決定

flag:轉換標識符

cv.DFT_INVERSE:用一維或二維逆變換取代默認的正向變換

cv.DFT_SCALE:縮放比例標識,根據元素數量求出縮放結果,常與DFT_INVERSE搭配使用

cv.DFT_ROWS: 對輸入矩陣的每行進行正向或反向的傅里葉變換,常用于三維或高維變換等復雜操作

cv.DFT_COMPLEX_OUTPUT:對一維或二維實數數組進行正向變換,默認方法,結果是由 2個通道表示的復數陣列,第一通道是實數部分,第二通道是虛數部分

cv.DFT_REAL_OUTPUT:對一維或二維復數數組進行逆變換,結果通常是一個尺寸相同的復數矩陣

注意事項:

1.輸入圖像 src 是 np.float32 格式,如圖像使用 np.uint8 格式則必須先轉換 np.float32 格式。

2.默認方法 cv.DFT_COMPLEX_OUTPUT 時,輸入 src 是 np.float32 格式的單通道二維數組,輸出 dst 是 2個通道的二維數組,第一通道 dft[:,:,0] 是實數部分,第二通道 dft[:,:,1] 是虛數部分。

3.不能直接用于顯示圖像。可以使用 cv.magnitude() 函數將傅里葉變換的結果轉換到灰度 [0,255]。

4.idft(src, dst, flags) 等價于 dft(src, dst, flags=DFT_INVERSE)。

5.OpenCV 實現傅里葉變換,計算速度比 Numpy 更快。

轉換標識符為 cv.DFT_COMPLEX_OUTPUT 時,cv.dft() 函數的輸出是 2個通道的二維數組,使用 cv.magnitude() 函數可以實現計算二維矢量的幅值 。

函數說明:

cv.magnitude(x, y[, magnitude]) → dst

參數說明:

x:一維或多維數組,也表示復數的實部,浮點型

y:一維或多維數組,也表示復數的虛部,浮點型,數組大小必須與 x 相同

dst:輸出數組,數組大小和數據類型與 x 相同,運算公式為:

傅里葉變換及相關操作的取值范圍可能不適于圖像顯示,需要進行歸一化處理。 OpenCV 中的 cv.normalize() 函數可以實現圖像的歸一化。

函數說明:

cv.normalize(src, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]) → dst

參數說明:

src:輸入圖像

dst:輸出結果,與輸入圖像同尺寸同類型

alpha:歸一化后的最小值,可選項,默認值為0

beta:歸一化后的最大值,可選項,默認值為1

norm_type:歸一化類型

  • NORM_INF:Linf 范數(絕對值的最大值)
  • NORM_L1:L1 范數(絕對值的和)
  • NORM_L2:L2 范數(歐幾里德距離),默認類型
  • NORM_MINMAX:線性縮放,常用類型

dtype:可選項,默認值 -1,表示輸出矩陣與輸入圖像類型相同

mask:掩模遮罩,可選項,默認無遮罩

傅里葉變換在理論上需要O(MN)²次運算,非常耗時;快速傅里葉變換只需要O(MN㏒(MN)) 次運算就可以完成。

OpenCV 中的傅里葉變換函數 cv.dft() 對于行數和列數都可以分解為2^p*3^q*5^r的矩陣的計算性能最好。為了提高運算性能,可以對原矩陣的右側和下方補 0,以滿足該分解條件。OpenCV 中的 cv.getOptimalDFTSize() 函數可以實現圖像的最優(yōu) DFT 尺寸擴充,適用于 cv.dft() 和 np.fft.fft2()。

函數說明:

cv.getOptimalDFTSize(versize) → retval

參數說明:

versize:數組大小

retval:DFT 擴充的最優(yōu)數組大小

示例代碼

    # 8.11:OpenCV 實現二維圖像的離散傅里葉變換
    imgGray = cv2.imread("../images/Fig0424a.tif", flags=0)  # flags=0 讀取為灰度圖像

    # cv2.dft 實現圖像的傅里葉變換
    imgFloat32 = np.float32(imgGray)  # 將圖像轉換成 float32
    dft = cv2.dft(imgFloat32, flags=cv2.DFT_COMPLEX_OUTPUT)  # 傅里葉變換
    dftShift = np.fft.fftshift(dft)  # 將低頻分量移動到頻域圖像的中心

    # 幅度譜
    # ampSpe = np.sqrt(np.power(dft[:,:,0], 2) + np.power(dftShift[:,:,1], 2))
    dftAmp = cv2.magnitude(dft[:,:,0], dft[:,:,1])  # 幅度譜,未中心化
    dftShiftAmp = cv2.magnitude(dftShift[:,:,0], dftShift[:,:,1])  # 幅度譜,中心化
    dftAmpLog = np.log(1 + dftShiftAmp)  # 幅度譜對數變換,以便于顯示
    # 相位譜
    phase = np.arctan2(dftShift[:,:,1], dftShift[:,:,0])  # 計算相位角(弧度制)
    dftPhi = phase / np.pi*180  # 將相位角轉換為 [-180, 180]

    print("dftMag max={}, min={}".format(dftAmp.max(), dftAmp.min()))
    print("dftPhi max={}, min={}".format(dftPhi.max(), dftPhi.min()))
    print("dftAmpLog max={}, min={}".format(dftAmpLog.max(), dftAmpLog.min()))

    # cv2.idft 實現圖像的逆傅里葉變換
    invShift = np.fft.ifftshift(dftShift)  # 將低頻逆轉換回圖像四角
    imgIdft = cv2.idft(invShift)  # 逆傅里葉變換
    imgRebuild = cv2.magnitude(imgIdft[:,:,0], imgIdft[:,:,1])  # 重建圖像

    plt.figure(figsize=(9, 6))
    plt.subplot(231), plt.title("Original image"), plt.axis('off')
    plt.imshow(imgGray, cmap='gray')
    plt.subplot(232), plt.title("DFT Phase"), plt.axis('off')
    plt.imshow(dftPhi, cmap='gray')
    plt.subplot(233), plt.title("Rebuild image with IDFT"), plt.axis('off')
    plt.imshow(imgRebuild, cmap='gray')
    plt.subplot(234), plt.title("DFT amplitude spectrum"), plt.axis('off')
    plt.imshow(dftAmp, cmap='gray')
    plt.subplot(235), plt.title("DFT-shift amplitude"), plt.axis('off')
    plt.imshow(dftShiftAmp, cmap='gray')
    plt.subplot(236), plt.title("Log-trans of DFT amp"), plt.axis('off')
    plt.imshow(dftAmpLog, cmap='gray')
    plt.tight_layout()
    plt.show()

到此這篇關于Python OpenCV實現圖像傅里葉變換的文章就介紹到這了,更多相關Python OpenCV傅里葉變換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 跟老齊學Python之編寫類之三子類

    跟老齊學Python之編寫類之三子類

    本文已經是編寫類系列的第三篇了,也是最后一篇,介紹下子類,也算是個小總結吧,有需要的朋友可以參考下
    2014-10-10
  • 記錄一下scrapy中settings的一些配置小結

    記錄一下scrapy中settings的一些配置小結

    這篇文章主要介紹了記錄一下scrapy中settings的一些配置小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • python實現圖片批量剪切示例

    python實現圖片批量剪切示例

    這篇文章主要介紹了python實現圖片批量剪切示例,需要的朋友可以參考下
    2014-03-03
  • Python內置函數Type()函數一個有趣的用法

    Python內置函數Type()函數一個有趣的用法

    這篇文章主要介紹了Python內置函數Type()函數一個有趣的用法,本文講解的是個人發(fā)現在的一個有趣的用法,注意這種寫法會導致代碼很難讀,需要的朋友可以參考下
    2015-02-02
  • python實現定時壓縮指定文件夾發(fā)送郵件

    python實現定時壓縮指定文件夾發(fā)送郵件

    這篇文章主要為大家詳細介紹了python實現定時壓縮指定文件夾發(fā)送郵件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 在Apache服務器上同時運行多個Django程序的方法

    在Apache服務器上同時運行多個Django程序的方法

    這篇文章主要介紹了在Apache服務器上同時運行多個Django程序的方法,Django是Python各色高人氣web框架中最為著名的一個,需要的朋友可以參考下
    2015-07-07
  • Python中的logging模塊實現日志打印

    Python中的logging模塊實現日志打印

    這篇文章主要介紹了Python中的logging模塊實現日志打印,其實不止print打印日志方便排查問題,Python自帶的logging模塊,也可以很簡單就能實現日志的配置和打印,下面來看看具體的實現過程吧,需要的朋友可以參考一下
    2022-03-03
  • Django + Uwsgi + Nginx 實現生產環(huán)境部署的方法

    Django + Uwsgi + Nginx 實現生產環(huán)境部署的方法

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比較常見的一種方式。這篇文章主要介紹了Django + Uwsgi + Nginx 實現生產環(huán)境部署,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python小程序編程實現一鍵自動整理文件解壓文件

    Python小程序編程實現一鍵自動整理文件解壓文件

    這篇文章主要為大家介紹了Python小程序編程實現一鍵自動整理文件解壓文件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Python 文件和輸入輸出小結

    Python 文件和輸入輸出小結

    Python 是面向對象編程語言,文件也是一種類,下面簡單介紹下,方便需要的朋友
    2013-10-10

最新評論

海城市| 那坡县| 江门市| 苍梧县| 瓦房店市| 河津市| 绥中县| 阿拉善盟| 盘锦市| 磴口县| 霍山县| 翁源县| 宜昌市| 南召县| 交口县| 乌拉特中旗| 兴义市| 巴彦县| 大厂| 江达县| 蒲江县| 长宁区| 离岛区| 陆丰市| 宝山区| 元阳县| 淮滨县| 呼图壁县| 老河口市| 游戏| 日喀则市| 华容县| 清徐县| 鄄城县| 静宁县| 莱阳市| 平利县| 文成县| 彰化县| 广昌县| 息烽县|