Python OpenCV 影像處理:傅立葉轉換

►前言

上篇介紹基於計算影像的梯度,通過在影像中找到梯度值的變化來識別邊緣。

本篇將介紹傅立葉變換的基本原理,了解傅立葉變換是如何將影像從空間域轉換到頻率域的,以及為什麼這種轉換在影像處理過程中是有用的。以及傅立葉變換的實際應用,展示傅立葉變換在影像去雜訊、影像增強和影像壓縮等方面的應用。

並透過程式碼的說明,讓各位了解OpenCV Python於圖像處理上的基本操作。

傅立葉變換定義

傅立葉變換是一種將訊號從時間域或空間域轉換到頻率域的數學工具。它可以用來分析各種濾波器的頻率特性。對於影像,可以使用二維離散傅立葉變換 (DFT)來尋找頻率域。

正弦波訊號 x(t) = A sin(2πft),可以說  f是訊號的頻率,採用其頻域可以看到一個尖峰f,如果訊號被取樣形成離散訊號,我們會得到相同的頻域。也可以將影像視為在兩個方向上(x, y )取樣的訊號,通過傅立葉變換來分析評頻率成分。

一維離散傅立葉變換如下:

 
►傅立葉變換定義

OpenCV 提供了 cv2.dft() 和 cv2.idft() 函數來計算離散傅立葉變換(DFT)和逆離散傅立葉變換。這些函數可以用於圖像的頻域分析和處理。

1.頻域濾波 - 低通濾波器來平滑圖像


2.高通濾波器來強化圖像中的邊緣和細節


3.傅立葉變換來去除圖像中的週期性噪聲




常見應用

  1. 噪聲去除:在頻域中去除特定頻率成分來減少圖像中的噪聲。
  2. 邊緣檢測:通過頻域濾波來強調圖像中的邊緣。
  3. 圖像壓縮:在頻域中對圖像進行壓縮以減少數據量。

小結

透過以上講解,搭配程式碼進行範例講解,相信各位對於圖像上的傅立葉轉換應用能有更深刻的理解,期待下一篇博文吧!

Q&A

問題一:在頻域中如何進行濾波操作?

在頻域中進行濾波操作通常涉及創建適當的濾波器(如低通、高通或帶阻濾波器),並將其應用於傅立葉變換後的圖像。濾波器掩碼可以設計為在頻域中屏蔽或保留特定的頻率成分。

問題二:如何顯示傅立葉變換的結果?

傅立葉變換的結果可以通過計算頻譜幅值來顯示。這通常涉及使用 cv2.magnitude() 函數計算幅值,然後使用對數變換來增強顯示效果。

問題三:為什麼要使用 np.fft.fftshift() 和 np.fft.ifftshift()?

np.fft.fftshift() 函數將頻譜的零頻率成分移到中心,使得頻域分析更直觀。相應地,np.fft.ifftshift() 將其移回原位,以便進行逆傅立葉變換。這些操作有助於更容易地應用和可視化濾波器。

問題四:如何在頻域中去除特定頻率的噪聲?

要在頻域中去除特定頻率的噪聲,可以創建一個帶阻濾波器(Band Stop Filter)來屏蔽這些頻率。這涉及手動設置一個掩碼來屏蔽特定的頻率點,然後將濾波器應用到傅立葉變換後的圖像。

問題五:如何將頻域中的處理結果轉換回空間域?

在頻域中進行處理後,需要使用逆傅立葉變換(IDFT)將結果轉換回空間域。這通常包括使用 np.fft.ifftshift() 將頻譜移回原位,然後使用 cv2.idft() 計算逆傅立葉變換。

►參考資料

OpenCV - Open Computer Vision Library

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論