Graph cuts optimization for multi-limb human segmentation in depth maps

转自:http://www.cnblogs.com/tornadomeet/archive/2012/12/12/2814071.html

如果大家有用过kinect做开发,不管是使用kinect SDK还是使用OpenNI,估计都对这些库提供的人体骨骼跟踪技术有一定的好奇,心里在想,每个人穿的衣服不同,身体特点也不同,所处的环境不同,且走路或做手势时的姿势也不相同,竟然能够跟踪人体的骨架,且效果不错。那么上面的Kinect SDK和OpenNI提供给kinect开发的核心算法——人体骨架跟踪到底是怎么实现的呢?CVPR2011的最佳论文就给出了微软SDK的核心算法,见参考文献2,该文章主要是讲的Kinect SDK的人体骨架跟踪核心算法。因为该算法具有普适性,且效果好,被评为best peaper那是必须的。微软算法的流程图如下所示:

  

  由于微软的骨架跟踪只需要确定每个身体部位的骨架节点,所以对人体中每个像素并不要求其一定分类正确,只需要身体的某个部位附近的像素能确定一个骨骼点即可。所以由上图可以看出,微软的算法对人体的某个像素点的分类有不少是错误的。因此后面有学者提出怎样在微软算法的基础上通过优化来使每个像素点的分类更准确呢?这就是本文度的论文,见参考资料1。

  该文章的流程示意图如下:

  

  本论文的算法分为2部分,RF(Random forest,随机森林)对每个像素进行分类+GC(Graph Cut,图割)对每个像素优化。其想要完成的功能是,将人体分为7个部分,每只手分为3个部分,手掌,手肘,手臂,另外整个躯干和头当做一个部分。只对人体的上半部分做分类处理。

  首先来看看RF部分,该部分和微软算法的第一部没什么2样,基本上是照抄的。

  在使用RF来分类前,首先需要对训练样本(即人体图像的深度图)进行特征提取,该特征提取的公式非常简单,如下所示:

  

  该公式感性认识上就是:假设对每个点,有相同的(u,v)。(u, v)代表像素点的偏移位置,不同部位的点经过偏移后得到另一个像素点,这2个点之间的深度信息相减就是该点的特征。比如说手掌上的点,经过偏移后得到的另一个点可能是背景,而背景的深度一般比较远,所以手掌上该点的特征值很大;而同样的u和v,对应胸部点而言,其偏移后的点有可能还在胸部上(因为人体的躯干面积比较大),所以该点的特征值比较小。由此可见,人体骨架跟踪的特征是非常简单的,但是由于训练数据非常之庞大,所以最后得到的RF分类效果还是非常不错的。

  有了深度图像的在后就可以使用这些特征来训练RF中的参数了。训练每颗数分为以下5部分:

  1. 随机从特征集中选择一部分特征用来训练,这里的特征除了上面讲的(u, v)外还包括一个阈值sida,因为只有对这些特征值设定一个阈值,在Decise Tree中才能对这些特征进行分支。

  2. 随机从训练样本集中选择出一部分样本用来训练。上面2个步骤就是RF中Random的来源,即训练样本是随机的,特征属性也是随机的。

  3. 计算整个样本的信息熵。

  4. 每一次tree的分支选择的是最优的属性,最优属性的定义是使信息增益最大的那部分属性。

  5. 循环步骤3和4,知道树到达某种条件而停止训练,比如说,到达一定层数,或者说该节点已经可以被当做是叶子节点了。

  RF的test部分非常简单,即每输入一副图像,并且制定其中某个像素点的坐标,就将其输入到RF中的每一颗树中,然后采用投票或平均的方法来决定到达是以怎样的概率将该像素点分类到人体中的7个部位。其投票公式如下:

  

  关于随机森林的介绍可以参考前面的博文:一些知识点的初步理解_7(随机森林,ing...)

  下面是GC部分,GC理论在cv中一般是用来做图像分割的,这里作者将其用来对每个像素点进行优化。GC理论是优化由2个值的和,该和称为能量函数,公式如下:

  

  由2部分构成,1部分称作一元项,是用来区分该像素点属于某个类别的概率,一个称作是二元项,用来表示该像素点和其周围的像素之间的关系。GC理论把该式子的优化转换成图割的寻找,即对应一个图,只需要对该图的每条边赋值。当然了,该图顶点的组成是由图中每个像素点+每一类的一个像素点,具体的介绍可以参考前面的博文:一些知识点的初步理解_8(Graph Cuts,ing...)

  这里的细节就不做介绍了,直接将作者给图的边的权值如下:

  

  上面是一些理论部分,下面是实验结果:

  

  其中(a)是groud true;(b)是RF分类的结果;(c)是对每一张图片采用GC优化的结果,没有采用时间信息;(d)是对几帧图片采用GC理论优化后的结果,其中包含了深度信息;(e)的上一行是Groud truth,中间一行是RF分类的结果,最下面一行是GC优化的结果。

 

 

  参考资料:

  Hernández-Vela, A., N. Zlateva, et al. (2012). Graph cuts optimization for multi-limb human segmentation in depth maps. Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on, IEEE.

  Shotton, J., A. Fitzgibbon, et al. (2011). Real-time human pose recognition in parts from single depth images. Computer Vision and Pattern Recognition (CVPR), 2011 IEEE Conference on, IEEE.

     一些知识点的初步理解_7(随机森林,ing...)

     一些知识点的初步理解_8(Graph Cuts,ing...)

 

  附录:

  我在实验室报告这篇文章的ppt。

posted on 2013-03-29 21:03  hqqxyy  阅读(353)  评论(0编辑  收藏  举报