我到处搜寻了这个问题的答案,但找不到答案,所以我在这里问。

问题:

我有一个激光从头顶向下投射到一个表面上,我想在此表面上投射一些特定尺寸的形状。为此,我需要对激光器进行“校准”以使其在现实世界中接地。

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

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

例:

c# - 将投影点映射到现实世界点-LMLPHP

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

问题2:

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

c# - 将投影点映射到现实世界点-LMLPHP

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

谢谢!

最佳答案

我在这里的帖子中遇到了同样的问题:https://stackoverflow.com/a/52480400/9130280

举例来说,我问我要问图片的问题,因为它易于解释,但是我将解决方案应用于设备在表面上的定位。它接近您要尝试执行的操作。

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

首先,您必须获得一个单应矩阵。您必须知道的唯一坐标是边。因此,您用边缘填充了两个数组,然后使用:

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

然后将“毫米”中的任何点都等于激光坐标中的等效点:

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

让我知道您是否需要更多详细信息。

08-26 18:22