estimateWorldCameraPose & cameraPoseToExtrinsics(matlab)与solvepnp(opencv)区别

opencv以python下的opencv3.4.2为例(ps.opencv高版本部分函数要收费使用,俺就降低版本了)

前言

位姿估计任务当中,pnp方法是一项重要且经典的位姿估计方法,可以通过寻找二维图像和三维世界点对来结算相机位姿。

鄙人曾经用过matlab和opencv的pnp,发现两个版本下的pnp方法有细微不同(这个不同也折磨了鄙人很久!!!),当时没有在csdn中找到介绍相关问题的帖子,特此分享给大家。

先上链接:
个人感觉这个说的不错,github issues讨论
matlab estimateWorldCameraPose函数
matlab cameraPoseToExtrinsics函数
opencv solvepnp和solvepnpRansac

正文

matlab和opencv(以python为例)区别一:

matlab结果按行存储,opencv的结果按列存储,所以,相同的矩阵,matlab结果,其旋转矩阵需要进行转置才能转化为opencv的结果(平移矩阵不需要转置)。

matlab和opencv(以python为例)区别二:

matlab计算的结果,是在原始坐标系绕z旋转180°后再进行旋转平移的,所以matlab旋转矩阵在进行转置后需要前两行取反(即再绕z轴旋转180°),相应的平移向量前两个元素也要取反。

matlab和opencv(以python为例)区别三:

因为前面的区别,导致相机和世界坐标系rt矩阵求取方法也不同
matlab 的 estimateWorldCameraPose函数和opencv的solvepnp函数得到的结果都是m2c矩阵,即世界坐标系下的坐标系左乘该矩阵的标准形式得到该点在相机坐标系下的坐标。
若想得到c2m矩阵,opencv下

c2m_ROpencv = r.T
c2m_TOpencv = np.dot(-r.T,t)

c2m_RMatlab = r.T
c2m_TMatlab = np.dot(-t,r.T)

注:.T是转置操作,np.dot是矩阵相乘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值