0022-在OpenCV環境下做影象或矩陣的傅立葉變換
阿新 • • 發佈:2018-11-16
傅立葉變換的概念在《高等數學》、《訊號與系統》、《數字訊號處理》中都有詳細的原理說明,網上也有一大堆文章解釋其原理。這裡我就不多說了,總之它是把訊號變換到三角函式系裡,實際上是域的變換,至於變換有什麼好處,其實就是從另一個角度觀察同一個訊號。對影象的傅立葉變換實際上是一個二維傅立葉變換。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() )
引數意義就不介紹了,大家看原型並結合程式碼就知道怎麼用了。
其它要說明的都通過註釋寫在程式碼中了
執行結果截圖如下:
結果說明:頻譜圖中越亮的部分代表影象的灰度值變化越劇烈。