如果大家有用过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。

Reading papers_15(Graph cuts optimization for multi-limb human segmentation in depth maps)相关推荐

  1. 图像分割(二)--Graph Cuts

     原文: http://blog.csdn.net/zouxy09/article/details/8532111 上一文对主要的分割方法做了一个概述.那下面我们对其中几个比较感兴趣的算法做个学习 ...

  2. 图割论文阅读笔记:“GrabCut” — Interactive Foreground Extraction using Iterated Graph Cuts

    "GrabCut" - Interactive Foreground Extraction using Iterated Graph Cuts 摘要 经典的图像分割使用纹理(颜色) ...

  3. CUDA Cuts: Fast Graph Cuts on the GPU

    原文出处: http://lincccc.blogspot.tw/2011/03/cuda-cuts-fast-graph-cuts-on-gpu_03.html 现在需要代理才能访问,所以就转载了. ...

  4. 论文笔记:Weighted Graph Cuts without Eigenvectors:A Multilevel Approach

    1 introduction 在本文中,我们讨论了两种看似不同的方法对非线性可分数据的聚类:核k均值和谱聚类之间的等价性. 利用这种等价性,我们设计了一种基于核的快速multigraph聚类算法,该算 ...

  5. Paper Reading - 综述系列 - Hyper-Parameter Optimization(下)

    更多可见计算机视觉-Paper&Code - 知乎 目录 搜索策略 网格搜索 随机搜索 贝叶斯优化 结论 接着上一篇继续说 搜索策略 网格搜索 将每个超参数的搜索空间离散化为笛卡尔积.然后使用 ...

  6. 【2019CVPR学习】翻译-Graph Attention Convolution for Point Cloud Semantic Segmentation

    Graph Attention Convolution for Point Cloud Semantic Segmentation-原文链接 翻得不好,欢迎批评指正. 摘要 标准卷积因为有着特征各向同 ...

  7. 本人部分博客导航(ing...)

    原文地址为: 本人部分博客导航(ing...)   Deep Learning学习笔记: Deep learning:五十一(CNN的反向求导及练习) Deep learning:五十(Deconvo ...

  8. 机器学习和深度学习相关的博客推荐

    Deep Learning学习笔记: Deep learning:五十一(CNN的反向求导及练习) Deep learning:五十(Deconvolution Network简单理解) Deep l ...

  9. cnblogs_tornadomeet博客导航

    [转]:http://www.cnblogs.com/tornadomeet/archive/2012/06/24/2560261.html Deep Learning学习笔记: Deep learn ...

最新文章

  1. centos7 xfce 中文字体输入法
  2. wxpython列表控件listctrl设置某行颜色_wxPython ListCtrl:写入彩色纹理
  3. fatal: unable to access ‘https://github.comxxxxxxxxxxx‘: Failed to connect to xxxxxxxxxxxxx
  4. 学习组合模式,转载一段有关组合模式的详解
  5. 渗透测试入门1之信息收集
  6. Redis配置文件(3)常见的配置修改
  7. java snmp全面开发解决方案(web service snmp网关、代理snmp网关、网络拓扑发现、SNMP数据采集等)...
  8. 快速使用redis保存session信息
  9. pc计算机怎么设置域名管理,如何设置域名的DNS服务器 -电脑资料
  10. Hadoop大数据生态组件环境安装
  11. LM317 电阻表格 电阻计算
  12. 怎样自学3D建模?能学会吗?
  13. qq互联--qq登录例子 java版 源码_PHP版QQ互联OAuth示例代码分享
  14. 企业私有云建设需求分析
  15. stm32c6t6硬件iic接口的使用--以0.96寸oled为例
  16. Web 应用防火墙如何添加域名
  17. signal函数原型解读
  18. JZOJ 5984. 【北大2019冬令营模拟2019.1.1】仙人掌
  19. C++为何那么复杂?
  20. 初中生都会的平面几何题,你的毕业证还在不?

热门文章

  1. PAT乙级-1063. 计算谱半径(20)
  2. 我读过的最好的epoll讲解--转自”知乎“ 【转】
  3. Java基础之Switch语句
  4. 函数模块:POPUP_TO_INFORM
  5. Hadoop伪分布式运行案例
  6. win7一直提示格式化磁盘_win10磁盘分区操作步骤
  7. 案例:使用jquery的ajax load方法更新局部页面并应用NProgress库实现顶部进度条
  8. 预备作业02 20162320刘先润
  9. 开发ProxyServer的时候如何在一台PC上调试
  10. 切换运行时用户以及用户组