找到AR标记的角之间的距离

时间:2012-05-27 16:15:57

标签: c# math xna computer-vision

到目前为止,我的流程如下:

标记是已知大小的方形标记,示例如下:

enter image description here

  1. 检测标记
  2. 使用POSIT获取相对于相机的标记的平移+旋转 - 结果是相机坐标空间中矩阵的变换矩阵。
  3. 现在我试图找到两个标记的相关角之间的距离(mm)。一个例子如下:

    enter image description here

    按距离我的意思是欧氏距离(sqrt(x ^ 2 + y ^ 2 + z ^ 2))。

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

    编辑:

    到目前为止,我已经设法通过将第二个变换矩阵乘以第一个变换矩阵的倒数并查看结果的平移来获得标记中心之间的相对距离。

    我认为我可以通过获得法线和点来获得每个标记的平面。从那里我应该能够通过观察2D点如何与该平面相交来获得角的三维坐标,并且从那里其余应该是容易的。我不完全确定如何获得标记的法线以及如何计算出表示角的2D坐标与平面相交的点。

    额外信息:

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

1 个答案:

答案 0 :(得分: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)

lAB = sqrt(dabx ^ 2 + daby ^ 2)

image

Ps:自从我做完这件事以来已经很久了,我希望能够仔细检查一下:)