将图像划分为多个子部分
我在这里提供的方法只是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;