一文读懂PnP问题及opencv solvePnP、solvePnPRansac函数

这篇具有很好参考价值的文章主要介绍了一文读懂PnP问题及opencv solvePnP、solvePnPRansac函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

solvePnP——Perspective-n-Point

  • 参考资料:一文了解PnP算法 PnP问题

一、位姿求解方法

  1. 对极约束:2D-2D,通过二维图像点的对应关系,恢复两帧之间相机的运动。
  2. PnP:3D-2D,求解3D到2D点对运动的方法。已知3D空间点及其在相机投影位置时,求解相机运动。
  3. ICP:3D-3D,配对好的3D点,已知世界坐标系下的3D点和相机坐标系下的3D点。
    solvepnp,opencv,计算机视觉,人工智能

二、PnP概念

如果场景的三维结构已知,利用多个控制点在三维场景中的坐标及其在图像中的透视投影坐标即可求解出相机坐标系与世界坐标系之间的绝对位姿关系,包括绝对平移向量t以及旋转矩阵R,该类求解方法统称为N点透视位姿求解 (Perspective-n-Point,PnP问题)。这里的控制点是指准确知道三维空间坐标位置,同时也知道对应图像平面坐标的点。
solvepnp,opencv,计算机视觉,人工智能

已知条件

  • n个世界坐标系3D参考点(3D reference points)坐标;
  • 与3D点对应的、投影在图像上相机图像坐标系的2D参考点(2D referece points)坐标;并不是相机坐标系相机像素坐标系,注意区分、
  • 相机的内参K;

求解:

  • 世界坐标系与摄像机坐标系之间的位姿变换 :{ R ∣ t }

三、PnP的使用场景

  1. 求解相机的位姿,一般应用于AR,人脸跟踪等;通常输入的是物体在世界坐标系下的3D点以及这些3D点在图像上投影的2D点,因此求得的是相机(相机坐标系)相对于真实物体(世界坐标系)的位姿。
  2. 求取前一帧到当前帧的相机位姿变换,一般用于slam中;通常输入的是上一帧中的3D点(在上一帧的相机坐标系下表示的点)和这些3D点在当前帧中投影得到的2D点,所以它求得得是当前帧相对于上一帧得位姿变换
    solvepnp,opencv,计算机视觉,人工智能

四、OpenCV函数solvePnP、solvePnPRansac

官网链接:OpenCV: Camera Calibration and 3D Reconstruction
solvepnp,opencv,计算机视觉,人工智能

  • objectPoints:特征点的世界坐标,坐标值需为float型,不能为double型,可以为mat类型,也可以直接输入vector
  • imagePoints:特征点在图像中的像素坐标,可以输入mat类型,也可以直接输入vector,注意输入点的顺序要与前面的特征点的世界坐标一一对应
  • cameraMatrix:相机内参矩阵
  • distCoeffs:相机的畸变参数 Mat_(5, 1)
  • rvec:输出的旋转向量:
  • tvec:输出的平移向量
  • useExtrinsicGuess: 用于SOLVEPNP迭代的参数。如果为true(1),函数使用提供的rvec和tvec值分别作为旋转和平移向量的初始近似,并进一步优化它们。默认值为False。
  • flags:PnP的计算方法包括:DLT,P3P,EPnE,UPnP,每种求解方式存在其限制。
enum { SOLVEPNP_ITERATIVE = 0,
       SOLVEPNP_EPNP      = 1, //!< EPnP: Efficient Perspective-n-Point Camera Pose Estimation @cite lepetit2009epnp
       SOLVEPNP_P3P       = 2, //!< Complete Solution Classification for the Perspective-Three-Point Problem 
       SOLVEPNP_DLS       = 3, //!< A Direct Least-Squares (DLS) Method for PnP  @cite hesch2011direct
       SOLVEPNP_UPNP      = 4, //!< Exhaustive Linearization for Robust Camera Pose and Focal Length Estimation 
       SOLVEPNP_AP3P      = 5, //!< An Efficient Algebraic Solution to the Perspective-Three-Point Problem 
       SOLVEPNP_MAX_COUNT      //!< Used for count
};//flag参数PnP计算方法

solvepnp,opencv,计算机视觉,人工智能
solvePnP的一个缺点是对异常值不够鲁棒,当我们用相机定位真实世界的点,可能存在错匹配,对误匹配进行RANSAC过滤,RANSAC为(Random Sample Consensus, 随机抽样一致性)。

五. PnP问题求解原理

