基于单目相机的网球高度估算技术问题咨询
针对你遇到的三个问题,逐个拆解分析:
问题1:v坐标对应真实Z高度的数学证明
你的直觉是正确的,只要满足无侧风、球的地面投影严格沿AB的前提,v分量确实等价于真实世界的Z坐标。推导如下:
设世界坐标系为$W(X,Y,Z)$,地面点$A(x_A,y_A,0)$、$B(x_B,y_B,0)$,向量$\overrightarrow{AB}=(x_B-x_A,y_B-y_A,0)$(即你定义的u轴,在Z=0的地面平面内)。你定义的v轴对应世界坐标系的Z轴(竖直向上),那么局部坐标系$(A,u,v)$到世界坐标系的变换关系为:
$$\mathbf{P}_W = A + s\cdot\overrightarrow{AB} + t\cdot\mathbf{z}_W$$
其中$s$是沿AB的距离,$t$是v轴的分量。显然这里的$t$就是世界坐标系的Z值,也就是真实球高。只要v轴严格对应竖直方向(Z轴),且u轴在地面平面内,这个等价关系就成立。
问题2:Z轴投影弯曲的原因
相机的透视投影特性导致了这个现象:竖直方向(Z轴)的平行线在图像中会汇聚到竖直消失点,而非保持平行。你用单应性矩阵处理的是Z=0的地面平面,只能保证该平面内的线条投影后笔直,但Z≠0的空间点投影会受透视畸变影响,不同地面点上方的竖直方向在图像中的投影方向自然不同,看起来就是“Z轴弯曲”。
问题3:校正Z轴畸变/计算每个点的Z向量
核心思路是利用相机外参(从单应性矩阵分解得到)或竖直消失点,建立空间点与图像点的投影对应关系,具体步骤:
方法1:从单应性矩阵分解相机外参
已知单应性矩阵$\mathbf{H} = \mathbf{K}[\mathbf{R} \mid \mathbf{t}]$($\mathbf{K}$是相机矩阵),由于$\mathbf{H}$对应Z=0的地面平面,可分解得到相机的旋转矩阵$\mathbf{R}$和平移向量$\mathbf{t}$(需要结合网球场的真实尺寸,比如已知场地中几个点的世界坐标)。
- 对任意地面点$\mathbf{P}_W=(x,y,0)$,其图像投影为$\mathbf{p} = \mathbf{H}\cdot(x,y,1)^T$(齐次坐标)。
- 真实世界中该点上方高度为$Z$的点是$\mathbf{P}_W'=(x,y,Z)$,其图像投影为:
$$\mathbf{p}' = \mathbf{K}\cdot(\mathbf{R}\cdot(x,y,Z)^T + \mathbf{t})$$ - 图像中从$\mathbf{p}$到$\mathbf{p}'$的向量,就是该点对应的Z向量的投影。反过来,若已知图像中球的位置相对于$\mathbf{p}$的偏移,可解出对应的$Z$值。
方法2:利用竖直消失点
如果能找到场地中的竖直参考线(比如网柱、场地边缘的立柱),可以计算出竖直消失点$\mathbf{v}_z$:
- 对任意地面点的图像投影$\mathbf{p}$,竖直方向在图像中的方向就是从$\mathbf{p}$指向$\mathbf{v}_z$的射线方向。
- 结合单应性矩阵得到的地面点真实坐标,就能把图像中沿该射线的偏移量转化为真实Z高度。
内容的提问来源于stack exchange,提问作者pltrdy

