資源簡介
MATLAB完成圖像匹配的代碼: 都是通過歸一化的傅里葉描述子,來完成圖像匹配,旋轉不變性,有一定的尺度,

代碼片段和文件信息
/*
?????輪廓數據提取示例程序
???
?Written?by?Mao?Y.Bin
?School?of?Automation?NJUST
?2010.12.13
?*/
#?include?“viLib.h“?//?包含頭文件
#?pragma?comment(?lib?“viLib.lib“?)?//?包含viLib.lib庫
//////////////////////////////////////////////////////////////////////
#?include?
#?include?
#include
#include?
#include?
#include
using?namespace?std;
const?double?pi?=?acos(-1.0);
//////////////////////////////////////////////////////////////////////
/*?
????輪廓數據讀取函數
輪廓數據以文本文件保存。
文件格式:
第1行:總數據點數
第2-n行:第一個點坐標,先x后y,中間以空格隔開
注意:輪廓數據文件中保存的輪廓點數,起始點和終止點是重合的,也就是起始
點保存了兩次,起始一次,結束一次。
?*/
/*?
????獲得輪廓數據文件中輪廓的總點數
輸入參數:
??char?*?filename:???文件名
輸出參數:
????????????無
返回值:
??輪廓總點數,若返回值?<=?0則表示讀取錯誤
?*/
int?GetContourInfo(?char?*?filename?)
{
FILE?*?fp;
int?N;
fp?=?fopen(?filename?“rt“?);
if?(?fp?==?NULL?)?return(?0?);
fscanf(?fp?“%d“?&N?);
fclose(?fp?);
return(?N?);
}
/*?
????讀入數據,返回值為讀入的總輪廓點數
輸入參數:
char?*?filename:???文件名
int?*?Contours:????輪廓點(大小為2N,N為輪廓點數)
???????????????????其中,偶數位置存x坐標,奇數位置存y坐標
輸出參數:
?????????????無
返回值:
輪廓總點數,若返回值?<=?0則表示讀取錯誤
?*/
int?ReadContourData(?char?*?filename?int?*?Contours?)
{
FILE?*?fp;
int?N?k?x?y;
fp?=?fopen(?filename?“rt“?);
if?(?fp?==?NULL?)?return(?0?);
fscanf(?fp?“%d“?&N?);
for?(?k?=?0;?k? {
fscanf(?fp?“%d?%d“?&x?&y?);
Contours[k*2]?=?x;
Contours[k*2+1]?=?y;
}
fclose(?fp?);
return(?N?);
}
void?DFT(int?Nint?*dataR?int?*dataIdouble?*ansRdouble?*ansIdouble?DFT=0)
{
int?k?n;
for(k=0; k<=N-1; k++)
{
if(DFT==1)?dataI[k]?=?-dataI[k];
ansR[k]?=?ansI[k]?=?0;
for(n=0; n<=N-1; n++)
{
double?tempRtempI;
double?cos_tap=cos(2*pi*k*n/N);
double?sin_tap=sin(2*pi*k*n/N);
if(DFT==1)
{
tempR?=?(dataR[n]*cos_tap+dataI[n]*sin_tap)/N;
ansR[k]?+=?tempR;
tempI?=?(dataR[n]*sin_tap-dataI[n]*cos_tap)/N;
ansI[k]?+=?tempI;
}
else
{
tempR?=?dataR[n]*cos_tap+dataI[n]*sin_tap;
ansR[k]?+=?tempR;
tempI?=?-(dataR[n]*sin_tap-dataI[n]*cos_tap);
ansI[k]?+=?tempI;
}
}//end?for2
}//end?for1
}//end?DFT
void?fourierdes(char*?filenamedouble*?dkint?NN)//歸一化傅里葉變換
{
????int?*?Contour2;
NN?=?GetContourInfo(?filename?);?//?獲得輪廓點數
int*?xx?=?new?int?[NN];
int*?yy?=?new?int?[NN];
double*?out1?=?new?double?[NN];
double*?out2?=?new?double?[NN];
if?(?NN?>?0?)
{
Contour2?=?new?int?[NN*2];
ReadContourData(?filename?Contour2?);?//?讀入輪廓點數據
for(int?i=0;i {
xx[i]=Contour2[i*2];
yy[i]=Contour2[i*2+1];
}
//dft并計算dk
DFT(NNxx?yyout1out20);
//歸一化傅里葉系數
double?f1=sqrt((out1[1]*out1[1])+(out2[1]*out2[1]));
for(int?i=1;i {
dk[i-1]=sqrt(double(out1[i]*out1[i])+double(out2[i]*out2[i]));
dk[i-1]=(double)dk[i-1]/(double)f1;
}
delete?[]?Contour2;
delete?[]?x
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????.CA....????448826??2011-01-04?20:37??110101338郭思郁作業1\110101338郭思郁作業1.pdf
????.CA....??????7714??2011-01-04?20:19??110101338郭思郁作業1\homework1\ContourRead.cpp
????.CA....??????3470??2010-12-14?21:40??110101338郭思郁作業1\homework1\ContourRead.dsp
????.CA....???????547??2010-12-14?21:44??110101338郭思郁作業1\homework1\ContourRead.dsw
????.CA....??14748672??2011-01-04?20:20??110101338郭思郁作業1\homework1\ContourRead.ncb
????.CA....?????48640??2010-12-14?21:44??110101338郭思郁作業1\homework1\ContourRead.opt
????.CA....??????1249??2010-12-14?21:44??110101338郭思郁作業1\homework1\ContourRead.plg
????.CA....???????887??2011-01-02?10:13??110101338郭思郁作業1\homework1\ContourRead.sln
????.CA..H.?????19968??2011-01-04?20:20??110101338郭思郁作業1\homework1\ContourRead.suo
????.CA....??????4901??2010-12-30?22:56??110101338郭思郁作業1\homework1\ContourRead.vcproj
????.CA....??????1490??2011-01-04?20:20??110101338郭思郁作業1\homework1\ContourRead.vcproj.YUYU.Administrator.user
????.CA....??????9374??2010-12-31?15:15??110101338郭思郁作業1\homework1\Debug\bat0.txt
????.CA....?????13114??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\BuildLog.htm
????.CA....????561664??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\ContourRead.exe
????.CA....???????406??2011-01-02?11:27??110101338郭思郁作業1\homework1\Debug\ContourRead.exe.em
????.CA....???????472??2011-01-02?11:27??110101338郭思郁作業1\homework1\Debug\ContourRead.exe.em
????.CA....???????381??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\ContourRead.exe.intermediate.manifest
????.CA....???1194372??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\ContourRead.ilk
????.CA....?????67671??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\ContourRead.obj
????.CA....???3468288??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\ContourRead.pdb
????.CA....??????8045??2010-12-14?18:51??110101338郭思郁作業1\homework1\Debug\flatfish0.txt
????.CA....???2420736??2009-12-22?15:55??110101338郭思郁作業1\homework1\Debug\FreeImage.dll
????.CA....??????5513??2010-12-14?18:51??110101338郭思郁作業1\homework1\Debug\hammer0.txt
????.CA....??????6539??2010-12-14?18:51??110101338郭思郁作業1\homework1\Debug\key0.txt
????.CA....????????69??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\mt.dep
????.CA....????486400??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\vc90.idb
????.CA....????233472??2011-01-04?20:19??110101338郭思郁作業1\homework1\Debug\vc90.pdb
????.CA....????102400??2010-09-02?11:10??110101338郭思郁作業1\homework1\Debug\viLib.dll
????.CA....?????27213??2010-07-06?17:55??110101338郭思郁作業1\homework1\viLib.h
????.CA....?????12098??2010-09-02?11:10??110101338郭思郁作業1\homework1\viLib.lib
............此處省略6個文件信息
評論
共有 條評論