人物在图像中的位置

时间:2016-06-10 17:45:21

标签: matlab image-processing localization location detection

如何将房间划分为多个区域,然后找到某个区域的人员位置。

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

感谢您的帮助 此致

1 个答案:

答案 0 :(得分:0)

将图像分成子部分

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

  

如果要将矩阵划分为子矩阵,一种方法是使用mat2cell function打破矩阵并将每个子矩阵存储在单元阵列的单元格中。

以此示例为例,其中60x50矩阵在一个单元格中分为6个矩阵(如下图所示):

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

Splitting a larger matrix into smaller matrices

更一般地说,要将图像分割成大小相同的区域",以下内容将起作用:

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;