【问题标题】:vision.PeopleDetector function in MatlabMatlab中的vision.PeopleDetector函数
【发布时间】:2015-03-17 16:50:28
【问题描述】:

有没有人在 Matlab 中使用过 Computer Vision System Toolbox 中的 vision.PeopleDetector 函数? 我已经安装了它并尝试应用于我拥有的图像。 尽管它在训练图像上检测到人,但在真实照片上却什么也没检测到。它要么根本检测不到人,要么检测到图像中没有出现人的部分。

谁能分享一下使用这个功能的经验? 非常感谢!

这是一个示例图像:

【问题讨论】:

  • 我没有使用过那个特定的功能,但是帮助说““物体检测到处于直立位置的未被遮挡的人。”
  • 在真实照片中寻找人物仍然是一个开放的研究问题。上面评论中所说的是正确的。
  • 我已经阅读了有关 vision.PeopleDetector 的帮助,我的问题是是否有人成功地将它用于任何身体检测问题。问题是,在示例中它工作得很好,但是当我尝试任何(!)我的图像时,该功能无法检测到那里的任何人。尽管图像上的人在直立位置上没有被遮挡

标签: matlab computer-vision matlab-cvst


【解决方案1】:

vision.PeopleDetector 对象确实可以检测到图像中直立的人。然而,与大多数计算机视觉算法一样,它也不是 100% 准确的。您可以发布失败的示例图片吗?

您可以尝试多种方法来提高性能。

  • 尝试将ClassificationModel 参数更改为'UprightPeople_96x48'。该对象附带了两个模型,它们在不同的数据集上进行了训练。
  • 图像中的人物有多大(以像素为单位)?如果您使用默认的'UprightPeople_128x64' 模型,那么您将无法检测到小于 128x64 像素的人。同样,对于'UprightPeople_96x48' 模型,您可以检测到的最小尺寸的人是 96x48。如果您图片中的人比这小,您可以使用imresize 对图片进行上采样。
  • 尝试减少ClassificationThreshold 参数以获得更多检测。

编辑: 关于你的特定形象的一些想法。我的猜测是人员检测器在这里运行不佳,因为它没有经过此类图像的训练。两种模型的训练集都包含行人的自然图像。具有讽刺意味的是,您的图像具有非常干净的背景这一事实可能会使检测器关闭。

如果此图像是您必须处理的典型图像,那么我有一些建议。一种可能性是使用简单的阈值来分割人群。另一种是使用vision.CascadeObjectDetector 来检测人脸或上身,恰好在这张图片上完美运行:

im = imread('postures.jpg');
detector = vision.CascadeObjectDetector('ClassificationModel', 'UpperBody');
bboxes = step(detector, im);
im2 = insertObjectAnnotation(im, 'rectangle', bboxes, 'person', 'Color', 'red');
imshow(im2);

【讨论】:

  • 感谢您的回复。例如,尝试来自“1.bp.blogspot.com/-W9JP5Qpp3cc/US9MKDR1xxI/AAAAAAAADk4/…”的图像,即使改变阈值(从 1 降低到 0.1 甚至 0.01),仍然没有检测到照片中的一些人,因为没有包含他们的脸的窗口。在当前示例中是男子 3 号。为什么会发生这种情况?看看这张照片,这个男人的地位和其他人并没有什么不同……
猜你喜欢
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2023-03-05
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多