通过计算机视觉进行可靠的手部检测
computer-vision
image-processing
opencv
python
7
0

我目前正在开发用于可靠手部检测的系统。

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

到目前为止,它运行良好,但是我想问一下是否有更好的方法来解决此问题?例如,我发现有几篇论文提到了白种人的具体色彩空间,但没有一篇对亚洲/非洲/高加索色调进行比较。

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

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

我两年前也从事类似的工作。您可以尝试使用“ 粒子滤镜” (“ 凝结” ),使用肤色像素作为初始化的输入。它非常强大且快速。我将其应用于项目的方式位于此链接 。您既有演示文稿(幻灯片)又有调查表。如果使用从手中提取的真实颜色来初始化手的颜色,则要跟踪的人应该不会遇到任何问题。

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

收藏
评论

是一篇有关自适应高斯混合模型皮肤检测的论文,您可能会觉得很有趣。

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

最后, Google Scholar可能对寻找皮肤检测的最新技术有很大帮助。目前,它已在Adademia中进行了大量研究,并已在行业中使用(例如,Google Images和Facebook上传图片政策)。

收藏
评论

您是否看过Gary Bradski的camshift纸?您可以从这里下载

一年前,我使用皮肤检测算法来检测皮肤区域以进行手部追踪,它很健壮。这取决于您如何使用它。

使用颜色进行跟踪的第一个问题是,当人们使用不同的肤色时,它不能很好地适应光照变化或像您提到的那样。但是,如本文所述,可以通过以下方法轻松解决此问题:

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

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

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

附带说明一下,我之前也使用过高斯混合模型(GMM)。如果您仅考虑颜色,那么我想说使用直方图或GMM不会有太大的区别。实际上,直方图的效果会更好(如果您的GMM并未考虑到光照变化等)。如果您的样本向量更复杂(例如,您考虑其他特征),则GMM很好,但是速度直方图要快得多,因为使用直方图计算概率图本质上是一种表格查找,而GMM则需要执行矩阵计算(对于尺寸>多维高斯分布公式中的1)对于实时应用可能会很费时。

因此,总而言之,如果您仅尝试使用颜色检测皮肤区域,请使用直方图方法。您也可以使它适应本地梯度(即梯度直方图,但可能不能完全覆盖Dalal和Trigg的人体检测算法),从而可以区分皮肤和颜色相似的区域(例如纸板或木制家具) )使用本地纹理信息。但这需要更多的努力。

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

对于更复杂的方法,您可以看一下玛格丽特·弗莱克(Margaret Fleck)和戴维·福赛斯(David Forsyth)撰写的“检测裸体的人”的工作。这是有关检测肤色和纹理的皮肤区域的早期工作之一。详细信息可以在这里找到。

您可以在此处找到与计算机视觉和图像处理相关的源代码的大量资源,其中恰好包括用于视觉跟踪的代码。不是,不是OpenCV。

希望这可以帮助。

收藏
评论

仅基于颜色很难找到肤色。
首先,它很大程度上取决于自动白平衡算法。例如,在此图像中,任何人都可以看到颜色是肤色。但是对于计算机,它将是蓝色的。 在此处输入图片说明

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题