Graphics 如何识别图像中的球,然后在3D中对其建模(HawkEye系统)

Graphics 如何识别图像中的球,然后在3D中对其建模(HawkEye系统),graphics,image-processing,3d,computer-vision,Graphics,Image Processing,3d,Computer Vision,我们正在为我们的大学项目开发用于板球的鹰眼系统。 HawkEye系统中使用的流程如下: 在整个飞行过程中,从投球手的手到击球手的不同点都需要不同时间的球的图像 在球的整个飞行过程中,在不同的时间点确定球的x,y坐标 将x,y坐标转换为相应的三维坐标x,y,z 在球的整个飞行过程中模拟球的轨迹以及球的周围环境,包括场地、球场、边门和体育场 延长球的轨迹,看球是否会击中边门 到目前为止,这是我们计划完成的项目: 我们将从腿部裁判员的位置拍摄击球手的视频,然后在vlc播放器中以慢动作播放该视频,同时拍

我们正在为我们的大学项目开发用于板球的鹰眼系统。 HawkEye系统中使用的流程如下:

在整个飞行过程中,从投球手的手到击球手的不同点都需要不同时间的球的图像 在球的整个飞行过程中,在不同的时间点确定球的x,y坐标 将x,y坐标转换为相应的三维坐标x,y,z 在球的整个飞行过程中模拟球的轨迹以及球的周围环境,包括场地、球场、边门和体育场 延长球的轨迹,看球是否会击中边门 到目前为止,这是我们计划完成的项目:

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

但现在我们陷入了第二步,我们现在面临的问题是,如何从腿部拍摄的球的图像中识别并找到特定情况下球的x,y坐标 如果我们能找到球的x,y,如果相机与某个参考点的距离已知,那么我们就能找到图像的深度,即z坐标,因此我们可以找到相应的x,y,z坐标,然后我们可以使用OpenGL在3D中建模

我们试图在C++

中实现它 感谢您的帮助:

快速编辑: 我了解到,在真正的鹰眼系统中,板球场的圆周上有6个摄像头进行调整,所有摄像头以60度的角度分开,鹰眼只能使用4个摄像头,但为了更高的精度,额外使用了2个摄像头。 由于我们没有那么多摄像机,我想我们将使用3个摄像机,保持在场地的圆周上,间隔120度,为了降低复杂性,我们将选择一个半径为5m的小场地,但我们不确定在哪里放置摄像机以获得更准确的结果,可能是位置:一个在腿部,一个在边线,第三个在正前方,但我仍然不确定该选择什么位置

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


你们有什么要说的吗?

我想你们需要两台摄像机来确定摄像机到球的距离。或者,您必须使用一些变通方法,例如查看每个帧中球的大小或球与阴影的距离。但是我怀疑这两种解决方法是否足够精确…

如果你有投影/视图矩阵,可以从图像空间到世界空间,那么一台相机就足够了。有很多文档可以进行相机校准/坐标变换。这将得到一个从摄影机指向球的向量。然后可以使用球的大小来确定与摄影机的距离


我猜找到球的最简单方法是引入一个阈值,将球从图像的其余部分切掉。或者使用运动检测提取球和/或结合两种方法。

关于步骤2,提取球的位置,有多种可能的方法和文献来源。我强烈建议研究机器人足球机器人杯的工作,它包含许多类似问题的例子

在一个理想的世界中,比如说白色背景上的黑色磁盘,起点可能是使用类似于a或轮廓跟踪的东西,并使用合成轮廓的统计矩提取位置

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


在接下来的几节中,更有力地表述这个问题的方法可能是,如果您知道球以前在哪里,那么您可以在一小段时间后对球应该在哪里做出合理的估计。这是最佳估计领域,以及。Thrun等人写了一篇很好的介绍性文章,尽管它来自一个非常不同的问题空间。

给你的球一个清晰的颜色 如果在图像的其他地方找不到,请在每张图像中查找该颜色的像素。这是最简单的选择。 考虑到板球运动中球的移动速度,而你只用了30 fps,大多数其他选择都要困难得多。正如你可能发现的那样,仅仅找到一个白色的球是相当困难的,所以你最好的办法是使用以前帧中球的运动信息来帮助在新帧中找到它。然而,低帧速率和高球速意味着你的球在两帧之间会移动很多。在142 km/h的速度下,对于高速碗,您看到的帧之间的移动超过一米,这将导致后续帧之间的球图像之间存在相当大的间隙,这使得使用时间信息更加困难


作为一种怪异颜色的替代品,你也可以在球上涂上一层在红外领域具有高反射性的图层,并使用人类看不见的红外光线和红外敏感相机,你可以从相机上移除红外滤光片

我认为你必须使用多个摄像机才能正确地计算出轨迹。鹰眼似乎确实使用了4。例如,方腿裁判员无法判断球是否击中或漏打,他只能判断高度。从投球手的末端,你可以更好地看到球相对于边门形成的矩形的轨迹。当然,这在一个维度上也是平坦的,但在判断lbw时,这个维度更容易补偿。尽管如此,保龄球手的终场裁判还是使用了两台摄像机:-如果你有一些常数,你不需要第二台摄像机,你可以用它来估计到摄像机的距离,例如球的大小,但这实际上取决于图像的质量、分辨率等。改变球的问题的想法+1,使问题更容易处理