首页> 中国专利> 一种应用双目摄像机实现运动三维重建的方法

一种应用双目摄像机实现运动三维重建的方法

摘要

本发明涉及一种应用双目摄像机实现运动三维重建的方法。传统方法是利用传感器来进行捕获,机械系统的缺点是捕获的运动真实性在很大程度上仍依赖于动画师的能力和毅力,光学系统进行捕获的设备昂贵,适合具有高额投入的影视制作等应用。一种应用双目摄像机实现运动三维重建的方法,包括以下步骤:(1)实现双目摄像的图像检测;(2)实现双目摄像的图像获取;(3)采集多张棋盘图片进行拍摄;(4)应用Matlab自带的摄像机标定工具箱,对摄像机进行标定;(5)完成双目摄像机的立体成像;(6)利用OpenCV的reprojectImageTo3D函数得到环境三维信息;(7)给人体主要关节贴上发光小球。本发明的方法成熟,能够获得较好的重建效果,优于其他基于视觉的三维重建方法。

著录项

  • 公开/公告号CN103337094A

    专利类型发明专利

  • 公开/公告日2013-10-02

    原文格式PDF

  • 申请/专利权人 西安工业大学;

    申请/专利号CN201310235215.7

  • 发明设计人 肖秦琨;罗丹;

    申请日2013-06-14

  • 分类号G06T17/00(20060101);

  • 代理机构61114 西安新思维专利商标事务所有限公司;

  • 代理人黄秦芳

  • 地址 710032 陕西省西安市金花北路4号

  • 入库时间 2024-02-19 20:16:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-06-02

    未缴年费专利权终止 IPC(主分类):G06T17/00 授权公告日:20160518 终止日期:20190614 申请日:20130614

    专利权的终止

  • 2016-05-18

    授权

    授权

  • 2013-11-06

    实质审查的生效 IPC(主分类):G06T17/00 申请日:20130614

    实质审查的生效

  • 2013-10-02

    公开

    公开

说明书

技术领域

本发明属于基于视频的运动三维重建领域,特别是一种应用双目摄像机实现运动三维重建的方法。 

背景技术

目前,实现人体运动的三维重建与捕获的方法有很多,而传统的方法是利用传感器来进行捕获,主要有机械系统,该类系统由测量人体关节点位置和方向的电位记组成,其缺点是捕获的运动真实性在很大程度上仍依赖于动画师的能力和毅力,例如:利用电磁系统来进行捕获,这是目前比较流行的一种运动捕获系统,它采用能测量电磁场的传感器来捕获真实物体关节点的位置数据和角度数据,该方法的缺点是对捕获场景中的金属物非常敏感且有对重建的动作不能太复杂的限制而且这种设备非常昂贵;另外采用光学系统进行捕获,此类系统将传感器贴在需要记录运动的人体上,首先利用特殊的摄像机拍摄具有高对比度的视频,然后从视频中提取人体运动,一般系统需要 4-6 个摄像机,这种技术可提供很高的运动数据采样率,但是同样设备昂贵,只适合一些具有高额投入的影视制作等应用,不适合个人电脑的软件开发。 

发明内容

本发明所要解决的技术问题是提供一种能够稳定的获得较好的重建效果,成本低廉,操作简单的应用双目摄像机实现运动三维重建的方法。 

为解决上述技术问题,本发明所采用的技术方案是:一种应用双目摄像机实现运动三维重建的方法,包括以下步骤: 

(1)实现双目摄像的图像检测,可以使电脑显示出拍摄的画面,随着对摄像机位置的移动,拍摄到的画面不停地变换;

(2)实现双目摄像的图像获取,通过在VS2010中创建一个MFC项目,添加Initialize和Capture两个按钮,再利用OpenCV对图像一张一张地捕获,然后将双目摄像机拍摄的图片分别采集存放到计算机中事先建立好的两个目录中;

(3)采集多张棋盘图片,在对图片进行拍摄时,不停的变化图片的位置角度,以便后期进行标定时可以得到较为准确的结果;

(4)应用Matlab自带的摄像机标定工具箱,对摄像机进行标定,以获取双目摄像机的内外参数,原理采用的是张正友平面标定法;

