Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Math 如何将二维坐标从商店图像映射到商店的实际货架?_Math_Image Processing_Geometry_Computer Vision_Computational Geometry - Fatal编程技术网

Math 如何将二维坐标从商店图像映射到商店的实际货架?

Math 如何将二维坐标从商店图像映射到商店的实际货架?,math,image-processing,geometry,computer-vision,computational-geometry,Math,Image Processing,Geometry,Computer Vision,Computational Geometry,我们需要建立一个车间模型,在这个模型中,我们可以将像素坐标(x,y)与 将相机图像转换为商店三维空间中的实际对象。相机图像将作为生成这样一个模型的源,受到鱼眼扭曲的影响。因此,在摄影机图像中,直线实际上显示为曲线,而墙之间的相交角度并不完全正确 我们正在将该区域细分为多边形。图像上的每个多边形都是指一个特定区域,例如货架、显示区域、结账台等。通过映射每个多边形中的像素,我们希望将其关联为属于该区域对应的货架 你知道怎么做吗 以下是商店的示例图像,其中标记了一些多边形: 编辑: 我们不想找出3D

我们需要建立一个车间模型,在这个模型中,我们可以将像素坐标(x,y)与 将相机图像转换为商店三维空间中的实际对象。相机图像将作为生成这样一个模型的源,受到鱼眼扭曲的影响。因此,在摄影机图像中,直线实际上显示为曲线,而墙之间的相交角度并不完全正确

我们正在将该区域细分为多边形。图像上的每个多边形都是指一个特定区域,例如货架、显示区域、结账台等。通过映射每个多边形中的像素,我们希望将其关联为属于该区域对应的货架

你知道怎么做吗

以下是商店的示例图像,其中标记了一些多边形:

编辑:
我们不想找出3D坐标,我们只需要知道多边形映射到哪个架子上。因此,如果用户单击多边形,我们可以说他单击了哪个书架

我们可以管理上面的大多边形,如图中所示,但是远离相机的架子可以小到几个像素,因此我们需要某种概率结果,说明用户是否点击(x,y)他试图点击货架A的概率是多少,或者他试图点击货架B的概率是多少,等等

基本上,我们要寻找的是一个概率函数,当在2D图像上单击一个小多边形(或像素)时,该函数将返回单击附近对象的概率

EDIT2: 从示例图像中不明显的一点是,多边形大小可能非常小(小到几个像素),而多边形又可能彼此非常接近


此外,用例是商店中的客户从其中一个货架上挑选产品。应用程序用户会单击图像中的一个点,他认为产品是从中拾取的。现在,由于多边形非常小且非常接近,用户只能猜测拾取的确切点,因此我们最多只能知道它可能是靠近单击点的3-4个多边形中的任意一个。所以问题是如何计算这3-4个多边形的点击概率

正如这里所建议的,点击距离多边形中心的距离及其面积可能是计算该概率的参数,我想知道的是是否有这样做的算法。

很少有评论

  • 可以通过对图像应用一些变换来纠正鱼眼,请参见示例页面以获取一些资源,包括

  • 仅从一台摄像机获取三维坐标和图像是不够的,需要额外的信息

  • 在来自不同摄影机的同一场景的两幅图像上标记同一点可以提供完整的3D信息(您确实需要知道每个摄影机相对于彼此的位置)

  • 如果您正在寻找执行此操作的工具,请参阅

编辑
更新问题后,假设已经存在一组多边形,并且您希望消除用户错误(或提高精度),您可能会

  • 通过计算到靠近单击的多边形的重心的距离,尝试猜测所需的单击多边形

  • 使用视觉提示(闪烁选定的多边形并需要再次单击)

  • 收集错误的统计信息,对于某些需要验证的多边形


我们不想找出3D坐标,我们只需要知道多边形映射到哪个架子上。因此,如果用户单击多边形,我们可以说他单击了哪个书架

我假设您有一个从多边形到工具架名称的映射。例如,作为对的列表(多边形、工具架名称)。如果摄像机固定不动,你可以用手做一次。那么你的问题就是只找到一个点属于哪个多边形

如果使用OpenCV,则可以使用其函数。否则,您可以自己编写类似的函数。例如,见a。然后查看列表,直到找到该点所在的多边形

要进一步优化程序,可以预先计算多边形的范围。一个范围允许你快速地说出当点绝对不在多边形内时,只考虑剩下的多边形。但由于图像中的多边形太少,我不想麻烦了

基本上,我们要寻找的是一个概率函数,当在2D图像上单击一个小多边形(或像素)时,该函数将返回单击附近对象的概率

只需运行一个实验,尝试单击一个高亮显示的像素,积累一些操作员实际单击位置的统计信息。一旦你有了这个,就可以很容易地预测出对象外点击的次数以及它们可能偏离的距离


如果没有对完全相同的人、相同的使用条件和相同的指向设备进行这样的实验,你就无法真正判断点击会减少多少。我相信很多人都是狙击手,如果鼠标好的话,他们能很好地看到图像。如果他们被迫使用触摸界面或其他定点设备,精度可能会更低。

您需要的是空间填充曲线,例如Z曲线或希尔伯特曲线。空间填充曲线将平面细分为更小的平铺,并将二维的复杂性降低为一维,从而使每个平铺获得新的顺序。您的问题可能会感兴趣的是,Hilber曲线不是以二进制顺序穿过平面,而是使用格雷码,因此每个图块在1位上与其他图块不同。这样就很容易决定用户是单击了这个对象还是那个对象。

您到底想单击什么