如何将2D坐标从商店图像映射到商店的实际货架?

str*_*eek 5 math geometry image-processing computer-vision computational-geometry

我们需要建立一个车间模型,我们可以将相机图像中的像素坐标(x,y)与商店3D空间中的实际对象相关联.相机图像将作为产生这种模型的来源,遭受鱼眼扭曲.因此,直线实际上在相机图像中显示为曲线,并且墙壁看起来在不完全正确的角度处彼此相遇.

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

任何想法如何去做?

以下是商店的示例图片,其中标有一些多边形:

在此输入图像描述

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

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

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

编辑2: 从样本图像中看不出的一点是,多边形尺寸可能非常小(小到几个像素),而多边形又可能非常接近.

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

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

sas*_*nin 2

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

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

如果你使用OpenCV,那么你可以使用它的PointPolygonTest功能。否则你可以自己写一个类似的函数。例如,参见光线投射算法。然后浏览列表,直到找到该点所在的多边形。

为了进一步优化程序,您可以预先计算多边形的范围。范围允许您快速判断该点何时绝对不在多边形内,并仅考虑剩余的多边形。但由于图像中的多边形很少,我不会打扰。

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

只需运行一个实验,尝试单击单个突出显示的像素,积累一些有关操作员实际单击位置的统计数据。一旦掌握了这一点,就可以轻松预测对象外点击的数量以及它们可能偏离的程度。

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