【问题标题】:location of person in the Image图片中人物的位置
【发布时间】:2016-06-10 17:45:20
【问题描述】:

如何将房间划分为多个区域,然后在哪个区域中找到一个人的位置。

我在 matlab 中使用背景减法来检测房间里的人,所以我可以扩展这项工作以找出图像中人的位置,甚至如果我将图像分成多个区域,甚至在区域中?

感谢您的帮助 问候

【问题讨论】:

  • 分享您的代码以及到目前为止您所尝试的内容。

标签: matlab image-processing localization location detection


【解决方案1】:

将图像划分为多个子部分

我在这里提供的方法只是another StackOverflow answer 的略微修改版本。

如果要将矩阵划分为子矩阵,一种方法是使用mat2cell function 将矩阵分解并将每个子矩阵存储在元胞数组的一个元胞中。

以这个例子为例,一个 60x50 的矩阵在一个单元格中被分成 6 个矩阵(如下图所示):

C = mat2cell(I, [10 20 30], [25 25]);

更一般地说,要将您的图像分成大小相等的“区域”,以下方法将起作用:

im_rows = 256; % Replace this with the number of rows in your image
im_cols = 256; % Replace this with the number of columns in your image
C = mat2cell(I, [im_rows/2 im_rows/2], [im_cols/2 im_cols/2])
Zone1 = C{1,1};
Zone2 = C{1,2};
Zone3 = C{2,1};
% ... and so on

C 现在是一个 2×2 元胞数组 - 4 个“区域” - 每个区域存储原始图像的四分之一,I

检测图像中的人物

现在您已将图像I 拆分为多个区域,您可以开始在每个特定区域内检测人员。

如果您有权访问 MATLAB 的 vision 包,那么您可以利用 PeopleDetector object。根据文档,vision 包使检测人变得非常简单。

% Create PeopleDetector object
peopleDetector = vision.PeopleDetector;
% Read your image of question into MATLAB
I = imread('visionteam1.jpg');
% Detect people in your image
[bounding_boxes,scores] = step(peopleDetector,I);

step(peopleDetector, I) 方法返回一个定义 M 个边界框的 M×4 矩阵,其中 M 表示检测到的人数。输出矩阵bounding_boxes 的每一行都包含一个四元素向量[x y width height]。此向量以像素为单位指定边界框的左上角和大小。当没有检测到人时,step 方法返回一个空向量。输入图像 I必须是灰度或真彩色 (RGB) 图像。

如果您希望此功能允许您检测每个人的中心位置,您可以执行一些简单的算术运算:

center_x = x + width / 2;
center_y = y + height / 2;

【讨论】:

  • 非常感谢,如何将图像或房间分成几个区域并命名为 zone1, .... , zone N.??
  • @Mammo 我已经在我最近的帖子编辑中解释了如何做到这一点。请阅读上面的内容! :)
  • @Vladislav Martin 非常感谢,非常感谢
  • @Vladislav Martin 因为我正在使用背景减法来检测人的运动,我可以通过这种方法(背景减法)找到位置而不使用在 matlab 中找到的人员检测器包吗??跨度>
  • 我会这么说!我无法真正详细说明您将如何做到这一点,确切地说,因为我看不到您的源代码。告诉我你的方法,我给你一个有用的答案会容易得多(附上你执行背景减法的源代码,什么不是你的问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2010-09-12
  • 1970-01-01
  • 2017-08-31
  • 2013-12-05
相关资源
最近更新 更多