gpt4 book ai didi

python - Python cv2中的皮肤检测和背景扣除

转载 作者:太空狗 更新时间:2023-10-30 02:42:11 27 4
gpt4 key购买 nike

在过去的几天中,我一直在使用OpenCV Python开发手势识别程序。理想情况下,我想要一个像this video中所示的系统。我已经阅读了视频说明中描述的算法,并且几乎了解了所有算法。但是,在复制他在背景减法和肤色检测中的成功方面,我一直遇到麻烦。我所有的尝试最终都变得非常嘈杂和/或非常依赖光照,这两者都暂时使我的代码无用。

我尝试了以下方法:

  • BackgroundSubtractorMOG和BackgroundSubtractorMOG2应用于彩色帧
  • 将图像拆分为Y Cr Cb,在重新组合为单个图像之前将MOG或MOG2应用于每个图像
  • 过滤范围以去除不是肤色的颜色(应用于彩色图像)

  • 到目前为止,我还没有成功。我已经能够挑选出一些轮廓,但它们却嘈杂且不稳定(视帧而定)。是我应该使用的另一种方法吗?

    最佳答案

    我已经编写了fingerspelling解释器应用程序,因此遇到了许多您遇到的健壮性问题。经过几周的实验,我确定了一个结合了几种不同方法的解决方案,但采用的最重要方法是基于颜色的细分。

    基于颜色(肤色)的细分可能非常强大,但简单的实现必然会缺少您要寻找的鲁棒性。首先,每个人的肤色是不同的。因此,重要的是要通过其他机制来确定基线肤色。一种方法是使用面部检测器(例如级联分类器)查找对象的面部,然后相应地“调整”滤镜范围。

    我个人使用级联分类器首先找到了闭合的拳头形状,然后对1)仅包括拳头的紧密边界框和2)整个图像之间的HSV直方图进行了归一化和差分。然后,我建立了一个查找表(LUT),将每个通道的每个值映射到0到25​​5之间的值,该值代表像素代表皮肤的概率。

    根据我的经验,提高我的手部追踪逻辑性能的最重要因素是我不放弃信息的想法。您将很容易使用一些最佳范围来简单地设置阈值以生成二进制图像,但是知道一个像素有40%的机会是皮肤,而另一个像素有60%的机会是很有用的。一旦达到阈值,您所拥有的就是1和0。

    当然,如果打算使用基于轮廓的姿势分类,则可能有必要在某个点进行阈值处理。但是,如果您确实要构建功能强大的手势识别软件,则可能需要使用Convolutional Neural Net (CNN)进行调查以执行分类。预测可以非常快速地完成,并且对背景噪声,转换等非常强大。希望这会有所帮助!

    编辑:让我澄清一下有关“标准化和差异化HSV直方图”的评论。首先,这样做的理由是能够利用OpenCV的LUT (lookup table)而不是基于范围的阈值。 LUT非常有效,并且比基于范围的阈值处理更加灵活。例如,假设您想要的色相包含两个单独范围内的值(例如:0-30和150-180)。基于LUT的方法可以轻松解决这一问题,因为每个单独的值都可以独立映射。

    因此,一旦建立了LUT,就只需要为每帧在HSV图像上运行LUT。这是一个非常有效的解决方案。

    就我而言,要构建LUT,我采取了以下步骤:

  • 转换为HSV颜色空间。
  • 获取拳头周围紧边框的ROI。
  • 为ROI和整个图像的每个通道建立直方图。
  • 缩小(归一化)整个图像通道直方图,以便缩放比例与ROI直方图的比例匹配(即:将每个完整图像直方图乘以ROI_area / full_image_area)。
  • 从ROI直方图中减去(差异)整个图像直方图。 (具有大正值的条目将对应于ROI中常见的通道值,而不是完整图像。)
  • 然后我平滑差异直方图以减少噪声和“过拟合”。
  • 最后,我使用OpenCV的normalize函数和NORM_MINMAX将差异直方图标准化为0.0到1.0之间的值。
  • 然后可以将差异直方图合并在一起以生成3通道LUT。

  • 在使用LUT之后,我个人不设置阈值。取而代之的是,我仅使用所得数据来计算各种“色心”,以使ROI集中在手上。然后,我可以将基于LUT的相同值发送到CNN进行分类。

    请注意,虽然这种方法可以很好地达到我的目的,但是如果您执行阈值设置,它仍然不是完美的。将会检测到一些前景作为背景,反之亦然。我结合了一些基于边缘检测的逻辑,以帮助减少米色墙壁(我家常见的故障模式)导致的误报,但现实情况是,如果有一种真正可靠的方法可以从背景中清晰地分割出一只手,那么它确实可以改变背景和光线条件,我还没找到。因此,我的建议是从视觉皮层中获取线索,并允许来自更高抽象级别的信息来帮助滤除噪声。 (换句话说,对CNN进行调查-它们确实非常出色。)

    关于python - Python cv2中的皮肤检测和背景扣除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360078/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com