icvGetRTMatrix函数详细注释

icvGetRTMatrix是opencv2.4.3中的函数,用于计算仿射变换系数。该函数在lkpyramid中定义,通过构建特定的矩阵A和B来处理多个特征点,确保无论特征点数量如何,都能得到6*6的矩阵。尽管单个点的3个坐标对应等式相同,但所有点相加后等式变得不同,从而可以解出6个未知数的变换矩阵。对于非全仿射变换,只需求解4个系数。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值