1. 程式人生 > >0022-在OpenCV環境下做影象或矩陣的傅立葉變換

0022-在OpenCV環境下做影象或矩陣的傅立葉變換

傅立葉變換的概念在《高等數學》、《訊號與系統》、《數字訊號處理》中都有詳細的原理說明,網上也有一大堆文章解釋其原理。這裡我就不多說了,總之它是把訊號變換到三角函式系裡,實際上是域的變換,至於變換有什麼好處,其實就是從另一個角度觀察同一個訊號。對影象的傅立葉變換實際上是一個二維傅立葉變換。OpenCV提供了函式dft來作傅立葉變換,這個函式的使用方法很簡單,大家看了程式碼便知道怎麼用了。
程式碼如下
程式碼中用到的影象下載連結:http://pan.baidu.com/s/1kV89yXT 密碼:6blt
 

//opencv版本:OpenCV3.0
//VS版本:VS2013
//Author:qxsf321.net

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>    
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>

#include <iostream>

using namespace cv;
using namespace std;

int main()
{
 //這個程式的完整程式碼請搜尋公眾號"qxsf321",關注後回覆0022即可獲取
 //這個程式的完整程式碼請搜尋公眾號"qxsf321",關注後回覆0022即可獲取
 //這個程式的完整程式碼請搜尋公眾號"qxsf321",關注後回覆0022即可獲取

}


程式碼說明
getOptimalDFTSize函式用於計算影象作傅立葉變換的最佳尺寸,在這種尺寸下,演算法計算速度最快。類似的原理大家可以搜尋下“FFT”,即快速傅立葉變換。
注意:傅立葉變換的結果為複數,有實部,有虛部,所以需要用二維矩陣儲存結果,兩個維度分別儲存實部和虛部。
copyMakeBorder函式的原型如下
C++: void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar() )
引數意義就不介紹了,大家看原型並結合程式碼就知道怎麼用了。
其它要說明的都通過註釋寫在程式碼中了


執行結果截圖如下

結果說明:頻譜圖中越亮的部分代表影象的灰度值變化越劇烈。