Image processing 从连续的视频帧行进行单应估计会产生不好的结果
我试图建立一个程序,检测足球视频序列中的越位情况。为了跟踪更好的球员和球,我需要估计连续帧之间的单应性。我正在用Matlab做这个项目。 我能够在帧之间找到足够多的对应线,但在我看来,结果的单应性是不正确的 我从以下情况开始,其中我有两个处理过的图像(1280x720px)和相应的行: 和 线源于霍夫变换,其形式为Image processing 从连续的视频帧行进行单应估计会产生不好的结果,image-processing,geometry,computer-vision,matlab-cvst,Image Processing,Geometry,Computer Vision,Matlab Cvst,我试图建立一个程序,检测足球视频序列中的越位情况。为了跟踪更好的球员和球,我需要估计连续帧之间的单应性。我正在用Matlab做这个项目。 我能够在帧之间找到足够多的对应线,但在我看来,结果的单应性是不正确的 我从以下情况开始,其中我有两个处理过的图像(1280x720px)和相应的行: 和 线源于霍夫变换,其形式为交叉(P1,P2),其中p(i)为[x y 1],0
交叉(P1,P2)
,其中p(i)为[x y 1]
,0[-0.9986-0.2992 0.6792
-0.9986 -0.4305 0.5686
-0.8000 -0.4500 0.3613
-0.9986 -0.1609 0.7890
-0.9986 -0.0344 0.9074
-0.2500-0.2164 0.0546]
这些是第2帧中的行:
[-0.9986-0.2984 0.6760
-0.9986 -0.4313 0.5678
-0.7903 -0.4523 0.3587
-0.9986 -0.1609 0.7890
-0.9986 -0.0391 0.9066
-0.2486-0.2148 0.0539]
在对每一个匹配行进行规范化之后(在本例中,所有行都对应),我创建矩阵A(j)
[-u0u*x-v0v*x-10x];
[0-uu*y0-vv*y0-1y]代码>
其中,行(j)_1是[xy1]'
,行(j)_2是[uv1]'
。然后我形成整个矩阵A并计算奇异值分解
[~,~,V]=svd(A)代码>。将V的最后一列重新排列为3x3矩阵,则H为:
[0.4234 0.0024-0.3962
-0.3750 -0.0030 0.3503
0.4622 0.0029-0.4322]
这种单应矩阵对于上面的平行线和消失点(这些线的交点)效果很好,但在其他地方效果很差。例如,一个消失点在无标度坐标(1194.2,-607.4)中,它应该保持在那里,事实上,它将被映射到(5~10px)附近的几个像素。但是如果我在(300300)中取一个随机点,它将转到(1174.1,-582.7)
我看不出是我犯了什么大错误,还是因为测量中的噪音。你能帮我吗?嗯,你计算了一个单应映射,把线映射到线。如果你想要对应的逐点单应,你需要反转和转置它。例如,请参见Hartley和Zisserman的“多视图几何体”的第1.3.1章。从您发布的图像来看,您正在考虑的线在场景中都是平行的。那么这个问题是不适定的,因为有无限多的同音字可以解释由此产生的对应关系。尝试将具有其他方向的线添加到对应关系中。我遵循了作者在DLT过程中结合点和线的这篇文章。是的,请参阅那篇文章的第5.2节:注意点和线的对称传输误差表达式中的差异?好,但我没有做RANSAC,也没有计算传输错误。我首先找到了行,然后建立了对应关系(它们是正确的)。我按照表达式(10)中的建议计算了A(j),然后计算了SVD。你认为这是概念上的错误,还是仅仅是因为噪音?我相信你的错误是将单应用于点,而单应用于直线。谢谢。现在我更深入地研究了一下,我发现:“一条对应的点或线给出了两个关于单应性元素的线性方程。因此,如果没有三条线是平行的,那么四条对应的线保证了T21的唯一解。”所有线被认为是等距的,这一事实在任何方面都是有用的吗?是的,我想这可能会对解决方案有更多的限制,但还不够。你仍然会有无限多的同音字,这些同音字将这些线映射为彼此平行且间距相等的线。