Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将投影点映射到真实世界点_C#_Wpf_Transform_Transformation_Homography - Fatal编程技术网

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

C# 将投影点映射到真实世界点,c#,wpf,transform,transformation,homography,C#,Wpf,Transform,Transformation,Homography,我已经到处寻找这个问题的答案,但我找不到答案,所以我在这里问 问题: 我有一个激光从头顶投射到一个表面上,我想在这个表面上投射一些特定大小的形状。为了做到这一点,我需要“校准”激光器,使其在现实世界中接地 激光器在其自身的坐标系中,x和y方向的投影范围从-32000到32000。我在我的表面上设置了一个粗糙的矩形目标(详见下图)。目标以毫米为单位设置,并且是它们自己的坐标系 我需要能够以毫米为单位获取点,并在一系列场景中准确地将它们置于-32000到32000的范围内 示例: 确定所需点的激光

我已经到处寻找这个问题的答案,但我找不到答案,所以我在这里问

问题:

我有一个激光从头顶投射到一个表面上,我想在这个表面上投射一些特定大小的形状。为了做到这一点,我需要“校准”激光器,使其在现实世界中接地

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

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

示例:

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

问题2:

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

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


谢谢大家!

我在这里的帖子上也有同样的问题:

作为一个例子,我问了我关于图片的问题,因为这更容易解释,但我将解决方案应用于设备在表面上的定位。它接近于你想要做的事情

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

首先你必须得到一个单应矩阵。你只需要知道边的坐标。因此,用边填充两个数组,然后使用:

homographyMatrix=OpenCvSharp.Cv2.FindHomography(原始点列表,目标点列表)

然后以“毫米”为单位将任何点与激光坐标系中的等效点进行比较:

targetPoint=OpenCvSharp.Cv2.PerspectiveTransform(原始点,同形矩阵)


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

此解决方案非常适合我提出的问题。当我开始这个问题的时候,我并没有完全理解我的问题。我把你的答案标为正确,因为它是正确的。但是,我已经开始了一个新的线程详细说明我的问题,因为我现在理解它。伟大的让我知道,如果你找到任何解决方案与你的新线程。我可以用它来改进我的解决方案。