使用网球场尺寸的相机校准

问题描述

我正在制作 tennis project,目前正在尝试在球场上找到球接触球场的位置。
目前我有

  • x,y 球的坐标来自这些 video(PS x,y 坐标在以下 format 中)。
points = [None,None,[985,325],[978,345],[904,613],[895,644],[886,649],[877,654],[870,658],[861,664],[853,672],[846,679],[837,688],[827,695],[821,707],[812,716],[803,729],[1051,313],[786,755],[782,769],746],730],[793,700],[800,677],656],[807,640],[814,620],[819,593],579],[825,562],[831,546],[834,532],[833,805],[865,427],[867,418],[871,409],[872,400],392],385],[883,377],369],[887,366],[890,358],357],[892,352],[894,346],[897,340],[898,336],[900,332],[902,329],[905,322],[908,320],[910,316],[912,315],[914,314],[916,310],[919,308],306],[920,305],[924,[922,[926,[928,307],[930,[932,[933,[935,[936,[937,[938,[940,[942,319],[943,323],[945,324],[946,298],291],[947,284],278],[950,272],[949,273],266],[951,261],255],251],245],[953,241],[952,237],236],[939,240],239],[934,242],244],250],[917,252],[911,256],263],[899,267],[896,274],286],[878,293],[873,300],[869,309],[863,318],[858,[851,338],349],[840,359],[835,371],[830,384],397],[818,410],424],[774,535],[773,537],[768,550],[761,572],[754,592],[750,615],[748,624],[739,652],[733,674],[728,698],[727,718],[718,733],[714,732],[709,[705,728],[702,[694,[696,[692,[688,[684,[678,731],[675,734],[673,737],[667,741],[664,743],[659,749],[653,[650,759],[647,765],[642,774],[636,780],[633,786],787],[630,796],[625,804],[629,[634,[640,697],[644,657],[649,[651,616],[655,[654,591],578],[656,560],544],[662,525],[668,482],448],[677,419],404],[679,394],[682,380],[683,374],370],367],364],[685,361],[686,356],[687,353],350],339],[681,283],[689,268],270],243],238],[690,231],228],[691,226],227],[699,[758,234],[762,[769,[775,[780,246],[787,253],[806,[820,[826,271],[832,279],[845,289],[852,296],[866,299],[874,[879,312],[888,[893,330],344],360],378],[967,402],[974,411],[980,421],[989,428],[1054,518],[1061,533],[1066,543],[1076,557],[1077,558],[1087,569],[1093,585],[1101,601],[1110,614],[1119,629],[1128,642],[1136,662],[1211,723],[1216,[1220,719],[1226,[1227,[1232,[1238,[1243,721],[1252,[1256,[1262,725],[1268,[1273,[1280,[1286,[1293,742],[1298,[1305,[1299,691],[1295,668],[1288,623],[1285,597],571],[1277,552],[1254,430],[1249,417],[1246,[1242,399],[1239,[1237,[1234,379],[1231,373],[1230,[1225,[1222,[1219,[1214,[1212,[1209,[1207,351],[1206,[1204,[1202,335],[1200,[1198,[1194,292],[1195,281],[1191,247],[1190,[1189,221],[1188,216],[1186,213],[1187,212],[1184,209],[1183,205],[1182,200],[1181,195],[906,222],[901,235],249],276],303],[876,321],[857,673],365],[859,[855,398],[849,412],413],[841,414],415],[828,416],[817,[816,[813,425],[809,423],[805,405],[804,[799,[838,625],[791,259],[788,248],[783,224],214],[781,204],[856,617],[860,[808,210],[824,260],[836,275],[839,334],[868,[875,383],[880,[885,[975,[991,561],[997,[1017,577],[1028,565],433],[944,420],407],[948,401],391],[954,381],375],[955,372],[956,368],[960,[959,363],[961,[963,[962,[965,[966,[968,[969,388],[972,[971,[973,437],403],396],389],[957,[941,[929,[889,422],[882,436],[743,536],[738,[732,545],[734,[701,583],[766,[770,[776,354],[794,[802,331],304],295],288],285],280],[842,269],[848,265],262],[1081,594],[1091,586],[1103,573],[1113,564],[1126,553],[1140,542],[1150,[1163,523],None]

video 上的这些点。

  • 场角4分,网下2分
    upperLeft = (577,303)
    upperRight = (1333,303)
    bottomLeft = (366,857)
    bottomright = (1562,857)
    netLeft = (495,517)
    netRight = (1422,517)

asd

  • 球场尺寸为 23.7 x 10.97 米。

我被告知这些信息是不够的,因此,我必须找到球的 3D 轨迹。使用此 paper 作为我的主要指南,我尝试这样做。
但是,我在相机校准方面卡住了(第 2.1 节)我不知道如何才能像这张图片一样获得球场的 3D 投影/模型

enter image description here

我希望我清楚地描述了问题和手头的信息。任何指针、建议或问题表示赞赏。

解决方法

有两个单独的问题可以回答:

  1. 给定球弹跳位置的像素位置以及球场上 6 个已知点,您能否估计球弹跳位置的 3D 位置?回答:是的。这是因为球场(如果是标准球场)具有已知的尺寸,这决定了球场平面和图像之间的单应性比例。最简单的方法是使用张的相机校准算法的 1 图像最小版本(在 OpenCv 中实现)来估计焦距以及相机相对于 6 个场上点的位置和方向。一旦相机被校准,你所要做的就是将球反弹点的 3d 射线与 Z=0 的平面相交
  2. 根据对球轨迹的观察,您能否估计弹跳的像素位置(如果存在)?答:视情况而定。这纯粹是一个图像处理问题,归结为在观察到的球的速度向量中随时间寻找不连续性。速度估计是出了名的嘈杂,并且部分取决于相机相对于球轨迹的方向。