转载http://blog.csdn.net/suky520/article/details/18669477
在源代码中,compile.m文件的作用,主要是将lk.cpp ,tld.cpp,fern.cpp, linkagemex.cpp, bb_overlap.cpp, warp.cpp, distance.cpp,
转换为:lk.mexw64, fern.mexw64, linkagemex.mexw64, bb_overlap.mexw64,warp.mexw64, distance.mexw64
bb_overlap.cpp
/边框盒子的重叠(两个盒子的四个角进行判断)
double bb_overlap(double *bb1, double *bb2) {}
void mexFunction(int nlhs,mxArray *plhs[], int nrhs, const mxArray *prhs[])
{}
distance.cpp
大概就是要计算相关性和欧几里得距离
//相关性
// correlation
double ccorr(double*f1,double *f2,int numDim) {}
//相关性归一化
// correlation normalized
double ccorr_normed(double*f1,double *f2,int numDim) {} //f1=[1,2,3], f2=[4,5,6] f1*f2
//欧几里得距离
// euclidean distance
double euclidean(double*f1,double *f2,int numDim) {} //向量f1=[1,2,3,2],向量f2=[4,5,6,7]→D(a,b)=sqrt((1-4)^2+(2-5)^2+..+(2-7)^2)
//distance.cpp的输入口函数
void mexFunction(int nlhs,mxArray *plhs[], int nrhs, const mxArray *prhs[])
fern.cpp
//nlhs:输出参数个数;plhs:输出参数指针;nrhs:输入参数个数;prhs:输入参数指针
void mexFunction(int nlhs,mxArray *plhs[], int nrhs, const mxArray *prhs[])
{}
linkagemex.cpp
//目的:创建一个层次聚类树
template
void mexLinkageTEMPLATE(
//左手边
//右手边
int nlhs, /* Number ofleft hand side (output) arguments */
mxArray *plhs[], /* Array of left handside (output) arguments */
int nrhs, /* Number ofright hand side (input) arguments */
const mxArray *prhs[],/* Array of right hand side (input)arguments */
int call_pdist,
TEMPL classDummy
){}
//主函数入口
void mexFunction( /* GATEWAY FUNCTION */
int nlhs, /* Number ofleft hand side (output) arguments */
mxArray *plhs[], /* Array of left handside (output) arguments */
int nrhs, /* Number ofright hand side (input) arguments */
const mxArray *prhs[] /* Array of right hand side (input)arguments */
)
{
...
/* call the TEMPLATE function */
//如何输入的第一个参数为double类型
if (mxIsDouble(prhs[0]))
//执行模板函数
mexLinkageTEMPLATE(nlhs,plhs,nrhs,prhs,(nrhs==3),(double)(1.0));
else
//如果不是double类型,single
mexLinkageTEMPLATE(nlhs,plhs,nrhs,prhs,(nrhs==3),(float )(1.0));
}
lk.cpp
首次出现了Opencv的东西
功能:大概是把matlab图像转换为opencv能处理的图像,然后利用光流法跟踪,也有模板匹配。
//从matlab中加载图像到 image
void loadImageFromMatlab(const mxArray *mxImage, IplImage *image)
//欧几里得距离的计算
void euclideanDistance (CvPoint2D32f *point1, CvPoint2D32f *point2, float *match, int nPts)
//交叉相关:cross - correlation
void normCrossCorrelation
//lk.cpp的入口行数
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[]){}
tld.cpp
warp.cpp
设置感兴趣区域,并且转换为matlab格式的图像数据
//设置图像的感兴趣区域
voidwarp_image_roi(unsigned char *image, int w, int h, double *H,
double xmin, double xmax,double ymin, double ymax,
double fill, double*result)
//将图像转换为matlab表示的图像
mxArray*to_matlab(const double *image, int num_cols, int num_rows)
{}
//warp.cpp的输入口函数
void mexFunction(int nlhs, mxArray *plhs [], int nrhs, const mxArray *prhs [])
{ …
//转换为matlab类型的的图像数据输出
plhs[0]=to_matlab(result,(int)(xmax-xmin+1), (int)(ymax-ymin+1));
}
其实下面两个文件并没有使用到哦。
ii.cpp文件:
得到积分图像
void mexFunction(intnlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
ii2.cpp文件:
得到积分图像
void mexFunction(intnlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])