(5)完成双目摄像机的立体成像,包括消除畸变、摄像机校正、图像立体匹配和重投影四个主要步骤;

(6)利用OpenCV的reprojectImageTo3D函数得到环境的三维信息后,通过相应的代码保存一帧三维数据,然后在Matlab中读入这些数据,利用相应代码得到深度图和三维环境效果;

(7)再给人体的主要关节贴上发光小球,以此作为标记,首先将人体从背景中分割出来,然后再提取标记小球的三维坐标,将它们连起来,形成人体的三维骨架,最终实现三维重建。

上述步骤(4)中双目摄像机的标定,具体包括以下步骤: 

①首先进行单个摄像机的标定,在Matlab中打开标定工具箱,先将存放在left 目录中的图片读入,再输入图像的格式,按照给出的提示,输入相应的字母即可;

②在得到所有的标定图像后,点击在Extract grid corners,手动标记出角点的范围,程序在范围内精确确定角点的位置,需要注意的是:提取之前先输入棋盘图片的长和宽,角点选择时要顺时针依次选择尽量让棋盘占据尽可能多的画面,这样可以得到更多有关摄像头畸变方面的信息,但要注意的是为保证后期的双目标定的顺利进行,所选棋盘的大小一定要对应相等;

③当所有的角点被正确提取后,点击Calibration,通过计算单应性矩阵,得到左相机内部参数和畸变系数的初始值,最后对所有的标定参数进行迭代修正,得到最优解;

④重复上述①②③操作,对右相机进行标定;

分别将标定好的左右相机的参数以Calib_result_right.mat文件、Calib_result_left.mat文件和一个Calib_result.txt文件的形式进行保存,再通过调用stereo_gui进行双目立体摄像的标定,最终获得到左右相机的内部参数与外部参数。

上述步骤的双目立体成像的过程具体包括以下步骤: 

①消除畸变:使用数学方法消除径向和切线方向上的镜头畸变,这一步输出的是无畸变图像;

②摄像机校正:调整摄像机间的角度和距离,输出行对准的校正图像,其原理为:是根据摄像头标定后获得的单目内参数据,分别对左右视图进行消除畸变和行对准,使得左右视图的成像原点坐标一致、两摄像头光轴平行、左右成像平面共面、对极线行对齐等;利用BOUGUET算法来校正图像,BOUGUET算法是在给定立体图像间的旋转矩阵和平移下,简单地使两图像中的每一幅重投影次数最小化,同时使得观测面积最大化;

③图像立体匹配:查找左右摄像机视场中的相同特征,这一步骤输出的是视差图,差值是指左右图像上的相同特征在x坐标上的差值xl-xr其原理是:立体匹配,即匹配两个不同的摄像机视图的3D点,只有在两摄像机的重叠视图内的可视区域上才能被计算,一旦知道了摄像机的物理坐标或者场景中物体的大小,就可以通过两个不同摄像机视图中的匹配点之间的三角测量视差值d=xl-xr来求取深度值;

④重投影:当知道了摄像机的相对几何位置后,就可以将视差图通过三角测量的方法转成距离,输出深度图。

上述步骤(7)通过标记来实现运动三维重建,具体包括以下步骤: 

① 将对人体与背景进行分割,提取出人体这个前景信息;

②标记点提取:首先进行预处理,采用二值化方法中的迭代法,是由于可以充分利用标记点个数是已知的这个先验知识,来作为迭代结束的一个条件,然后,对标记点进行识别与定位,是为了预测下一帧标记点在图像中的位置,采用的是质心法;

③三维重建:在整个人体视差图里,找到标记的关节点坐标,对每个点进行三维重建,然后将它们分别连起来,形成最终的三维骨架形式。

上述步骤③的图像立体匹配采用的是块匹配算法。 

与现有技术相比,本发明的有益效果为:本发明实现双目摄像的运动三维重建,一是利用通过TOOLBOX_calib对摄像机进行标定后得到的内外参数,结合OpenCV在Visual Studio2010开发环境中编程,实现了图像的立体校正与立体匹配,从而得到视差图;二是选用发光小球作为标记,来获取人体关节点的三维坐标,可以避免用平面色块和彩色色带作为标记点在三维视觉中易发生形变的,导致不利于跟踪的问题,实现从整个人体运动图像中提取三维骨架,完成最终的重建。 

