【问题标题】:Homography from football (soccer) field lines来自足球(足球)场线的单应性
【发布时间】:2020-02-22 13:06:30
【问题描述】:

我正在使用来自足球(足球)比赛的视频,并尝试使用单应性将帧映射到球场的顶视图。我已经开始使用霍夫线和线段检测器从帧中找到所有白线,其中线段检测器似乎工作得更好。请参阅下面的代码和示例:

import cv2
import numpy as np

cv2.imread("frame-27.jpg")
hsv = cv2.cvtColor(frame, cv2.COLOR_RGB2HSV)
mask_green = cv2.inRange(hsv, (36, 25, 25), (86, 255, 255)) # green mask to select only the field
frame_masked = cv2.bitwise_and(frame, frame, mask=mask_green)

gray = cv2.cvtColor(frame_masked, cv2.COLOR_RGB2GRAY)
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

canny = cv2.Canny(gray, 50, 150, apertureSize=3)
# Hough line detection
lines = cv2.HoughLinesP(canny, 1, np.pi / 180, 50, None, 50, 20)
# Line segment detection
lines_lsd = lsd.detect(canny)[0]

这使用了这个输入框

并为霍夫线返回此图像

还有这张图片用于线段检测。

我的问题有两个:(1) 关于如何进一步改进线检测的任何想法(即减少误报,例如球员周围和场外的线)和 (2) 使用检测线的好方法创建单应性,以便我可以将框架映射到该领域的更高概述 (like this)。非常感谢任何帮助!

【问题讨论】:

  • 如果您将线段作为单独的对象,我会尝试根据它们的长度过滤它们,例如只保留 10-20 左右最长的线段。至少从您的示例来看,这应该过滤掉大部分误报。
  • 这似乎有点工作,当这样做时,我似乎错过了该领域的一些实际行。使用线段检测器似乎工作得更好一些,也减少了误报的数量。您对提取点的好方法有什么想法,我可以将这些点映射到该字段的自上而下视图?
  • 查找线端点附近的线交点。

标签: python opencv opencv3.0


【解决方案1】:

线条铅笔

使用 RANSAC 在两束线中聚类线段。铅笔线是在一个公共点相交的一组线。对于齐次坐标,交点可能在无穷远处(例如,如果所有线都平行)。

您可以找到两条随机线段,计算它们的交点,然后考虑所有稍微靠近该交点(在某个阈值内)的线。重复此操作,直到找到具有最多线段的两支铅笔。然后我们可以假设这些铅笔对应于消失点。

这里,蓝色和红色部分对应于两支铅笔。绿色部分是异常值。如您所见,RANSAC 算法非常擅长拒绝异常值。

整改

我不知道专门针对线段的内置 OpenCV 校正;现有功能旨在处理点对应关系。

运行优化以恢复单应性以处理方向。通常,单应性H 的形式为H = KRK^-1,其中K 是内在矩阵,R 是旋转矩阵。

例如,您可以对李群 SO(3) 的流形运行非线性最小二乘优化,以恢复 R 矩阵。例如,您可以使用LocalParameterization in Ceres solver。但是在 Python 中自己实现它也很简单。如果焦距未知,您还必须将其添加为优化参数。

除了非线性最小二乘法,可能还有其他方法。有些方法直接估计单应性,但可能无法保持正确的纵横比。

可以通过调用opencv的WarpPerspective函数来预览单应性。

估计平移和缩放

这将涉及了解足球场的几何形状。您可以检测足球场特有的一些显着特征并估计规模。例如,您可以使用圆形 Hough 变换检测圆弧。

【讨论】:

  • 感谢您的广泛回答,这看起来非常有希望!我不得不说我对计算机视觉领域一点也不精通,所以我还有很多需要进一步研究的地方。也许这太问了,但是您有答案中显示的步骤/结果的代码吗?
  • 抱歉,我无法提供代码,因为我正在处理类似的工作。但是对于运动场校准的一般调查,这里有一组论文:github.com/cemunds/awesome-sports-camera-calibration 尽管看起来很简单,但这是一个相当困难的话题,正在进行积极的研究。
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
相关资源
最近更新 更多