【问题标题】:Robust Hand Detection via Computer Vision通过计算机视觉进行稳健的手部检测
【发布时间】:2012-01-25 10:59:32
【问题描述】:

我目前正在开发一个强大的手部检测系统。

第一步是拍一张手的照片(在 HSV 颜色空间中),手放在一个小矩形中,以确定皮肤颜色。然后我应用阈值过滤器将所有非皮肤像素设置为黑色,将所有皮肤像素设置为白色。

到目前为止它工作得很好,但我想问是否有更好的方法来解决这个问题?例如,我发现有几篇论文提到了针对白种人的具体色彩空间,但没有一篇文章与亚洲/非洲/白种人的色调进行比较。

顺便说一句,我正在通过 Python 绑定使用 OpenCV。

【问题讨论】:

    标签: python image-processing opencv computer-vision skin


    【解决方案1】:

    您看过 Gary Bradski 的 camshift 论文吗?可以从here下载

    我在一年前使用皮肤检测算法来检测手部跟踪的皮肤区域,它非常强大。这取决于你如何使用它。

    使用颜色进行跟踪的第一个问题是,当人们有不同的肤色时,它对光照变化或您提到的那样不可靠。然而,正如论文中提到的那样,这可以通过以下方式轻松解决:

    1. 将图像转换为 HSV 颜色空间。
    2. 放弃 V 通道并考虑 H 和 S 通道,因此 照明变化的折扣。
    3. 阈值像素由于其不稳定性而具有低饱和度。
    4. 将选定的皮肤区域分箱成二维直方图。 (OpenCV"s calcHist 函数)此直方图现在充当皮肤模型。
    5. 计算“反投影”(即使用直方图计算“概率” 图像中的每个像素都有肤色)使用calcBackProject。皮肤 地区将具有较高的价值。
    6. 然后您可以使用meanShift 来查找二维模式 “概率”图由 backproject 生成或检测 blob 高“概率”。

    在 HSV 中抛弃 V 通道并仅考虑 H 和 S 通道确实足以(令人惊讶地)检测不同的肤色和不同的照明变化。一个优点是它的计算速度很快。

    这些步骤和对应的代码可以在原文OpenCV book中找到。

    顺便说一句,我之前也使用过高斯混合模型 (GMM)。如果您只考虑颜色,那么我会说使用直方图或 GMM 没有太大区别。事实上,直方图会表现得更好(如果你的 GMM 不是为了考虑照明变化等而构建的)。如果您的样本向量更复杂(即您考虑其他特征),GMM 很好,但速度方面的直方图要快得多,因为使用直方图计算概率图本质上是一个表格查找,而 GMM 需要执行矩阵计算(对于维度 > 1 在多维高斯分布的公式中),这对于实时应用来说可能很耗时。

    因此,总而言之,如果您只是尝试使用颜色检测皮肤区域,那么请使用直方图方法。您也可以调整它以考虑局部梯度(即梯度直方图,但可能不会达到 Dalal 和 Trigg 的人体检测算法的全部范围。)以便它可以区分皮肤和具有相似颜色的区域(例如纸板或木制家具) 使用局部纹理信息。但这需要更多的努力。

    有关如何使用直方图进行皮肤检测的示例源代码,您可以查看 OpenCV 的页面here。但请注意,该网页上提到他们只使用色调通道并且使用色调和饱和度都会产生更好的效果。

    要了解更复杂的方法,您可以查看 Margaret Fleck 和 David Forsyth 的“检测裸体人”的工作。这是检测同时考虑颜色和纹理的皮肤区域的早期工作之一。详情可见here

    可以在here 找到与计算机视觉和图像处理相关的源代码的重要资源,其中恰好包含用于视觉跟踪的代码。不是,它不是 OpenCV。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的详细回答。不知道我是否会完全实现该方法,但它很有帮助,因为它还解释了一些细节,例如忽略 v 通道 - 我目前正在这样做,但没有真正理解为什么
    • 我添加了指向一个站点的链接,该站点具有大量 CV 和图像处理应用程序的源代码,包括视觉跟踪,我认为您可能会发现它很有用,因为我认为皮肤检测可能只是一种可能的方法。看看别人可能是值得的。
    • 检测裸人更新链接 - mfleck.cs.illinois.edu/naked.html
    【解决方案2】:

    Here 是一篇关于自适应高斯混合模型皮肤检测的论文,您可能会感兴趣。

    另外,我记得读过一篇论文(不幸的是我似乎无法找到它),它使用了一种非常聪明的技术,但它要求你的脸在视野中。其基本思想是检测人的面部,并使用从面部检测到的皮肤补丁来自动识别肤色。然后,使用高斯混合模型稳健地隔离皮肤像素。

    最后,Google Scholar 可能对寻找最先进的皮肤检测技术有很大帮助。它现在在学术界和工业界都得到了深入研究(例如,谷歌图片和 Facebook 上传图片政策)。

    【讨论】:

    • 我也想过先做人脸识别的想法。不幸的是,我不能可靠地假设存在一张脸。
    【解决方案3】:

    我在 2 年前做过类似的事情。您可以尝试使用Particle Filter (Condensation),使用肤色像素作为初始化输入。它非常健壮和快速。 我将它应用于我的项目的方式是link。您有演示文稿(幻灯片)和调查。 如果您使用从您要跟踪的手中提取的真实颜色来初始化手的颜色,那么黑人应该不会有任何问题。

    对于粒子过滤器,我想你可以找到一些代码实现示例。祝你好运。

    【讨论】:

      【解决方案4】:

      您很难仅根据颜色找到肤色。
      首先,它强烈依赖于自动白平衡算法。 例如,在这张图片中,任何人都可以看到颜色是肤色。但是对于计算机,它将是蓝色的。

      其次,在数码相机中进行正确的色彩校准是一件困难的事情,而且它很少能达到您的目的。
      您可以访问 www.DPReview.com,了解我的意思。

      总之,我真的相信颜色本身可以作为输入,但这还不够。

      【讨论】:

      • 这假设您无法控制白平衡。在许多相机上,它可以手动控制。此外,如果肤色是通过人脸检测来估计的,那么这也适用于任意白平衡情况。
      • OP 仅询问从 HSV 颜色通道进行手部检测的问题。另外,我可以想象很多图像中没有人脸的情况。
      【解决方案5】:

      嗯,我在皮肤建模方面的经验很糟糕,因为: 1)闪电可以变化 - 皮肤分割不稳健 2)它也会标记你的脸(作为其他类似皮肤的物体)

      我会使用 Haar 训练等机器学习技术,在我看来,这比建模和修复一些约束(如皮肤检测 + 阈值...)要好得多。

      【讨论】:

        【解决方案6】:

        由于比像素颜色更健壮,您可以使用手几何模型。特定手势的第一个项目模型,并将其与源图像交叉关联。 Here 是该技术的演示。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-12
          • 1970-01-01
          • 2013-02-07
          • 2013-01-23
          • 1970-01-01
          • 2018-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多