目前解法主要有:直接线性变换(DLT),P3P,EPnE,UPnP,非线性优化方法BA。文章来源地址https://www.toymoban.com/news/detail-574196.html

  • 直接线性变换法DLT:PnP问题之DLT解法 - 知乎
  • P3P:P3P推导 利用余弦定理
  • EPnP:深入EPnP算法
  • 非线性优化方法:Bundle Adjustment最小化重投影误差求解PnP–BA
    前面三种方法均可直接调用OpenCV函数接口,而非线性优化的方法实现形式多样,可以利用Ceres、G2o等开源优化库或者手写高斯牛顿法实现。

到了这里,关于一文读懂PnP问题及opencv solvePnP、solvePnPRansac函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv-python库的安装【一文读懂】

    🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ opencv-python 库的安装 顾名思义,Python 代码运行需要依赖使用的 openCV 库 pip install opencv-python -i https://pypi.doubanio.com/simple

    2024年02月08日
    浏览(60)
  • 一文读懂动态规划问题

    动态规划,英文: Dynamic Programming, 简称DP,如果某一个问题由很多重叠子问题,使用动态规划是最有效的。 所谓动态规划就是,在解决一个问题的过程中,将其分解为很多个小的部分,环环相扣。最典型的一个例子,我们入门编程时都学习过的斐波那契数,每个数都是由前面

    2024年04月25日
    浏览(32)
  • 一文读懂kafka消息丢失问题和解决方案

    今天分享一下kafka的消息丢失问题,kafka的消息丢失是一个很值得关注的问题,根据消息的重要性,消息丢失的严重性也会进行放大,如何从最大程度上保证消息不丢失,要从生产者,消费者,broker几个端来说。 kafka生产者生产好消息后,会将消息发送到broker节点,broker对数据

    2024年02月08日
    浏览(46)
  • 【AIGC】猴子拍照版权是谁的:一文读懂AIGC和版权问题

    目录 一、没有明确的定义 1.AI画作算作品吗? 2.AI 绘画的版权归谁? 二、关注平台的版权声明 三、猴子拍照 1、是否应当给予AI作品版权? 2、AI创作的版权赋予谁? 写文章,做图片,AI无所不能,虽然有时也冒点傻气,但是确实越来越像人类了。 而且画的图,除了有几分无

    2024年02月05日
    浏览(36)
  • 一文读懂异步和同步——async/await在运行时和普通代码的执行顺序的问题

    一、执行顺序问题 JavaScript中的await语句是异步编程中用于等待Promise对象执行结果的,它通常与async函数一起使用。在使用await时,程序的执行将暂停,直到该后面的Promise对象完成执行并返回结果。 函数代码执行顺序通常情况下按照代码所在文件从上至下

    2024年02月03日
    浏览(40)
  • cv::solvePnP使用方法及注意点详解(OpenCV/C++)

    1、参数说明: objectPoints :一个 vectorcv::Point3f,包含了在世界坐标系中的三维点的坐标,至少需要4个点。 imagePoints :一个 vectorcv::Point2f,包含了对应的图像上的二维点的坐标,与 objectPoints 中的点一一对应。 cameraMatrix :相机的内参数矩阵,类型为 cv::Mat,一般为 3x3 的浮点数

    2024年02月05日
    浏览(36)
  • opencv 单目相机pnp测距(Cpp)

    单目相机pnp测距是通过单目相机拍摄的一张2d图片,来测量图片中某物与相机的距离。 需要知道被测物的实际尺寸 测距前 需要先 相机标定 ,需要使用哪个相机进行测距就标定哪个。一旦换成了其他相机, 就要重新标定最终相机。 为什么要相机标定? 相机标定是为了得到从

    2024年02月04日
    浏览(39)
  • 【opencv3】详述PnP测距完整流程(附C++代码)

    我们只要获得 特征点的世界坐标(三维坐标)、2D坐标(像素坐标)、相机内参矩阵、相机畸变参数矩阵 以上四个参数即可以解得相机与标志物之间的外参( 旋转矩阵R、平移矩阵T ),并以此求得相机的世界坐标(以标志物为世界坐标平面,且原点为标志物已知某一点)。

    2024年02月11日
    浏览(38)
  • 一文读懂Embedding

    “Embedding”直译是 嵌入式、嵌入层 。 简单来说,我们常见的 地图 就是对于 现实地理的Embedding ,现实的地理地形的信息其实远远超过三维,但是地图通过颜色和等高线等来最大化表现现实的地理 信息 。 通过它,我们在现实世界里的文字、图片、语言、视频就能转化为计算

    2024年02月11日
    浏览(42)
  • 一文读懂Websocket

    提示:通过本章节的学习,你想深入了解什么是websocket。 提示:这里可以添加本文要记录的大概内容: 例如:websocket是html5新增的全双工通讯协议,基于Tcp协议,属于应用层协议。 提示:以下是本篇文章正文内容,下面案例可供参考 WebSocket 是一种在单个 TCP 连接上进行全双

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包