我到处搜寻了这个问题的答案,但找不到答案,所以我在这里问。
问题:
我有一个激光从头顶向下投射到一个表面上,我想在此表面上投射一些特定尺寸的形状。为此,我需要对激光器进行“校准”以使其在现实世界中接地。
激光在x和y方向上以自己的坐标系投射,范围从-32000到32000。我在目标表面上设置了一个粗糙的矩形(有关更多详细信息,请参见下图)。目标以毫米为单位设置,并且是它们自己的坐标系。
我需要能够以毫米为单位获取点,并在一系列场景中使它们精确地处于-32000到32000的范围内。
例:
确定所需点的激光空间坐标的最准确方法是什么?
问题2:
投影空间不能保证是平坦的。它可以向任何方向倾斜。例如,如果抬高底部(相对于示例图片),则现实世界坐标在2-D中保持不变,但是所测量的激光坐标变得更像梯形。见下图
如果有人遇到/解决了类似的问题,或者甚至可以开始为我指出正确的解决方案,将不胜感激。
谢谢!
最佳答案
我在这里的帖子中遇到了同样的问题:https://stackoverflow.com/a/52480400/9130280
举例来说,我问我要问图片的问题,因为它易于解释,但是我将解决方案应用于设备在表面上的定位。它接近您要尝试执行的操作。
基本上,您必须使用OpenCvSharp 3库(来自nuget)。
首先,您必须获得一个单应矩阵。您必须知道的唯一坐标是边。因此,您用边缘填充了两个数组,然后使用:homographyMatrix = OpenCvSharp.Cv2.FindHomography(originalPointsList, targetPointsList);
然后将“毫米”中的任何点都等于激光坐标中的等效点:targetPoint = OpenCvSharp.Cv2.PerspectiveTransform(orignalPoint, homographyMatrix);
让我知道您是否需要更多详细信息。