如何找到由3点与3个红外LED组成的三角形的旋转和翻译

How to find rotation and translation of a triangle made of 3 points with 3 infrared leds

本文关键字:三角形 旋转 翻译 LED 何找 3点 3个      更新时间:2023-10-16

我正在从事一个项目,那里我只有1个静态摄像头(不移动),但在其上有3个点(它是平面平面,所以点的差异在z方向为零)。相机始终处于相同的位置,平面在空间中移动和旋转。我已经用25个棋盘图像校准相机和功能:

calibrateCamera(object_points, image_points, image.size(), intrinsic, distCoeffs, rvecs,      tvecs);

,不合适的工作正常。现在,我将OpenCV(C )写入XML文件中。

我如何在新程序中使用这些参数,以找到形成三角形的3点(用红外LED制成),然后将我的旋转和翻译返回此三角形?

2D案例

答案的这一部分仅讨论平面中的刚性动议,因此它与问题不完全匹配。

假设您已经确定了自己的观点,这似乎是根据您的评论工作的。现在,您可以计算这些要点之间的距离并订购它们。两个检测到的点之间的最短距离应对应于原始三角形的最短边缘,依此类推。有了这些信息,您可以将点标记为 a b c

接下来,您移动(翻译)所有点,以便后来置于原点。这是假设您的原始三角形在原点上有一个角落。让我们假设 a 在原始三角形和移动的点集中。该向量的否定版本指示您的三角形的 translation

现在旋转。假设您的原始三角形, b 位于正 x 轴,即 y = 0和 x>>0。现在您可以从相机中占据 b 的(移动)位置,并使用其坐标的atan2,您可以确定线路之间的角度 ab之间的角度 x 轴。这就是三角形的 rotation 的角度。

您可以将这两种结合在一起以形成仿射转换。如果您的原始三角形在原点不带有 a ,而 b x 轴的正部分上,则可以使用类似的技术确定您的原始三角形如何与具有所描述属性的三角形相关。

3D案例

对于太空中的僵化运动,我没有现成的解决方案。只是一个主意。假设您的相机位于原点,您分析的图像嵌入了 z = 1。图像中对应于该嵌入式位置的一个点(x , y>,1),并且穿过该点的射线由该坐标的倍数给出,即λxλyλ)。因此,从点的位置开始, a a b c 在您的图像中,您可以根据一个单一计算太空中的相应点每个点可变,例如 a 通过 c

现在,您的任务是选择这三个变量,以使太空点之间的距离与三角形的边缘长度匹配。这导致了三个变量的三个方程组的系统:

(a - b)^2 + (Ay*a - By*b)^2 + (Ax*a - Bx*b)^2 == AB^2
(a - c)^2 + (Ay*a - Cy*c)^2 + (Ax*a - Cx*c)^2 == AC^2
(b - c)^2 + (By*b - Cy*c)^2 + (Bx*b - Cx*c)^2 == BC^2

不幸的是,这些方程不是线性的。到处都是变量的正方形。仅将它们喂入计算机代数系统中,还没有为我提供明确的解决方案。我想可能有数字方法可以使用一些迭代过程找到近似值,但是您必须对此进行一些研究。

拥有3D坐标后,相比之下,应该简单地计算这些转换。这完全取决于您想要的旋转描述的格式。