在交互式楼层项目中使用楼层投影匹配顶视图人体检测

时间:2015-07-07 10:44:37

标签: c++ opencv computer-vision

我正在建立一个互动楼层。主要思想是将使用Xtion相机拍摄的物体与我在地板投影中绘制的物体相匹配,然后让它们跟随此人。

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

问题是该算法使用深度数据检测其下方人物的最顶部,并且因为该点与相机之间的角度不是直接位于人脚之上。

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

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

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

提前致谢

更新

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

第1步:校准

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

  • 在彩色帧上检测投影区域。

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

第2步:检测

  • 我使用检测算法来获取新人检测并使用深度帧跟踪它们。

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

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

希望这会有所帮助。再次感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

  4. 从你想要的应用程序的描述来看,我想恢复图像坐标可能更有用。

答案 1 :(得分:0)

这类问题通常可以从明确定义变量中获益。

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

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