C# 将投影点映射到真实世界点
我已经到处寻找这个问题的答案,但我找不到答案,所以我在这里问 问题: 我有一个激光从头顶投射到一个表面上,我想在这个表面上投射一些特定大小的形状。为了做到这一点,我需要“校准”激光器,使其在现实世界中接地 激光器在其自身的坐标系中,x和y方向的投影范围从-32000到32000。我在我的表面上设置了一个粗糙的矩形目标(详见下图)。目标以毫米为单位设置,并且是它们自己的坐标系 我需要能够以毫米为单位获取点,并在一系列场景中准确地将它们置于-32000到32000的范围内 示例: 确定所需点的激光空间坐标的最准确方法是什么? 问题2: 投影空间不能保证是平坦的。它可以向任何方向倾斜。例如,如果底部(相对于示例图片)升高,则真实世界坐标在二维中保持不变,但测量的激光坐标更像是梯形。见下图 如果有人遇到/解决了类似的问题,甚至可以为我指出正确的解决方向,我们将不胜感激C# 将投影点映射到真实世界点,c#,wpf,transform,transformation,homography,C#,Wpf,Transform,Transformation,Homography,我已经到处寻找这个问题的答案,但我找不到答案,所以我在这里问 问题: 我有一个激光从头顶投射到一个表面上,我想在这个表面上投射一些特定大小的形状。为了做到这一点,我需要“校准”激光器,使其在现实世界中接地 激光器在其自身的坐标系中,x和y方向的投影范围从-32000到32000。我在我的表面上设置了一个粗糙的矩形目标(详见下图)。目标以毫米为单位设置,并且是它们自己的坐标系 我需要能够以毫米为单位获取点,并在一系列场景中准确地将它们置于-32000到32000的范围内 示例: 确定所需点的激光
谢谢大家! 我在这里的帖子上也有同样的问题: 作为一个例子,我问了我关于图片的问题,因为这更容易解释,但我将解决方案应用于设备在表面上的定位。它接近于你想要做的事情 基本上,您必须使用库(来自nuget) 首先你必须得到一个单应矩阵。你只需要知道边的坐标。因此,用边填充两个数组,然后使用:
homographyMatrix=OpenCvSharp.Cv2.FindHomography(原始点列表,目标点列表)代码>
然后以“毫米”为单位将任何点与激光坐标系中的等效点进行比较:
targetPoint=OpenCvSharp.Cv2.PerspectiveTransform(原始点,同形矩阵)代码>
如果您需要更多详细信息,请告诉我。此解决方案非常适合我提出的问题。当我开始这个问题的时候,我并没有完全理解我的问题。我把你的答案标为正确,因为它是正确的。但是,我已经开始了一个新的线程详细说明我的问题,因为我现在理解它。伟大的让我知道,如果你找到任何解决方案与你的新线程。我可以用它来改进我的解决方案。