以前我在这里写过博客文章,研究用微软的Kinect体感摄像头做运动捕捉,当时设计了两种方案,一种是用NiTE中间件,在它的基础上改进了一点点,但处理360度转身主要靠插值,说白了就是靠猜测,效果不是很理想;另一种是结合深度信息和颜色信息来直接定位关节,虽然能处理转身的问题,但颜色识别不太稳定,灯光的影响很大。
前些日子,一位国外网友提供了一个思路,何不试一下多体感摄像头同时捕捉?我的屋子空间很小,没法实验,但热心的外国网友说他可以帮助实验,于是有了下面这个新的方案。
多摄像头的坐标系标定是个麻烦事,这也是我以前不敢尝试的原因之一。那天我在GitHub看到一个项目,是二维空间的坐标系标定,思路让我眼前一亮,把各个坐标系变换到一个公共坐标系不就行了吗?于是,我把身体本身作为公共坐标系,两脚中心作为原点,右股关节到左股关节的方向作为X轴,两脚中心到脑袋的方向作为Y轴,X轴与Y轴的叉乘得到的向量方向作为Z轴。怎样把摄像头空间变换到身体空间?就是摄像头看到的身体姿态的逆变换,就这样,多摄像头的坐标系标定搞定了,共十几行代码。
搞定了坐标系的问题,问题就很简单了,把多个体感摄像头得到的关节位置合并就可以了,比如,一个体感摄像头看不到某关节,但另一个角度的体感摄像头能看到,就可以补充丢失的信息。理论上,只要三个体感摄像头两两间隔120度就可以覆盖360度的全空间范围。
当然还有一些重要的细节需要处理,但总体思路就是这样,不算复杂,经过两个星期的调试,这个运动捕捉系统已经能用了。
下面是项目地址:http://www.mesh-online.net/mocap.html
提供所有的源代码和预编译的二进制文件,大家可以下载下来研究一下,如果有问题,可以给我发邮件。