前期用Kinect
获取所需三维人脸数据后,本周主要完成点云配准的工作。
PCL环境搭建
PCL(Point Cloud Library)
是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++
编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS Mac
、部分嵌入式实时系统上运行。如果说OpenCV
是2D
信息获取与处理的结晶,那么PCL
就在3D
信息获取与处理上具有同等地位。
我是按照这篇博客来搭建的,博主在百度云中给出的是编译好的集成库,而官方的需要自己源码编译,基本上按照博主的流程写好自己的cmake
文件,就可以使用PCL
了。安装包中带有项目属性表,工程创建之后直接在项目右键中添加即可,在我的VS2013
中,还需要手动在项目属性的链接器输入中勾选“从父级或项目默认设置继承”。
点云配准
依据上一篇博客,调用PCL
中的相应接口可将获取的3D
人脸数据存储为PCL
中的点云格式,可视化两个角度的人脸点云如下图所示:
配准原理采用的是ICP
算法,PCL
中已将该算法封装为接口,可以直接调用,对上述两个点云文件进行配准操作,效果如下图:
从图片中可以看出,人脸轮廓的边缘部分有较多毛刺,因此我们进行离群点去除,效果如下:
到此为止,通过两幅点云的配准操作我们已经可以获得相对于单角度更完整的3D
人脸点云,因此我们下一步的计划是获取实时获取人脸左、中、右三个角度的人脸点云,并同时进行两两配准,从而最终获得完整的3D
人脸模型。