當前位置:編程學習大全網 - 源碼下載 - 圖片處理-opencv-12.圖像傅裏葉變換

圖片處理-opencv-12.圖像傅裏葉變換

傅裏葉變換(Fourier Transform,簡稱FT)常用於數字信號處理,它的目的是將時間域上的信號轉變為頻率域上的信號。隨著域的不同,對同壹個事物的了解角度也隨之改變,因此在時域中某些不好處理的地方,在頻域就可以較為簡單的處理。同時,可以從頻域裏發現壹些原先不易察覺的特征。傅裏葉定理指出“任何連續周期信號都可以表示成(或者無限逼近)壹系列正弦信號的疊加。”

傅裏葉變換可以應用於圖像處理中,經過對圖像進行變換得到其頻譜圖。從譜頻圖裏頻率高低來表征圖像中灰度變化劇烈程度。圖像中的邊緣信號和噪聲信號往往是高頻信號,而圖像變化頻繁的圖像輪廓及背景等信號往往是低頻信號。這時可以有針對性的對圖像進行相關操作,例如圖像除噪、圖像增強和銳化等。

Numpy中的fft模塊,相關函數如下:

Numpy中的 FFT包提供了函數 np.fft.fft2()可以對信號進行快速傅裏葉變換,其函數原型如下所示,該輸出結果是壹個復數數組(Complex Ndarry)。

fft2(a, s=None, axes=(-2, -1), norm=None)

頻率分布圖譜,其中越靠近中心位置頻率越低,越亮(灰度值越高)的位置代表該頻率的信號振幅越大

傅裏葉逆變換,是傅裏葉變換的逆操作,將頻譜圖像轉換為原始圖像的過程。通過傅裏葉變換將轉換為頻譜圖,並對高頻(邊界)和低頻(細節)部分進行處理,接著需要通過傅裏葉逆變換恢復為原始效果圖。頻域上對圖像的處理會反映在逆變換圖像上,從而更好地進行圖像處理。

圖像逆傅裏葉變換主要使用的函數如下所示:

OpenCV 中相應的函數是cv2.dft()和用Numpy輸出的結果壹樣,但是是雙通道的。第壹個通道是結果的實數部分,第二個通道是結果的虛數部分,並且輸入圖像要首先轉換成 np.float32 格式。其函數原型如下所示:

dst = cv2.dft(src, dst=None, flags=None, nonzeroRows=None)

由於輸出的頻譜結果是壹個復數,需要調用cv2.magnitude()函數將傅裏葉變換的雙通道結果轉換為0到255的範圍。其函數原型如下:

cv2.magnitude(x, y)

OpenCV 中,通過函數cv2.idft()實現傅裏葉逆變換,其返回結果取決於原始圖像的類型和大小,原始圖像可以為實數或復數。其函數原型如下所示:

dst = cv2.idft(src[, dst[, flags[, nonzeroRows]]])

傅裏葉變換的目的並不是為了觀察圖像的頻率分布(至少不是最終目的),更多情況下是為了對頻率進行過濾,通過修改頻率以達到圖像增強、圖像去噪、邊緣檢測、特征提取、壓縮加密等目的。

過濾的方法壹般有三種:低通(Low-pass)、高通(High-pass)、帶通(Band-pass)。

高通濾波器是指通過高頻的濾波器,衰減低頻而通過高頻,常用於增強尖銳的細節,但會導致圖像的對比度會降低。該濾波器將檢測圖像的某個區域,根據像素與周圍像素的差值來提升像素的亮度。

低通濾波器是指通過低頻的濾波器,衰減高頻而通過低頻,常用於模糊圖像。低通濾波器與高通濾波器相反,當壹個像素與周圍像素的插值小於壹個特定值時,平滑該像素的亮度,常用於去燥和模糊化處理。

  • 上一篇:醫學圖像源代碼
  • 下一篇:為什麽我的環境變量裏面找不到classpath?
  • copyright 2024編程學習大全網