graphics - 如何识别图像中的球并对其进行 3D 建模(HawkEye 系统)

标签 graphics image-processing 3d computer-vision


我们正在尝试为我们的大学项目开发​​用于板球运动的 HawkEye 系统。 HawkEye系统中使用的流程如下:

  1. 需要从投球手的手到击球手的手(在球的整个飞行过程中)的不同时间(不同点)的球图像
  2. 确定球在整个飞行过程中不同时间点的 (x,y) 坐标
  3. 将 (x,y) 坐标转换为相应的 3D 坐标 (x,y,z)
  4. 对球在整个飞行过程中的轨迹以及球的周围环境(包括球场、球场、三柱门、体育场)进行建模
  5. 延长球的轨迹,看看球是否击中三柱门

到目前为止,这就是我们计划完成该项目的内容:

我们将从腿裁判员的位置拍摄击球手的视频,然后在 vlc 播放器中以慢动作播放该视频,并同时拍摄球飞行的多个屏幕截图,我想这将解决步骤 1 .

但是现在我们陷入了步骤2,我们现在面临的问题是如何识别并找到特定实例下球的(x,y)坐标(从拍摄的球图像中)从腿侧) 如果我们可以找到球的 (x,y) 并且如果相机距某个引用点的距离已知,那么我们可以找到图像的深度,即 z 坐标,因此我们可以找到相应的 (x ,y,z) 坐标,然后我们可以使用 OpenGL 对其进行 3D 建模

我们正在尝试用 C++ 实现它

感谢任何帮助:)

快速编辑:
我了解到,在真正的HawkEye系统中,6个摄像头是在板球场的圆周上调整的,所有摄像头都以60度的角度分开,HawkEye仅使用4个摄像头就可以完美工作,但为了获得更好的精度,使用了2个额外的摄像头。 因为我们没有那么多摄像机,所以我想我们将使用 3 个摄像机,它们位于 field 的圆周上,间隔 120 度,为了降低复杂性,我们将选择一个半径 = 5m 的小 field ,但是我们不确定将相机放置在哪里才能获得更准确的结果,可能的位置可以是:一个在腿侧,一个在越位,第三个在正前方,但我仍然不确定该放置在什么位置选择

这种方法称为多相机校准,对于球识别,我认为我们应该选择 OpenCV 而不是 MATLAB,因为 OpenCV 的图像处理速度更快

大家有什么想说的吗?

最佳答案

关于步骤 2(提取球的位置),有多种可能的方法和文献来源。我强烈建议您研究一下机器人足球 (Robocup) 的工作,其中包含许多类似问题的示例。

在理想的世界中(例如白色背景上的黑色磁盘),起点可能是使用类似 Hough Transform 的东西。 ,或轮廓追踪,并使用所得轮廓的统计矩提取位置。

这种方法的挑战在于,板球场肯定会有难以去除的背景特征。经过一些尝试和错误,您也许能够使用常见的图像处理技术,例如背景扣除、形态算子、边缘检测器、颜色过滤和阈值处理来提高一致找到球的能力。根据过去的经验,我强烈建议使用一组工具来快速构建图像处理管道和技术的原型(prototype),可能是 MATLAB。

也许一个更可靠的方式来表达这个问题,进入以下部分,是如果您对球之前的位置有所了解,那么您可以在经过一些小量之后对球应该在的位置做出合理的估计的时间。这是最优估计的领域,并且Kalman Filters 。一个很好的介绍性文本,尽管来自一个非常不同的问题空间,是 Probabilistic Robotics作者:Thrun 等人。

关于graphics - 如何识别图像中的球并对其进行 3D 建模(HawkEye 系统),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5729005/

相关文章:

OpenCV圆畸变检测

css - 使 Angular 应用程序中的背景图像加载速度更快

matlab - 计算 3d 结构中的中心线

java - 3D Shadow实现思路

java - 使用像素在 Canvas 上绘制 PNG;公式?

android - 图形断断续续

python - 用 OpenGL 制作太阳系

c++ - 我应该停止使用 OpenCV 吗?

python - 如何在 OpenGL 中将矩阵渲染为立方体?

opengl - 开始 3D 编程/OpenGL