icvGetRTMatrix是opencv2.4.3中求取仿射变换系数的函数,定义在lkpyramid函数中,在此给出此函数的详细注释。
static void
icvGetRTMatrix( const CvPoint2D32f* a, const CvPoint2D32f* b,
int count, CvMat* M, int full_affine )
{
// CvPoint2D32f是结构体
// a是待变换的图像中的特征点
// b是参考图像中的特征点,M是变换矩阵
if( full_affine )
{
//如果是全仿射变换,则仿射变换为:x'=m1*x+m2*y+m3,y'=m4*x+m5*y+m6,共有6个系数需求解
double sa[36], sb[6];
CvMat A = cvMat( 6, 6, CV_64F, sa ), B = cvMat( 6, 1, CV_64F, sb ); //CvMat是结构体(opencv2refman55页),函数cvMat给其成员赋值
CvMat MM = cvMat( 6, 1, CV_64F, M->data.db ); // M->data.db是64位浮点型指针,指向M中的数据首地址
int i;
memset( sa, 0, sizeof(sa) ); //将sa对应的内存块初始化为0
memset( sb, 0, sizeof(sb) );
//这里要解Ax=B,即x中有6个仿射系数要求解,本来需要3对点的坐标就够了,但输入的a和b中可能不止3个点,因此需要将点坐标做一些相加和同乘\
某系数的处理,以使得所有的点之构建出6个方程求解6个未知仿射系数
fo