0

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

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

在此处输入图像描述

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

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

在此处输入图像描述

距离我的意思是欧几里得距离(sqrt(x^2 + y^2 + z^2))。

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

编辑:

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

我想我可以通过获取法线和点来获取每个标记的平面。从那里我应该能够通过查看 2D 点如何与该平面相交来获得角的 3d 坐标,并且从那里其余的应该很容易。我不完全确定如何获得标记的法线以及如何计算出表示角的 2D 坐标与平面相交的点。

额外信息:

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

1 回答 1

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)

图片

Ps:我已经很久没有这样做了,希望再次检查:)

于 2012-05-27T16:44:22.420 回答