4

我们需要建立一个车间模型,在该模型中,我们可以将摄像机图像的像素坐标(x,y)与商店3D空间中的实际物体相关联。照相机图像将作为生成这种模型的来源,会受到鱼眼失真的影响。因此,直线实际上在照相机图像中以曲线形式出现,并且墙壁看起来不完全直角地彼此相遇。如何将二维坐标从商店图像映射到商店的实际货架?

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

任何想法如何去呢?

以下是一些多边形商店的样本图像标记:

enter image description here

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

我们可以管理上面的图像中显示的大多边形,但是远离摄像机的架子可能只有几个像素,所以我们需要某种概率结果,说明用户点击(x,y)他试图点击Shelf-A的概率是多少,或者他试图点击Shelf-B的概率是多少等等。

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

EDIT2: 一件事是不从样品图像显而易见的是,多边形的尺寸可以是非常小(小至几个像素)和反过来多边形可能是非常接近彼此。

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

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

+0

你究竟想做什么? – Unreason 2011-03-17 12:48:31

+0

当你的客户需要非常精确的目标时,你认为这是一个很好的用户体验吗?你能向用户列出可能的命中列表(也许这就是你想要做的)?欧几里得距离'dist = |点 - 多边形的中心|'可以用于排序并且阈值的最大距离。 – bjoernz 2011-03-17 20:29:31

回答

2

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

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

如果您使用OpenCV,那么您可以使用它的PointPolygonTest函数。否则,你可能会自己写一个类似的函数。例如,参见Ray casting algorithm。然后查看列表,直到找到点所在的多边形。

要进一步优化程序,您可以预先计算多边形的范围。一个范围允许你快速地说明在多边形内点的确切点是而不是,并且只考虑剩余的多边形。但是由于图像中的多边形太少,所以我不打扰。

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

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

如果没有完全相同类型的人进行这样的实验,您将使用相同的使用条件和相同的指针设备,您无法确切知道点击次数会有多少。我相信如果鼠标很好,很多人都是狙击手,他们可以很好地看到图像。如果他们被迫使用触摸界面或其他指针设备,精度可能会更低。

+0

谢谢,你的答案的第一部分清除了很多东西。 从样本图像中看不出的一件事是,多边形的大小可能非常小(几个像素一样小),并且多边形本身可能彼此非常接近。 因此,用例是商店中的顾客从其中一个货架挑选产品。应用程序用户将点击他认为产品被拾取的图像中的一个点。 – 2011-03-17 15:48:11

+0

现在由于多边形太小而太近,用户只能猜测拾取的确切点,所以我们最多只能知道它可能是接近点击的3-4个多边形中的任何一个。所以问题是如何计算这些3-4多边形给定点击的概率?正如这里所建议的,从多边形中心到它的面积的距离可以是计算这个概率的参数,我想知道的是如果有算法这样做的话。 – 2011-03-17 15:48:21

+0

对于答案的第二部分,上述意见澄清了问题。 – 2011-03-17 15:55:38

0

几点意见

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

  • 尝试GUE SS通过计算重量的多边形的中心的距离所需的点击多边形接近单击

  • 使用视觉提示(闪光灯选择的多边形,并要求第二次点击)

  • 收集关于误差并且对于某些多边形统计需要验证

+0

我们不打算找出3D坐标,我们只需要知道哪个多边形映射到哪个架子。所以如果用户点击一个多边形,我们可以说他点击了哪个架子。 我们能够管理上面的图像中显示的大多边形,但远离相机的货架可能只有几个像素,所以我们需要某种概率结果,说如果用户点击x,y他试图点击Shelf-A的概率是多少,或者他试图点击Shelf-B的概率是多少。 – 2011-03-17 12:54:02

+0

我建议你说明更好的图片。据我听到你 - 你需要映射像素到对象。这听起来不难。此外,目前尚不清楚为什么你要在实时馈送/低质量相机上进行此操作。顺便说一句,相机是静态还是移动? – Unreason 2011-03-17 13:08:15

+0

至于概率,你可以简单的使用从多边形到得分的距离。也许修改它的大小(大点会更容易点击,人们往往会点击更接近中心)。也许使用距多边形“中心”的距离。 – Unreason 2011-03-17 13:10:12

0

你想要的是一个空间填充曲线,例如Z-Curce或Hilbert-Curve。空间填充曲线将平面细分为更小的拼贴,并将2维的复杂度降低为1维,以便每个拼贴得到新的订单。什么可能会影响您的问题是Hilber曲线不是以二进制顺序遍历飞机,而是使用灰色代码,以便每个贴片与其他贴片的1位不同。这可以很容易地决定用户是否点击过这个或那个对象。