PNP问题-位姿估计方法梳理(pose estimation)

tags:
- 单目视觉
- 位姿测量

目标3D精确模型已知(建立2D-3D对应关系):

点特征

  • P3P问题

    • 基于针孔成像模型

      • Gao的方法(opencv emgucv)

      • Kneip 的 P3P 算法

      • 直接线性变换 (DLT)

      • EP3P(王平)

    • 通用相机模型 (GID)

      • 用在基于鱼眼镜头的测量,基于全向视觉传感器的测量

      • GID 模型解决问题的复杂度通常会较高,而测量精度却较低。

  • PNP问题

    • 迭代优化求解策略

      • 当前算法研究

        • SoftPOSIT算法

        • 正交迭代算法(LHM 或 OI),LHM 方法是最为优秀的迭代求解 PnP 问题的方法

        • 基于 Levenberg-Marquardt 迭代求解的方法

      • 优缺点

        • 迭代法相比于线性求解的方法,求解精度和稳定性都要高很多。

        • 迭代法不是闭式解,还有陷入局部最 优的危险,这将导致最终得到的结果不是真实所求的位姿值

        • 迭代法对初值的选取比较敏感

        • 空间参考点比较少或者参考点近似奇异的情况下,迭代法的精度和稳定性都表现较差

    • 非迭代求解策略

      • 基本原理

        • 通过对成像模型合理参数化和变形, 构建可以用于最优化求解的非线性方程组,然后通过矩阵合成的技术(Gröbner 基的方法)求解非线性方程组,最终得到完整的位姿参数闭合解。

      • 当前算法研究

        • 2013年提出的ASPnP 方法和 OPnP 方法(目前最优秀的)

          • 采用四元数来表示旋 转矩阵,通过旋转矩阵参数化来表示平移向量,得到可以全局优化的目标函数来构成多项式方 程组,最后通过矩阵合成技术(Gröbner 基的方法)来求解多项式方程组,得到最终的位姿值。

        • 2015年提出的optDLS方法

          • 通过对 OPnP 方法中的 优化目标函数添加新的约束条件,减少了 OPnP 算法求解过程中解的个数

      • 优缺点

        • 抗干扰能力差

        • 位姿求解精度差

  • 依赖目标点纹理信息,易受纹理、光照、噪声等影响

线特征

  • P3L问题

  • PNL问题

    • 线性求解方法

      • 直接最小二乘位姿求解

      • 构建局部坐标系,求解局部坐标系与相机坐标系之间等变换关系

    • 非线性优化求解方法

      • 先迭代求解旋转矩阵,再求解平移矩阵

      • 引入同名点及高程平面约束

边缘轮廓特征

  • 对边缘轮廓离散采样,沿采样点法向方向搜索匹配带,求解位姿参数

  • RAPID算法改进方向

    • 多特征融合

    • 稳健估计

    • 贝叶斯估计

      • 卡尔曼滤波

        • 适合于噪声满足高斯分布假设

      • 粒子滤波

        • 适合于目标作非线性运动且为非高斯随机过程多情况

  • 视觉伺服相关方法

2D特征描述

  • 基本思路:基于虚拟离散位姿参数,目标不同侧面等,将针对3D目标的位姿求解问题转换为若干2D图像之间的匹配问题,进而采用2D特征描述建立对应

  • 基于HOG特征的DPM方法

  • 采用MCMC采样方法对位姿参数进一步求精

深度学习

  • 方向1:将学习得到的2D深度特征描述用于离散位姿参数后的2D图像之间的匹配

  • 方向2:构建卷积神经网络,直接通过2D图像信息预测控制点图像坐标,进而建立2D-3D控制点对应,实现位姿参数求解

目标3D模型未知:

1.利用序列图像(或立体视觉)对目标进行重建,依据重建目标模型,采用绝对定向方法求解位姿参数,并利用光束平差方法对结果进行优化

2.转化为SLAM问题进行考虑

基于深度学习的位姿测量方法:

基于稀疏特征的方法

  • 从图像中提取兴趣点,用局部描述子来描述这些兴趣点,并匹配到数据库

  • 对纹理较少的物体识别较为困难

基于稠密特征的方法

  • 粒子滤波+回归森林获取位姿:遮挡情况下获取位姿

  • 运动参数+回归森林获取位姿:自由度运动参数估计

  • 边缘化深度图像的权重,只利用彩色获取位姿

基于模版匹配的方法

  • 用固定的模版扫描图片,寻找最佳的匹配

  • 通过卷积神经网络学习整张图片的描述子

  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
PNP算法(Perspective-Point)是一种用于计算相机位姿估计算法,它可以通过已知的3D点和对应的2D图像点来计算相机的旋转和平移矩阵。 在OpenCV中,PNP算法的实现主要依赖于solvePnP函数。该函数可以通过不同的方法来解决PNP问题,包括EPnP、DLS、UPnP等。其中,EPnP是一种基于最小化重投影误差的方法,DLS是一种基于最小二乘法的方法,UPnP是一种基于非线性优化的方法。 使用OpenCV中的PNP算法进行位姿估计的步骤如下: 1. 准备3D点和对应的2D图像点数据。 2. 根据所选的PNP算法,调用solvePnP函数,并传入相应的参数。 3. 根据函数返回的结果,获取相机的旋转和平移矩阵。 以下是一个示例代码,演示了如何使用OpenCV中的PNP算法进行位姿估计: ```cpp #include <opencv2/opencv.hpp> int main() { // 准备3D点和对应的2D图像点数据 std::vector<cv::Point3f> objectPoints; std::vector<cv::Point2f> imagePoints; // 添加3D点和对应的2D图像点数据 // 定义相机内参矩阵 cv::Mat cameraMatrix = cv::Mat::eye(3, 3, CV_64F); // 定义畸变系数 cv::Mat distCoeffs = cv::Mat::zeros(5, 1, CV_64F); // 调用solvePnP函数进行位姿估计 cv::Mat rvec, tvec; cv::solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvec, tvec); // 输出相机的旋转和平移矩阵 std::cout << "Rotation vector: " << rvec << std::endl; std::cout << "Translation vector: " << tvec << std::endl; return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值