有没有办法在不知道深度Z的情况下从真实世界物体的运动中找到光流速度?

Son*_*nia 9 opencv computer-vision

我很挣扎,需要帮助.

我想根据现实世界物体的已知运动来计算光流速度(实际上相机正在移动).这是我在上一个问题中提出的问题的一部分(确定某个特征是否是稀疏光流(KLT)中移动物体的一部分).

无论如何,我已经使用cvGoodFeaturesToTrack()和完成了计算光流cvCalcOpticalFlowPyrLK().

我只想检查我计算的流量是否理论上正确(对应于摄像机的运动).

让我的相机仅在Z轴上移动(暂时忽略偏航率).假设我的相机移动Vz(在Z方向).

我可以找到光流

vx = x * Vz / Z    
vy = y * Vz / Z
Run Code Online (Sandbox Code Playgroud)

(假设Vx,Vy = 0 - > x和y轴没有摄像机运动)

这就是我主要从http://www.cse.psu.edu/~rcollins/CSE486/lecture22_6pp.pdf学习的内容.

问题是要解决这个问题我必须要有Z.在我的情况下,我不能假设表面Z是扁平的或已知的.摄像机在道路上移动并垂直于地面.

请有人帮我解答以下问题:

  1. 如何获得物体Z值的深度?我需要额外的技术吗?
  2. 还是有什么方法可以找到相机运动和图像光流之间的关系?
  3. 有人试过上面的等式吗?当相机向一个方向移动时是否有效?

非常感谢你.

[如果你觉得这个问题太模糊,请告诉我,以便我能提供更多细节.]

sam*_*n13 3

也许这可以帮助...中佛罗里达大学计算机视觉小组的视频讲座:

来自 Jan Erik Solem 的其他 Python 代码:使用 Python 进行计算机视觉编程

阅读第 10.4 章,它很可能会回答您所有的问题。

另请参阅该书的第 5.4 章,如果您用相机拍摄图像,然后在 x 方向上稍微移动相机并拍摄另一张图像,您可以使用这两个图像来计算称为“视差图”的东西,该图像告诉您哪种图像图像中的事物是在前面还是在后面。这有点像计算 z 方向。类似于您已经尝试过的内容以及一些评论中提到的有关立体成像的内容。

第 4.3 章解释了使用平面标记进行姿态估计。您可以使用放置在相机前面已知距离的物体来校准相机。这很可能是您应该首先查看的内容。