opencv之離散傅利葉變換

2021-06-21 21:07:52 字數 2858 閱讀 1503

c++:intgetoptimaldftsize(intvecsize)

int cv::getoptimaldftsize( int size0 )

returnoptimaldftsizetab[b];

}

optimaldftsizetab定義在namespace cv中,裡邊的數值為2^x*3^y*5^z

static const int optimaldftsizetab = ;

copymakeborder

c++:void copymakeborder(inputarraysrc, outputarraydst, inttop, intbottom, intleft,intright, intbordertype, const scalar&value=scalar())

src: 源影象

dst: 目標影象,和源影象有相同的型別,dst.cols=src.cols+left+right; dst.rows=src.rows+dst.top+dst.bottom

top:

bottom:

left:

right: 以上四個引數指定了在src影象周圍附加的畫素個數。

bordertype: 邊框型別

value: 當bordertype==border_constant時需要指定該值。

#include #include#include#include using namespace cv;

using namespace std;

int main()

matsrc_gray;

cvtcolor(src,src_gray,cv_rgb2gray);//灰度影象做傅利葉變換

intm = getoptimaldftsize(src_gray.rows);//2,3,5的倍數有更高效率的傅利葉轉換

intn = getoptimaldftsize(src_gray.cols);

matdst;

///把灰度影象放在左上角,在右邊和下邊擴充套件影象,擴充套件部分填充為0;

copymakeborder(src_gray,dst,0,m-src_gray.rows,0,n-src_gray.cols,border_constant,scalar::all(0));

cout

mat completei;

merge(planes,2,completei);//把兩頁合成乙個2通道的mat

//對上邊合成的mat進行傅利葉變換,支援原地操作,傅利葉變換結果為複數。通道1存的是實部,通道2存的是虛部。

dft(completei,completei);

split(completei,planes);//把變換後的結果分割到各個陣列的兩頁中,方便後續操作

magnitude(planes[0],planes[1],planes[0]);//求傅利葉變換各頻率的幅值,幅值放在第一頁中。

matmagi = planes[0];

//傅利葉變換的幅度值範圍大到不適合在螢幕上顯示。高值在螢幕上顯示為白點,

//而低值為黑點,高低值的變化無法有效分辨。為了在螢幕上凸顯出高低變化的連續性,我們可以用對數尺度來替換線性尺度:

magi+= 1;

log(magi,magi);//取對數

magi= magi(rect(0,0,src_gray.cols,src_gray.rows));//前邊對原始影象進行了擴充套件,這裡把對原始影象傅利葉變換取出,剔除擴充套件部分。

//這一步的目的仍然是為了顯示。 現在我們有了重分布後的幅度圖,

//但是幅度值仍然超過可顯示範圍[0,1] 。我們使用 normalize() 函式將幅度歸一化到可顯示範圍。

normalize(magi,magi,0,1,cv_minmax);//傅利葉影象進行歸一化。

//重新分配象限,使(0,0)移動到影象中心,

//在《數字影象處理》中,傅利葉變換之前要對源影象乘以(-1)^(x+y)進行中心化。

//這是是對傅利葉變換結果進行中心化

**已上傳至gihub:opencv之離散傅利葉變換

Opencv離散傅利葉變換

include include includeusing namespace std using namespace cv int main mat compleximage merge plannes,2,compleximage 進行離散傅利葉變換 dft compleximage,comple...

OpenCV入門 離散的傅利葉變換

傅利葉變換 是指將影象拆解成正弦與余弦元素,也就是將圖由空間性轉換為頻率性。int getoptimaldftsize int vecsize 由輸入的向量大小取得最佳的dft 離散的傅利葉變換 大小 vecsize 輸入的向量大小 copymakeborder inputarray src,out...

opencv 19 離散傅利葉變換

離散傅利葉變換 discrete founer transform,縮寫為dft 是指傅利葉變換在時域和頻域上都呈現離散的形式,將時域訊號的取樣變換為在離散時間傅利葉變換 dtft 頻域的取樣。在形式上,變換兩端 時域和頻域上 的序列是有限長的,而實際上這兩組序列都應當被認為是離散週期訊號的主值序列...