2016-09-21 72 views
0

enter image description here
如何从墙角度获得“点”的位置?我知道摄像机视角下的x,y,(z)坐标,并且我知道墙的边缘点。
我想计算一下,如果这个点站在墙的前面,在它的女巫边(左,右)。 我的想法是计算墙的平面方程,并测试从点到平面的垂直线是否在墙的边界处击中它。
我可以这样做,而不使用z坐标(这是非常不准确的),墙壁和相机之间的角度是可变的。在OpenCV中计算透视变换

回答

0

如果您知道墙中心的xc,yc位置,则可以转换新参照系中该点的X,Y坐标。

首先,翻译原点。如果相机是在坐标(0,0),该poinx的新坐标(X“ Y”,Z')在3D世界将

X' = X - xc 
Y' = Y - yc 
Z' = Z 

(从图像中假设墙ortogonal到XY平面)

现在,您必须围绕您知道的角度的Z轴旋转,并获得相对于墙中心的最终坐标X“,Y”,Z“。

如果角度SI APLHA你导出rotational matrix around Z

 cos(alpha) -sin (alpha) 0 
R = [sin(alpha) cos(alpha)  0] 
     0   0   1 

和获得(由矢量moltiplication矩阵)

(X'', Y'', Z'') = R*(X',Y',Z') 

则必须再次获得Z ''= Z现在

你可以定义点在墙的中间左侧或右侧,检查X''> 0或X''< 0(你也可以用Y'来做,它取决于哪个值o ˚F阿尔法你已经使用)


如果这个答案假设的东西你不已经有(α,XC,YC,三维坐标点)告诉我,我将添加一个方法或策略。

0

如果z坐标不重要,则可以将其忘记并仅使用x,y。

而不是一架飞机,你适合一条线的墙壁的2D点。接下来,按照您的建议,计算一条线,该线穿过绿色点并垂直于墙的线,并计算墙线和垂直线之间的交点。

如果交点的x或y坐标是墙壁的限制内,

x_wall_min < X < x_wall_max或y_wall_min <Ý< y_wall_max,

比点矗立在壁的前面。

如果墙壁和摄像机之间的角度可能会发生变化,那么您必须更好地定义“墙的左侧或右侧”,因为它在某些角度可能不明显。