我正在挣扎,需要帮助。
我想根据真实世界物体的已知运动(实际上相机在移动)计算光流速。这是我在上一个问题 ( Determining if a feature is part of a moving object from sparse optical flow (KLT) ) 中提出的问题的一部分。
无论如何,我已经使用 cvGoodFeaturesToTrack()
和 cvCalcOpticalFlowPyrLK()
计算了光流。
我只是想检查我计算的流量在理论上是否正确(对应于相机的运动)。
让我的相机只在 Z 轴上移动(暂时忽略偏航率)。假设我的相机移动 Vz(在 Z 方向)。
我可以找到光流
vx = x * Vz / Z
vy = y * Vz / Z
(假设 Vx,Vy = 0 --> x 和 y 轴上没有相机运动)
这个是我主要从http://www.cse.psu.edu/~rcollins/CSE486/lecture22_6pp.pdf学习的.
要解决这个问题,我必须有 Z。在我的例子中,我不能假设表面 Z 是平坦的或已知的。相机在路上移动并垂直于地面。
请任何人帮我回答以下问题:
- 如何获取对象的深度 Z 值?我需要额外的技巧吗?
- 或者还有其他方法可以找到相机运动与图像光流之间的关系吗?
- 有人试过上面的等式吗?相机只朝一个方向移动是否有效?
非常感谢。
[如果您觉得这个问题太含糊,请告诉我,以便我提供更多细节。]
最佳答案
也许这可以帮助...来自中央佛罗里达大学计算机视觉小组的视频讲座:
- Chapter 6 - Optical Flow (您要求的方程式在视频的 31:00 分处)
- Chapter 8 - Motion Models (处理偏航、倾斜、旋转的各种方法)
- Chapter 9 - Global Motion (解决 self 运动的问题,即移动相机)
来自 Jan Erik Solem 的其他 Python 代码:Programming Computer Vision with Python .
阅读第 10.4 章,它很可能会回答您所有的问题。
另请参阅该书的第 5.4 章,如果您使用相机拍摄一张图像,然后在 x 方向稍微移动相机并拍摄另一张图像,您可以使用这两张图像计算出一种称为“视差图”的东西告诉图像中什么样的东西在前面和后面。这有点像计算 z 方向。与您已经尝试过的内容以及一些评论中提到的有关立体成像的内容类似。
第 4.3 章解释了使用平面标记进行姿态估计。您可以使用放置在相机前面已知距离的物体来校准相机。这很可能是您应该首先查看的内容。
关于opencv - 有没有办法在不知道深度 Z 的情况下从现实世界物体的运动中找到光流速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489305/