验证:相反的四元数代表同一个变换矩阵

这里给出验证例子和结果, 在C++ , open cv实现

Mat dcm2q(Mat R)
{
	CV_Assert(R.rows == 3 && R.cols == 3);
	Mat q(4, 1, CV_64FC1);
	// x,y,z,w的格式存储
	q.at<double>(3, 0) = -0.5*sqrt(1 + R.at<double>(0, 0) + R.at<double>(1, 1) + R.at<double>(2, 2));
	q.at<double>(0, 0) = 0.25*(R.at<double>(1, 2) - R.at<double>(2, 1)) / q.at<double>(3, 0);
	q.at<double>(1, 0) = 0.25*(R.at<double>(2, 0) - R.at<double>(0, 2)) / q.at<double>(3, 0);
	q.at<double>(2, 0) = 0.25*(R.at<double>(0, 1) - R.at<double>(1, 0)) / q.at<double>(3, 0);

	return q;

}

Mat qt2h(double *xd)
{
	Mat X(7, 1, CV_64FC1,xd);
	Mat Q(4, 1, CV_64FC1);
	Mat T(3, 1, CV_64FC1);
	X(Rect(0, 0, 1, 3)).copyTo(T);
	X(Rect(0, 3, 1, 4)).copyTo(Q);
//	cout << Q << endl << endl;
	Mat R = q2dcm(Q);
	Mat H(4, 4, CV_64FC1);
	R.copyTo(H(Rect(0, 0, 3, 3)));
	T.cop
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值