【问题标题】:Matching top view human detections with floor projection on interactive floor project在交互式地板项目中将顶视图人体检测与地板投影相匹配
【发布时间】:2015-09-24 19:30:43
【问题描述】:

我正在构建一个交互式楼层。主要思想是将使用 Xtion 相机进行的检测与我在地板投影中绘制的对象进行匹配,并让它们跟随人。

我还检测到转换为多边形的地板上的投影区域。相机可以检测到“屏幕”区域之外。

问题在于,该算法使用深度数据检测其下方人的最顶部,并且由于该点与相机之间的角度,该点不在人的脚正上方。

我知道到地板的距离和检测到的人的高度。而且我知道相机不垂直于地板,但我不知道相机的倾斜角度。

我的问题是如何将 3D 点投影到地板上的多边形上?

我希望有人能指出我正确的方向。我一直在阅读有关相机投影的文章,但我没有看到如何在这个特定问题中使用它。

提前致谢

更新:

使用 Diego O.d.L 的遮篷,我能够进行几乎完美的检测。我将为那些可能正在寻找相同解决方案的人编写我使用的步骤(我不会详细介绍如何进行检测):

第 1 步:校准

  • 在这里,我使用 openNI 从相机获取了一些颜色和深度帧,并清除了投影区域。

  • 在彩色框架上检测到投影区域。

  • 然后我将检测点转换为真实世界坐标(使用 OpenNI 的 CoordinateConverter)。借助新的现实世界检测点,我寻找更适合它们的平面。

第 2 步:检测

  • 我使用检测算法来检测新的人,并使用深度帧对其进行跟踪。

  • 这些检测点被转换为真实世界坐标并投影到先前计算的平面上。这可以纠正人的身高和地板之间的偏移。

  • 使用透视变换将这些点映射到屏幕坐标。

希望这会有所帮助。再次感谢您的遮阳篷。

【问题讨论】:

  • 当你说你知道到弗洛尔的距离时,你是否知道到你正在测量的矩形每个角的距离(或至少 3 个点?)
  • 我可以得到相机在这些点的深度像素是的。

标签: c++ opencv computer-vision


【解决方案1】:

最初使用相机坐标系。我假设您从(row,column,distance) 转换为与相机轴(x,y,z) 对齐的真实世界系统没有问题:

  1. 用三个或更多点计算平面(为了鲁棒性) 相机投影 (x,y,z)。 (选择你最喜欢的算法, i.e

  2. 然后找到你的头点到地板平面的投影 (example)

  3. 最后,您可以将其转换为地板坐标系,或者只是 保存在相机系统中

从您的预期应用程序的描述来看,我想恢复图像坐标可能对您更有用。

【讨论】:

  • 我在看你发给我的东西,迭戈。让我们假设相机垂直于地板。如果我为地板找到一个平面并用人的身高投影任何新的检测点,投影点 x, y 坐标是否与检测点 x, y 相同?只有高度会有所不同。
  • 是的,(x,y), components 是一样的,只是高度(z 分量)会改变。但是,图像中像素的(行,列)对于不同的高度会有所不同。最好的例子就是image。当相机的高度远大于人的高度时,例如,航空图像,那么人的高度与投影无关。但在大多数情况下,不是
  • 效果很好。最后的检测几乎是完美的。非常感谢迭戈。
【解决方案2】:

这类问题通常受益于明确定义变量。

在这种情况下,您的头在物理位置{x,y,z} 并且您想要地面投影{x,y,0}。这很简单,但是您的相机会为您提供{u,v,d}(d 是深度),您需要将其转换为{x,y,z}

找到给定相机位置的变换的最简单解决方案可能是简单地将已知标记放在{0,0,0}, {1,0,0}, {0,1,0} 的地板上,然后查看它们在相机中弹出的位置。

【讨论】:

  • 我可能错了,但使用标记并不能说明不同身高的人
  • @PedroLeal:确实如此。简单地看一下:假设正好在 {0,0,z} 处的相机正向下看着站在 {0,0,0} 处的人。您的深度相机将在 {0,0,z-d} 发现一个头部。只有知道 z 才能算出人的身高,反之亦然。您曾说过问题是相机倾斜,但如果您需要更多变量,则需要更多标记。
猜你喜欢
  • 2010-11-03
  • 2016-11-02
  • 2014-10-14
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
相关资源
最近更新 更多