Viola-Jones 人脸检测器如何处理多种尺寸的人脸?

Posted

技术标签:

【中文标题】Viola-Jones 人脸检测器如何处理多种尺寸的人脸?【英文标题】:How Viola-Jones face detector work for multiple size of faces? 【发布时间】:2013-10-06 10:51:00 【问题描述】:

我正在实施 Viola-Jones 人脸检测器来检测静止图像中的人脸,它适用于与我的训练大小相同大小的图像。但是我不知道面部检测器如何处理多种尺寸的面部?

如果我的图像的训练大小是 24*24,并且如果我想在 30*30 的检测器窗口中检测人脸,我需要重新调整 haar 特征,以便它适用于 30*30 大小的检测器窗口工作具有相同的阈值。

还有一件事,Haar-feature 的位置是否也会随着不同大小的检测器窗口而变化,如果是,如何变化?

【问题讨论】:

【参考方案1】:

假设你用 xywh 变量表示在 Haar 小波中找到的矩形,其中 xy 表示矩形的左上角 相对于探测器的左上边界w 的宽度和h 的高度。您可以使用以下伪代码对每个 Haar 小波矩形按 s 因子重新缩放整个检测器:

for all rectangle i in the Haar wavelet do
    tempRectangle = rectangle[i];
    tempRectangle.x = tempRectangle.x * s
    tempRectangle.y = tempRectangle.y * s
    tempRectangle.h = tempRectangle.h * s
    tempRectangle.w = tempRectangle.w * s

    //Read the pixels contained in tempRectangle region and
    //calculate this rectangle's contribution to the feature value
    //considering the respective weight of rectangle[i].
end for

因此,我们假设单个 Haar-lke 特征的基本尺寸为 24x24 像素。这样的特征由r1=(10,15,8,4)r2=(4, 8, 8, 4)两个矩形组成,其中r=(x,y,w,h)。当您将检测器重新缩放s=1.25 时,此特征矩形应变为r1=(12.5, 18.75, 10, 5)r2=(5, 10, 10, 5)

【讨论】:

嗨,你的意思是,如果对于 24*24 检测器窗口,我的 haar 特征为 (x,y,w,h)=(10,15,8,4) 那么如果我增加检测器窗口乘以 1.25,haar 特征值变为 (x,y,w,h)=(12.5,18.75,10,5)。是这样吗? 您能否举例说明一下。谢谢! 您能否举例说明一下。 “计算这个矩形对特征值的贡献”是什么意思? 我编辑了答案以提供更详细的示例。关于“计算这个矩形的贡献......”的评论只是一个声明,如果你在计算类似 Haar 的特征值的同时重新缩放检测器,那么在放置 cmets 的地方可能会发生正常的类似 Haar 的特征值计算。如果您只想重新调整检测器窗口及其特征,您可以简单地忽略这些 cmets。

以上是关于Viola-Jones 人脸检测器如何处理多种尺寸的人脸?的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit - 如何处理多种屏幕尺寸?

找不到人脸时如何处理 deepFace.analyze() 中的错误?

如何处理大维度表

Viola-Jones(人脸检测)

matlab中的人脸检测(viola-jones)

如何处理不同的图像尺寸