/*相机和结构参数的束调整*使用稀疏的Levenberg-Marquardt**如果成功,返回迭代次数(>=0);如果失败,返回SBA_ERROR*/整型sba_motstr_levmar_x(const int n,/*点数*/const int ncon,/*不应修改其参数的点数(从第一个开始)。*假设i<ncon的所有B_ij(见下文)为零*/const int m,/*图像数量*/const int mcon,/*不应修改其参数的图像数(从第一个开始)。*假设j<mcon的所有A_ij(见下文)为零*/char*vmask,/*可见性掩码:如果点i在图像j中可见,vmask[i,j]=1,否则为0。nxm公司*/双*p,/*初始参数向量p0:(a1,…,am,b1,……,bn)。*aj是图像j参数,bi是第i个点参数,*尺寸m*cnp+n*pnp*/const int cnp,/*一个摄像头的参数数量;例如,欧几里德相机为6*/const int pnp,/*一个点的参数数量;例如,欧几里德点为3*/双*x,/*测量向量:(x_11^T,..x_1m^T,…,x_n1^T…x_nm^T)^T,其中*x _ij是第i个点在j-th图像上的投影。*注意:如果点i在图像j中不可见,则可能缺少一些x_ij;*请参阅vmask[i,j],最大大小n*m*mnp*/双*covx,/*测量协方差矩阵:,*其中,Sigma_x_ij是x_ii逐行存储的mnp x mnp协方差。如果没有,则设置为NULL*协方差估计可用(在这种情况下隐式使用单位矩阵)。*注:如果相应的x_ij也缺失,则特定的Sigma_x_ii缺失;*请参阅vmask[i,j],最大大小n*m*mnp*mnp*/const int mnp,/*每个测量的参数数量;通常为2*/void(*func)(双*p,结构sba_crsm*idxij,int*rcidxs,int*rcsubs,双*hx,void*adata),/*描述测量值的函数关系。给定一个参数向量p,*计算{x}测量值的预测。p是(m*cnp+n*pnp)x1,*{x}是(n*m*mnp)x1,最大值*rcidxs、rcsub是max(m,n)x 1,由调用者分配,可以使用*作为工作存储器*/void(*fjac)(双*p,结构sba_crsm*idxij,int*rcidxs,int*rcsubs,双*jac,void*adata),/*函数来计算稀疏雅可比dX/dp。*雅各布人以雅各布的形式返回*(dx_11/da_1,…,dx_1m/da_m,…,dx_n1/da_1,*dx_11/db_1。。。,dx_1m/db_1。。。,dx_n1/db_n。。。,dx_nm/db_n),或*(使用HZ符号),*jac=(A_11、B_11、…、A_1m、B_1m、…、A _n1、B_n1、……、A _nm、B_nm)*请注意,根据idxij,可能会缺少一些A_ij和B_ij。*还要注意,A_ij和B_ij分别是mnp x cnp和mnp x pnp矩阵。和*应按row-mahor顺序存储在jac中。*rcidxs、rcsub是max(m,n)x 1,由调用者分配,可以使用*作为工作存储器**如果为NULL,则雅可比矩阵由重复的函数调用和有限的*差异。这在计算上效率很低,因此不建议这样做。*/void*adata,/*指向可能附加数据的指针,未经解释传递给func,fjac*/const int itmax,/*I:最大迭代次数。itmax==0表示雅可比检验后立即返回*/const int verbose,/*I:verbosity*/常量双选项[SBA_OPTSSZ],/*I:最小。选项[\mu,\epsilon1,\epsion2,\epsi lon3,\epsic lon4]。分别为*初始\mu,||J^T e ||_inf,||dp||_2,||e||_2和(||e| |_2-|e_new||_2)/||e ||_2的停止阈值*/双信息[SBA_INFOSZ]/*O:关于最小化的信息。如果不在乎,则设置为NULL*info[0]=|e||2(在初始p处)。*信息[1-4]=[||e||_2,||J^T e ||_inf,||dp||_2、mu/max[J^T J]_ii],均按估算值计算。*info[5]=迭代次数,*info[6]=终止原因:1-被小梯度J^T e停止*2-被小dp停止*3-被itmax停止*4-被||e||2中的较小相对减少停止*5-被小||e||_2停止*6-试图增加阻尼的次数太多。增加亩重新启动*7-被无效(即NaN或Inf)“func”值停止;用户错误*info[7]=函数求值次数*info[8]=雅可比评估次数*info[9]=#求解的线性系统数,即减少错误的尝试次数*/)