一种简单的位姿估计(PoseEstimation)计算方法
来源:互联网 发布:魔龙诀坐骑进阶数据 编辑:程序博客网 时间:2024/04/28 07:51
尊重作者脑力和体力劳动,转载请注明出处,谢谢。
位姿估计是计算机视觉领域一个基本问题。若已获得合作标志在摄像机坐标系下的坐标值,一般情况可采用奇异值分解或最小二乘的方法求解位姿信息中的旋转矩阵与平移矩阵,满足
其中下标
奇异值分解是很通用的一种算法,但还不够简单。
一般情况下得到
计算得到对应的特征点在摄像机坐标系下的坐标为
在物体坐标系下,合作标志中心点坐标应满足
系数
这就是合作目标中心的位置信息。特殊地,当合作标志特征点布置关于中心点对称且均匀分布时,位置信息为
姿态信息求解。
如图
同样,在解算获得的坐标中建立
设摄像机坐标系到物体坐标系的旋转矩阵为
记
得到
故
现证明
假设
当特征点个数为
最终取
这样就获得了相对姿态信息。
优化:
1)在矩阵计算时,求逆运算比较麻烦,可通过设
将两个坐标系转换成正交坐标系,这样就可以用
2) 姿态信息用欧拉角时,用平均值代表真实值会产生较大误差,因为三角函数其本身非线性,因此在求平均前先将其转换到四元数空间,再进行平均,之后再转化到欧拉角,这样更加精确。
Matlab算法如下:
///////////////////////////////////////////////////////////// Company: NWPU// Engineer: LamberJee// Create Date: 16:16:21 03/21/2015 // Design Name: A method for PoseEstimation// Tool versions: Matlab-R2013a// Description: // Revision: beta_0.01// Additional Comments: ///////////////////////////////////////////////////////////function [Rp,tp] = CaculPose(Camerb,Object) XXc = Camerb; XXw = Object; n = size(XXw,2); Q = zeros(4,1); for i = 1:n if i == 1 || i == 2 continue end a1 = XXw(:,1)-XXw(:,i); a2 = XXw(:,2)-XXw(:,i); a3 = xcross(a1,a2); a4 = xcross(a2,a3); a2 = a2/norm(a2); a3 = a3/norm(a3); a4 = a4/norm(a4); A = [a4 a2 a3]; b1 = XXc(:,1)-XXc(:,i); b2 = XXc(:,2)-XXc(:,i); b3 = xcross(b1,b2); b4 = xcross(b2,b3); b2 = b2/norm(b2); b3 = b3/norm(b3); b4 = b4/norm(b4); B = [b4 b2 b3]; Ri = B * A'; Qi = quater(Ri); Q = Q + Qi; end Qp = Q /(n-2); Rp = Eler(Qp); t = zeros(3,1); for j = 1:n t = t + XXc(:,j); end tp = t / n;returnfunction c = xcross(a,b) c = [a(2)*b(3)-a(3)*b(2); a(3)*b(1)-a(1)*b(3); a(1)*b(2)-a(2)*b(1)]; return function Q = quater(R) r11 = R(1); r12 = R(4);r13 = R(7); r21 = R(2); r22 = R(5);r23 = R(8); r31 = R(3); r32 = R(6);r33 = R(9); q1 = 0.5*sqrt(1+r11+r22+r33); q2 = 0.25*(r32-r23)/q1; q3 = 0.25*(r13-r31)/q1; q4 = 0.25*(r21-r12)/q1; Q = [q1 q2 q3 q4]'; return function R = Eler(Q) q0 = Q(1);q1 = Q(2);q2 = Q(3);q3 = Q(4); r11 = (q0)^2+(q1)^2-(q2)^2-(q3)^2; r12 = 2*(q1*q2-q0*q3); r13 = 2*(q1*q3+q0*q2); r21 = 2*(q1*q2+q0*q3); r22 = (q0)^2-(q1)^2+(q2)^2-(q3)^2; r23 = 2*(q2*q3-q0*q1); r31 = 2*(q1*q3-q0*q2); r32 = 2*(q0*q1+q2*q3); r33 = (q0)^2-(q1)^2-(q2)^2+(q3)^2; R = [r11 r12 r13; r21 r22 r23; r31 r32 r33]; return
0 0
- 一种简单的位姿估计(PoseEstimation)计算方法
- 一种简单的图像白平衡计算方法
- 位姿估计_1
- 位姿估计_3
- 哈希值的简单计算方法
- mrp-材料毛需求的一种计算方法
- Unity 往复运动的一种计算方法
- 相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标
- 相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标_0
- 公历闰年的简单计算方法
- 公历闰年的简单计算方法
- 18位身份证校验位的计算方法
- 18位身份证校验位的计算方法
- 18位身份证校验位的计算方法
- 身份证第18位的计算方法
- ISBN 10位校验码的计算方法
- 位运算的某些快速计算方法
- 简单头部姿态的估计
- 二月二
- 命令模式代码
- machine_learning_ex3笔记
- POJ 题目Catch That Cow(BFS)
- Log4j的AsyncAppender能否提升性能?
- 一种简单的位姿估计(PoseEstimation)计算方法
- 协成wifi认证服务器在linux上搭建过程
- 3*4矩阵,求出最大的那个元素的值,以及其所在的行号和列号
- 藏身时间类中的妖孽
- 第二周项目四——图书馆的书
- IE8不支持jQuery问题
- 关于个人针对CSDN的使用看法
- linux properties 出现java.io.FileNotFoundException
- 单变量微积分(02):Derivatives, Slope, Velocity, and Rate of Change