python研究背景_Python-cv2中的皮肤检测与背景减除

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

基于颜色(肤色)的分割功能非常强大,但是过于简单的实现必然会缺乏您所期望的健壮性。首先,每个人的肤色都不一样。因此,通过其他一些机制来确定基线肤色是很重要的。一种方法是使用人脸检测器(例如级联分类器)来查找对象的面部,然后相应地“调整”滤波器范围。在

我个人使用级联分类器首先找到闭合的拳头形状,然后对HSV直方图进行规范化和差异化处理:1)一个仅包含拳头的紧边界框;2)整个图像。然后我设置了一个查找表(LUT),将每个通道的每个值映射到0到255之间的值,该值表示像素表示皮肤的概率。在

根据我的经验,提高我的手跟踪逻辑性能的最重要的因素是当我突然想到不要丢弃信息时。为了生成二值图像,您可能会尝试简单地使用一些最佳范围来设置阈值,但是知道一个像素有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_area/full_image_area)。在

从ROI直方图中减去(差异)完整图像直方图。(具有较大正值的条目将与ROI中常见的通道值相对应,但不是完整图像。)

然后我平滑差异直方图,以减少噪音和“过度拟合”。在

最后,我使用OpenCV的normalize函数和NORM_MINMAX将差异直方图规范化为0.0和1.0之间的值。在

然后,可以将差异直方图合并在一起,生成3通道LUT。在

我个人在使用LUT之后不会设置阈值。相反,我只是使用得到的数据来计算一个“色块中心”,我用它来保持ROI以手为中心。然后,我可以发送相同的基于LUT的值到CNN进行分类。在

请注意,虽然这种方法对我的目的很有效,但是如果您确实执行了阈值,它仍然不会是perf会有一些前景被检测为背景,反之亦然。我加入了一些基于边缘检测的逻辑,以帮助减少米色墙壁(我家常见的故障模式)导致的误报,但事实是,如果有一种真正可靠的方法可以从背景中清晰地分割出一只手,而这种方法对背景和光照条件的变化非常鲁棒,我还没有找到。因此,我的建议是从视觉皮层获取线索,并允许来自更高层次抽象的信息来帮助过滤掉噪音。(换言之,调查CNN——它们真的很了不起。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值