将投影点映射到真实世界点

Map Projection Points to Real world Points

这个问题我找了很久都没有找到所以才来这里问一下。

问题:

我有一个激光从头顶向下投射到一个表面上,我想在这个表面上投射一些特定尺寸的形状。为了做到这一点,我需要 'calibrate' 激光在现实世界中将其接地。

激光投影在它自己的坐标系中,x 和 y 方向的范围从 -32000 到 32000。我在我的表面上设置了一个粗略的矩形目标(更多详细信息请参见下图)。目标以毫米为单位设置,并且是它们自己的坐标系。

我需要能够以毫米为单位获取点,并在一系列场景中准确地将它们置于 -32000 到 32000 的范围内。

示例:

确定所需点的激光 space 坐标的最准确方法是什么?

问题二:

投影space不保证是平的。它可以向任何方向倾斜。例如,如果底部(相对于示例图片)升高,则现实世界坐标在 2-D 中保持不变,但测得的激光坐标变得更像梯形。见下图

如果有人 encountered/solved 有类似的问题,或者甚至可以开始为我指出正确的解决方案方向,我们将不胜感激。

谢谢!

我的 post 也遇到了同样的问题:

举个例子,我问的是图片问题,因为它更容易解释,但我将解决方案应用于表面上的设备定位。它与您想要做的很接近。

基本上,您必须使用 OpenCvSharp 3 库(来自 nuget)。

首先你得得到一个单应矩阵。您唯一需要知道的坐标是边缘。所以你用边缘填充两个数组然后你使用:

homographyMatrix = OpenCvSharp.Cv2.FindHomography(originalPointsList, targetPointsList);

然后将 "millimeters" 中的任何点转换为激光坐标中的等效点:

targetPoint = OpenCvSharp.Cv2.PerspectiveTransform(orignalPoint, homographyMatrix);

如果您需要更多详细信息,请告诉我。