首页 文章

通过计算机视觉进行稳健的手部检测

提问于
浏览
21

我目前正致力于一个强大的手检测系统 .

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

到目前为止它运作良好,但我想问一下是否有更好的方法来解决这个问题?例如,我发现一些文章提到了白种人的具体色彩空间,但没有一篇提到亚洲/非洲/白人色调的比较 .

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

5 回答

  • 0

    你看过Gary Bradski的camshift纸了吗?你可以从here下载

    我在一年前使用了皮肤检测算法来检测皮肤区域以进行手部跟踪,并且它非常强大 . 这取决于你如何使用它 .

    使用颜色进行跟踪的第一个问题是,当人们有不同的肤色时,它对于照明变化或者你提到的不一样 . 然而,如本文所述,这可以很容易地解决:

    • 将图像转换为HSV颜色空间 .

    • 丢弃V通道并考虑H和S通道,从而折扣照明变化 .

    • 由于不稳定而导致饱和度低的阈值像素 .

    • 将选定的皮肤区域划分为2D直方图 . (OpenCV的calcHist函数)此直方图现在充当皮肤模型 .

    • 使用calcBackProject计算"backprojection"(即使用直方图来计算图像中每个像素具有肤色的"probability") . 皮肤区域将具有高值 .

    • 然后,您可以使用meanShift查找由backproject生成的2D "probability" Map 的模式,或者检测高"probability"的blob .

    丢弃HSV中的V通道并且仅考虑H和S通道足以(令人惊讶地)检测不同的肤色并且在不同的光照变化下 . 好的一面是它的计算速度很快 .

    这些步骤和相应的代码可以在原始OpenCV book中找到 .

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

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

    有关如何使用直方图进行皮肤检测的示例源代码,您可以查看OpenCV的页面here . 但请注意,在该网页上提到它们仅使用色调通道并且使用色调和饱和度将给出更好的结果 .

    对于更复杂的方法,您可以看看Margaret Fleck和David Forsyth在"Detecting naked people"上的工作 . 这是检测考虑颜色和纹理的皮肤区域的早期工作之一 . 详细信息可以在here找到 .

    有关计算机视觉和图像处理的源代码的一个很好的资源,恰好包括用于视觉跟踪的代码,可以找到here . 而不是,它不是OpenCV .

    希望这可以帮助 .

  • 24

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

    此外,我记得读过一篇论文(不幸的是我似乎无法追踪它),它使用了一种非常聪明的技巧,但它要求你在视野中拥有一张脸 . 基本思路是检测人的面部,并使用从脸部检测到的皮肤贴片自动识别肤色 . 然后,使用高斯混合模型强有力地隔离皮肤像素 .

    最后,Google Scholar可能对寻找皮肤检测的最新技术有很大帮助 . 它现在在adademia和工业中使用(例如Google图像和Facebook上传图片政策)进行了大量研究 .

  • 5

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

    对于粒子滤波器,我认为您可以找到一些代码实现示例 . 祝好运 .

  • 4

    你很难找到仅基于颜色的肤色 .
    首先,它很大程度上取决于自动白 balancer 算法 . 例如,在此图像中,任何人都可以看到颜色是肤色 . 但对于电脑来说它会是蓝色的 .
    enter image description here

    其次,在数码相机中进行正确的色彩校准是一件困难的事情,而且很难准确地满足您的需要 .
    你可以看www.DPReview.com,了解我的意思 .

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

  • 5

    我的皮肤造型经验很糟糕,因为:1)闪电可能会有所不同 - 皮肤分割不稳健2)它也会标记你的脸(就像其他类似皮肤的物体一样)

    我会使用机器学习技术,比如哈尔训练,在我看来,如果比建模和修复一些约束(如皮肤检测阈值......)更好的方法

相关问题