如何将房间划分为多个区域,然后找到某个区域的人员位置。
我在matlab中使用背景减法来检测房间里的人,所以如果我将图像划分为多个区域,我可以扩展这项工作以找出图像中人物的位置,甚至是区域中的人物位置吗?
感谢您的帮助 此致
答案 0 :(得分:0)
我在这里提供的方法只是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;