【发布时间】:2021-02-08 13:51:45
【问题描述】:
我有一个可以移动的相机。我有每个相机方向的内在参数矩阵和外在参数矩阵。对于对象检测,我使用 YOLO,并在图像平面中获得 2D 边界框。我的计划是使用一对时间图像,其中包含检测到的对象,对对象周围生成的 2D 边界框的中点进行三角测量。
现在,我使用相隔 5 帧的两张图片。这意味着,第一帧中有对象,第二帧在几毫秒后有相同的对象。我使用 cv2.triangulatePoints 来获取边界框 2D 中点对应的 3D 点。
我的主要问题是当相机或多或少稳定时,得到的距离值是准确的(在几厘米内)。但是,当我四处移动相机时,对象的最终距离值开始变化很大(对象是静态的,从不移动,只有看着它的相机移动)。我似乎无法理解为什么会这样。
对于 cv2.triangulatePoints,我得到两个时间相机方向之间的相对旋转矩阵 (R = R2R1),然后得到相对平移 (t = t2 - Rt1)。 P1 和 P2 是最终的投影矩阵(P1 表示较早位置的相机,P2 表示较晚位置的相机)。 P1 = K[I|0] 和 P2 = K[R|t],其中 K 是 3x3 内参矩阵,I 是 3x3 单位矩阵,0 是 3x1 零向量。
我应该使用 10 帧的时间间隔,还是使用这种方法通过单个相机定位对象永远不准确?
【问题讨论】:
-
该方法应该适用于恕我直言。你可以多解释一下“结果距离值”吗?是重投影错误吗?
-
距离值是第一帧中中心到相机的距离。我在 5 帧之前的相机参考框架中获得中心,但由于相机一直在移动,我将所有 3D 坐标带入第一帧中相机的参考框架。
标签: python deep-learning computer-vision opencv-python 3d-reconstruction