2012-05-27 68 views
0

到目前为止我的过程如下:查找距离标记

标记是正方形标记物的已知大小的,一个例子是下面:

enter image description here

  1. 检测标记
  2. 使用POSIT获取标记相对于相机的平移+旋转 - 结果是相机坐标空间中矩阵的变换矩阵。

现在我试图找到两个标记的相关角之间的距离,单位为毫米。下面是一个例子:

enter image description here

通过距离我的意思的欧几里得距离(SQRT(X^2 + Y^2 + Z^2))。

我想这应该是可能的,因为我有一个参考mm距离(任何标记的边缘是已知的毫米距离),但我不确定我将如何从这两个转换我有矩阵。

编辑:

到目前为止,我已成功通过第一的倒数第二变换矩阵相乘,并查看结果的翻译得到标记中心之间的相对距离。

我觉得我可以通过获取正常和点来获得每个标记的平面。从那里我应该能够通过观察2D点如何与该平面相交并从那里获得角落的三维坐标,并且从那里应该很容易。我不完全确定如何获得标记的法线,以及如何确定代表角的二维坐标与飞机相交的点。

额外的信息:

  • 使用XNA和C#
  • 使用AForge.net视频输入和标记检测。
+0

[你有什么试过?](http://whathaveyoutried.com) –

回答

1

为了简化计算,我将假设标记位于XY平面上。否则,您必须进行一些预测才能将相机位置放入标记平面。

给定翻译矩阵,您应该可以定义相机的位置。我们将尝试找到这些点的坐标之间的绝对差异

假设pC(xc,yc)是摄像头位置,pA(xa,ya)是第一个标记位置,pB(xb,yb)是第二个标记位置。

LAC A和摄像机之间的绝对距离,这是公知的

LBC B和照相机之间的绝对距离,这是公知的

LAB B和A

之间的绝对距离dAC(dcax,dcay)照相机与A之间的曼哈顿距离,

dBC(dcbx,dcby)和dAB(dabx,daby)也是如此。

dcax = SQRT(LAC^2 - (XC-XA)^ 2)

dcay = SQRT(LAC^2 - (YC-YA)^ 2)

DCBX = SQRT(LBC^2 - (XC-XB)^ 2)

dcby = SQRT(LBC^2 - (YC-YB)^ 2)

dabx = ABS(DCBX-dcax)

daby = ABS( dcby-dcay)

实验室=开方(dabx^2 + daby^2)

image

PS:这是一个很长的时间,因为我已经做到了这一点,将不胜感激一个双重检查:)