本发明所采用利用双目视觉实现三维重建的方法成熟,能够稳定地获得较好的重建效果,实际应用情况优于其他基于视觉的三维重建方法。 

附图说明

图1为本发明的总体流程图; 

 图2为本发明的步骤(4)的具体流程图;

 图3为本发明的步骤(5)的具体流程图;

     图4为本发明的步骤(5)中双目立体成像过程中摄像机校正的具体流程图。

具体实施方式

如图1所示,一种应用双目摄像机实现运动三维重建的方法,包括以下步骤: 

(1)实现双目摄像的图像检测,可以使电脑显示出拍摄的画面,随着对摄像机位置的移动,拍摄到的画面在不停地变换;

(2)实现双目摄像的图像获取,通过在VS2010中创建一个MFC项目,添加Initialize和Capture两个按钮,再利用OpenCV对图像一张一张地捕获,然后将双目摄像机拍摄的图片分别采集存放到计算机中事先建立好的两个目录中;

(3)在上述步骤(1)和步骤(2)的基础上,为了标定的准确,可以采集至少20张棋盘图片,本实施例中选择采集25张棋盘图片,在对图片进行拍摄时,需要注意要不停地变化图片的位置角度,以便后期进行标定时可以得到较为准确的结果;

(4)应用Matlab自带的摄像机标定工具箱,对摄像机进行标定,以获取双目摄像机的内外参数,原理采用的是张正友平面标定法;

(5)完成双目摄像机的立体成像,包括消除畸变、摄像机校正、图像立体匹配和重投影四个主要步骤;

(6)利用OpenCV的reprojectImageTo3D函数得到环境的三维(宽度、高度、深度)信息后,通过相应的代码保存一帧三维数据,然后在Matlab中读入这些数据,利用相应代码得到深度图和三维环境效果;

(7)再给人体的主要关节贴上发光小球,以此作为标记,首先将人体从背景中分割出来,然后再提取标记小球的三维坐标,将它们连起来,形成人体的三维骨架,最终实现三维重建。

如图2所示,双目摄像机的标定,具体包括以下步骤: 

①首先进行单个摄像机的标定,在Matlab中打开标定工具箱,先将存放在left 目录中的图片读入,再输入图像的格式,按照给出的提示,输入相应的字母即可;

②  在得到所有的标定图像后,点击在Extract grid corners,手动标记出角点的范围,程序在范围内精确确定角点的位置,需要注意的是:提取之前先输入棋盘图片的长和宽,角点选择时要顺时针依次选择尽量让棋盘占据尽可能多的画面,这样可以得到更多有关摄像头畸变方面的信息,但要注意的是为保证后期的双目标定的顺利进行,所选棋盘的大小一定要对应相等;

③当所有的角点被正确提取后,点击Calibration,通过计算单应性矩阵,得到左相机内部参数和畸变系数的初始值,最后对所有的标定参数进行迭代修正,得到最优解;

④重复上述①②③操作,对右相机进行标定;

分别将标定好的左右相机的参数以Calib_result_right.mat文件、Calib_result_left.mat文件和一个Calib_result.txt文件的形式进行保存,再通过调用stereo_gui进行双目立体摄像的标定,最终获得到左右相机的内部参数(以像素为单位的焦距、图像中心点坐标、畸变系数)与外部参数(旋转矩阵和平移矢量)。

如图3所示,步骤双目立体成像的具体过程包括以下步骤: 

① 消除畸变:使用数学方法消除径向和切线方向上的镜头畸变,这一步输出的是无畸变图像;

②摄像机校正:调整摄像机间的角度和距离,输出行对准的校正图像(所谓行对准是指两图像在同一平面上,并且图像的每一行是严格对其的,其有相同的方向和y坐标),其原理为:根据摄像头标定后获得的单目内参数据(焦距、成像原点、畸变系数)和双目相对位置关系(旋转矩阵和平移向量),分别对左右视图进行消除畸变和行对准,使得左右视图的成像原点坐标一致、两摄像头光轴平行、左右成像平面共面、对极线行对齐等;利用BOUGUET方法来校正图像,BOUGUET算法是在给定立体图像间的旋转矩阵和平移(R,T)下,简单地使两图像中的每一幅重投影次数最小化(从而也使重投影畸变最小化),同时使得观测面积最大化;

