c++ - 如何配置概率占用图人员检测器

标签 c++ opencv computer-vision

Probabilistic Occupancy Map 是一种多摄像头人体检测程序,其 c++ 实现可在以下位置免费获得: http://cvlab.epfl.ch/software/pom

为了使用这款方便的软件,您需要:

  1. 背景去除程序后来自多个摄像头的一系列同步视频帧。
  2. 特定场景的配置文件。

POM 附带一组示例视频帧和相关配置文件。

我的问题可以表述如下: 给定一系列同步视频(例如来自 http://cvlab.epfl.ch/data/pom ),我如何生成 POM 所需的配置文件?我尤其对配置的 RECTANGLE 标签感兴趣。自述文件指出:

RECTANGLE [camera number] [location number] notvisible|[xmin] [ymin] [xmax] [ymax]

Defines the parameters of a certain rectangle, standing for an individual at a certain location viewed from a certain camera. All non-specified rectangles are "not visible" by default.

根据我的理解,它定义了一个人的边界矩形在从特定相机观看的特定位置的外观。这必须为每个摄像机的每个(网格)位置定义(假定位置在摄像机的视野中 - 如果不是,则使用 notvisible 或矩形可能未定义)。

手动执行此操作并非不可能,但肯定是不切实际的。所以,总结一下:如果我有一组来自多个摄像头的视频,如何生成POM配置文件?

最佳答案

在相关出版物中,作者提到他们使用相机校准来为网格中每个位置的人体轮廓生成矩形。完成此操作的代码似乎未包含在源文件中,在这种情况下,您将不得不自己编写。

在他们数据集的校准数据中,您可以看到他们使用每个相机的两个单应性,即顶平面单应性和地平面单应性。您可以使用它来快速获取所需的矩形。

头平面单应性是一个 3x3 矩阵,描述了从一个平面到另一个平面的映射。在这种情况下,它描述了从 2D 房间坐标(在头部水平)到 2D 图像坐标的映射。您可以使用 opencv 中的函数 findHomography 为您自己的相机确定单应性。你需要做的就是测量房间地面上四个点的坐标,并在这些标记上竖立一根柱子。杆子应该与您要跟踪的普通人一样长。您现在可以编写一个小程序,允许您在每个摄像机 View 中单击杆的顶部。您现在有四个世界点(在房间中测量的坐标)和每个摄像机四个图像点(您单击的点)。使用 findHomography,您可以确定单应性。对没有杆子的地面上的标记执行相同的操作,并且每个相机都有两个单应性。

您现在可以使用单应性将位于房间内任何位置的矩形的 8 个角点投影到每个摄像机的图像坐标上。取所有 8 个点的边界框,您就得到了那个房间位置和那个摄像头的矩形。

该方法的作者提到使用人体轮廓,这表明他们的方法可能比使用长方体更准确。然而,没有移动的人的轮廓这样的东西,所以长方体的解决方案可能是完美可行的。

关于c++ - 如何配置概率占用图人员检测器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23477120/

相关文章:

linux - cv2 imdecode不返回任何base64字符串

c++ - 如何确定两条直线是否(几乎)垂直/正交

computer-vision - 如何计算图像分割中的IU平均得分?

c++ - 从 PointCloud 到 Mat 的转换

c++ - 如何从C++中的字符串ID中提取int日、月和年

c++ - 在同一个 cpu 内核上执行的 OpenMP 线程

opencv - 模板匹配?对象识别和特征匹配或解决方案是什么?

c++ - 如何用VTK和C++绘制流线图?

c++ - C++ Mutex 是否保证避免竞争条件?

opencv - 怪异描述符行类型