在 OpenCV 中检测对象然后计算对象/相机的位姿

Posted

技术标签:

【中文标题】在 OpenCV 中检测对象然后计算对象/相机的位姿【英文标题】:Detecting objects and then computing pose of object/camera in OpenCV 【发布时间】:2015-09-19 09:11:49 【问题描述】:

假设 3D 空间中有两个摄像头,它们相互隔开,注视着同一个场景。我正在尝试通过opencv实现以下目标:(如果我的方法错误,请纠正我)

    Camera1 固定,观察物体,通过solvePnP计算物体的位姿。 Camera2 的位置有噪音,因此在旋转和平移方面都有噪音。它查看同一个对象,并计算每一帧的姿势。 然后我会逐帧求解移动相机的姿势,并使用该信息来稳定它。

是否可以通过检测场景中的通用平面对象(不是棋盘格)并将其用于姿势估计来做到这一点?任何指示或建议都会有所帮助。

谢谢,

【问题讨论】:

检测一般对象对于今天的计算机来说仍然太难了。然而,在现实世界中跟踪特征点并估计相机位姿的视觉 SLAM 表现出色。我想这会对你有所帮助。谷歌视觉 SLAM 和 PTAM。 嗨,如果我错了,请纠正我,但 SLAM 技术是否不需要相机端的某种一致、恒定的运动来进行可靠的姿势估计?在我的应用程序中,只有一台相机出现了一些噪点。我在想的是场景中某个特定对象的某种角/特征检测,但我仍然不确定如何告诉算法仅“锁定”到该特定目标,然后估计其姿势。 . SLAM 是指同时解决相机与环境之间的关系问题。而不是某个特定的对象,尝试构建整个环境地图会更花哨!并且一个特定对象的特征会是嘈杂、不同的视图、运动模糊......查看 PTAM 演示,这会给你一些东西。 【参考方案1】:

无论对象是否为棋盘格,您都需要一种可靠地将 3d 点(在对象上)映射到 2d 点(在图像上)的方法。

通过您描述的设置,您可以将移动相机的姿势与固定的一个物体相对应为 object-to-fixed * inverse(object-to-moving)。即使对象是 w.r.t 任一相机,这也将起作用,前提是相机是同步的。

【讨论】:

您好 Francesco,感谢您的回复。我对您所说的 3d->2d 投影的含义有很高的理解,您对我必须从 opencv 的角度看待哪些算法有什么建议吗?我仍然是 OpenCV 和计算机视觉概念的初学者。我能否以某种方式找到场景中最主要的平面对象的角点,然后估计它的大小并从那里开始......? 从这里开始:docs.opencv.org/modules/calib3d/doc/…。假设您已经校准了相机(即内部参数已知),您可以使用 solvePnP 来求解姿势。为此,您需要 3d->2d 对应关系。这意味着在图像中识别属于已知空间位置的场景对象的点 w.r.t.彼此。棋盘有助于获得精确的对应关系。这不是必需的,任何有助于查找对应关系的对象(也称为“钻机”)都可以。

以上是关于在 OpenCV 中检测对象然后计算对象/相机的位姿的主要内容,如果未能解决你的问题,请参考以下文章

使用Python,Opencv检测AprilTag

Opencv算法在移动/抖动相机中检测移动车辆

Opencv 对象跟踪和计数在视频帧中通过 ROI 的对象

[OpenCV-Python] OpenCV 中计算摄影学 部分 IX 对象检测 部分 X

使用 OpenCV 检测图像中已知形状/对象的方法

OpenCV 对象检测 - 中心点