zoukankan      html  css  js  c++  java
  • 基于三个kinect的人体建模

       单个kinect的人体重建,在Kinect SDK 1.8中,Kinect Fusion的效果已经很不错了。其缺点显而易见,一是扫描时间长,重建对象也需要长时间保持静态;二是需要人体或者kinect转动以实现全方位扫描,操作起来繁琐。而运用三个kinect来进行人体重建,只需要将三个kinect按照一定方位(比如两两相距120°角度)固定位置,人体即使不动也能实现对人体的全身扫描,相比之下时间花销短。

        基于三个kinect的人体重建,首先要对三个kinect相机进行标定,得到相机内外参数。这样每个相机看到空间一点的坐标是一致的,三个相机坐标系得以统一。标定方法是两两标定,即取某一kinect相机(记为A)为参考,其他两个(记为B、C)分别与A标定,得到两组相机参数。这里,我是用的matlab自带的标定方法stereoCameraCalibrator,见链接matlab。例如,用两个处于同一水平线的kinect(如下图所示)进行标定测试,得到的参数是旋转矩阵R为:

    0.9949 -0.0196   0.0991
    0.0235 0.9990  -0.0384
    -0.0983 0.0405    0.9943

        平移向量T为:

    -280.5068  2.5255   -25.4387

        由标定结果可以看出,R矩阵接近于单位矩阵,表明两相机位置上是基本平行的。平移向量中-280.5068表示两相机x方向距离为28cm,而x方向的实际距离为26~27cm,这说明标定精度还是比较可靠的。

        标定之后可以得到两组相机参数(旋转矩阵和平移向量),这在之后的点云拼接中会有用。

    点云获取


     

         通过sdk中内置的转换函数,将由kinect获取到的深度图像转换为点云数据,并保存。如下图所示为一个角度获取的点云。

     

     

    点云处理

          由于点云的数据量非常庞大,并且存在着冗余数据和噪声干扰,增加了计算复杂度。因此在点云拼接之前需要预先对点云进行处理。这其中的关键问题是提取点云数据中能反映曲面特征的点,精简数据并且去除噪声,提高重建的精度和效率。去噪方法是联合双边滤波算法

    点云拼接 

          三维点云拼接实质是将不同坐标系下得到的数据点云进行坐标变换,通过两片或多片数据点云中找出正确的排列关系,拼接成一片完整的数据点云。其中的关键问题就是利用旋转矩阵和平移矩阵,通过ICP算法对点云进行配准。

     

  • 相关阅读:
    centos7 下安装MongoDB
    centos7 学习笔记
    MongoDB相关资料收集
    centos 下安装.net core
    sql server 2008 r2 中的oracle发布使用笔记
    sql server 与oracle数据互导的一种思路--sql server链接服务器
    Visual Studio 2015正式版/产品密钥 Win10正式版官方原版ISO镜像下载大全&安装激活教程
    Modbus库开发笔记:Modbus ASCII Slave开发
    PID控制器开发笔记之十一:专家PID控制器的实现
    μCUnit,微控制器的单元测试框架
  • 原文地址:https://www.cnblogs.com/czaoth/p/5669164.html
Copyright © 2011-2022 走看看