③图像立体匹配:查找左右摄像机视场中的相同特征,这一步骤输出的是视差图,差值是指左右图像上的相同特征在x坐标上的差值xl-xr其原理是:立体匹配(匹配两个不同的摄像机视图的3D点,只有在两摄像机的重叠视图内的可视区域上才能被计算),一旦知道了摄像机的物理坐标或者场景中物体的大小,就可以通过两个不同摄像机视图中的匹配点之间的三角测量视差值d=xl-xr来求取深度值;

④重投影:当知道了摄像机的相对几何位置后,就可以将视差图通过三角测量的方法转成距离,本步骤输出的是深度图。

步骤(7)中通过标记来实现运动三维重建,具体包括以下步骤: 

①将对人体与背景进行分割,提取出人体这个前景信息;

②标记点提取:首先进行预处理,采用二值化方法中的迭代法,是由于可以充分利用标记点个数是已知的这个先验知识,来作为迭代结束的一个条件,所以,此方法比较适合本发明。然后,对标记点进行识别与定位,是为了预测下一帧标记点在图像中的位置,采用的是质心法;

③三维重建:在整个人体视差图里,找到标记的关节点坐标,对每个点进行三维重建,然后将它们分别连起来,形成最终的三维骨架形式。

如图4所示,摄像机校正采用的是BOUGUET算法,该算法具体包括以下步骤: 

①为了使重投影畸变最小化,将右摄像机图像平面旋转到左摄像机图像平面的旋转矩阵R被分离成图像之间的两部分,我们称之为左右摄像机的两个合成旋转矩阵rlrr每个摄像机都旋转一半,这样其主光线就平行地指向其原主光线指向的向量和方向;

②为了计算将左摄像机极点变换到无穷远并使极线水平对准的矩阵Rrect,我们创建一个由极点e1方向开始的旋转矩阵。让主点(cx,cy)作为左图像的原点,极点的方向就是两台摄像机投影中心之间的平移向量方向:

下一个向量e2必须与e1正交,没有其他限制。对e2而言,很好的一个选择就是选择与主光线正交的方向(通常沿着图像平面)。这可以通过计算e1和主光线方向的叉积来得到,然后将它归一化到单位向量:

第三个向量只与e1e2正交,它可以通过叉积得到:e3=e1×e2,此时,将左摄像机的极点转换到无穷远处的矩阵如下:

这个矩阵将左图像绕着投影中心旋转,使得极线变成水平,并且极点在无穷远处。两台摄像机的行对准通过设定来实现:

③我们同样可以计算校正后的左右摄像机矩阵Mrect_lMrect_r,但是与投影矩阵PlPr一起返回:

(其中,是像素畸变比例,它们在现代摄像中几乎总是等于0)。投影矩阵将其次坐标中的3D点转换到如下其次坐标系下的2D点:

其中,屏幕坐标为(x/w,y/w)。

如果给定屏幕坐标和摄像机内参矩阵,二维点同样可以重投影到三维中,重投影矩阵如下: 

这里,除cx外的所有参数都来自左图像,cx是主点在右图像上的x坐标。如果主光线的无穷远处相交,那么cx= cx,并且右下角的项为0。给定一个二维齐次点和其关联的视差d,我们可以将此点投影到三维中:

三维坐标就是(X/W,Y/W,Z/W),应用上述所描述的Bouguet校正方法即可生成理想的立体构型。

图像立体匹配采用的是块匹配算法,具体步骤如下:OpenCV实现了一个快速有效的块匹配立体算法cvFindStereoCorrespondenceBM(),它使用了一个叫“绝对误差累计”的小窗口来查找左右两幅立体校正图像之间的匹配点。这个算法只查找两幅图像间的强匹配点(强纹理)。对于处理非畸变校正立体图像,块匹配立体匹配算法有以下三个步骤。 

①  预过滤,使图像亮度归一化并加强图像纹理。这个过程通过再整幅图像上移动窗口来实现的; 

② 沿着水平极线用SAD窗口进行匹配搜索;

③  再过滤,去除错误的匹配点。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号