防生机器人课程报告(基于OpenNI_和_Kinect).docx_第1页
防生机器人课程报告(基于OpenNI_和_Kinect).docx_第2页
防生机器人课程报告(基于OpenNI_和_Kinect).docx_第3页
防生机器人课程报告(基于OpenNI_和_Kinect).docx_第4页
防生机器人课程报告(基于OpenNI_和_Kinect).docx_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

仿生机器人课程报告(基于openni和kinect)学 院: 信息科学与工程学院专 业: 控制科学与工程姓 名: 学 号: -指导老师: - 第一部分:译文用kinect的3d重建 jan smisek,michal jancosek 摘要:我们把kinect相机作为3d测量设备来分析,试验性的研究深度测量分辨率和错误属性,并将kinect与slp相机和一个3d-tof相机就立体重建的准确性做定量比较。我们提出了kinect几何模型、kinect相机的标定步骤和kinect 3d测量的准确标定流程。我们展示了kinect标定的功能-通过将它融入到一条sfmpipeline中,在这里从动态的kinect相机获得的3d测量数据通过计算彩色相机中与之相匹配的位姿被变换到普通坐标系。1. 引言kinect相机正成为一种重要的3d传感器。他受到很多关注的主要原因是基于3d测量的人体姿态的识别系统的快速发展。最低成本,可靠性和测量速度允许使用kinect作为室内机器人的主要3d测量设备,此外还可用到3d场景的重建和目标识别。 本文主要提出一种对kinect相机的分析,设计它的几何模型,提出校正流程和显示它的功能。 最近提出的建立kinect几何学模型,为理解这种传感器提供了一个基础。以下是相关的一些研究成果。work3将opencv相机标定和kinect视差测量模式相融合从而获得了基本的kinect标定方法。但他没有研究kinect传感器特殊的特性,没有对此进行调整。在深红外图像和深度图像有明显不同的ros中也要进行同样的校正方法。该方法的一种变化出现在【8】中,这里opencv标定由bouguet的标定工具盒代替。我们在先前工作的基础上设计了一种准确的基于考虑几何模型及基于考虑保留非模型错误的附加校正程序的学习。我们使用了所有相机模型和它们的标定流程,按【2】进行,kinect视差和深度的关系如【4】,对深度和深红外图像的畸变校正按【11】,还增加了在标定纸板上训练例子的附加校正。我们展示了标定了的kinect相机能够与运动构造合并起来从而在连续的坐标系统中得到3d数据,连续的坐标系统能够立体视觉建立观察场景的表面.我们的比较显示出kinect相机在准确性上要比sr-4000 3d-tof 相机要好,与中等像素的slr 立体相机相当。我们的结果与【10】相一致,该文中提到了kinect相机深度值可相容性的观察。(a) kinect相机由深红外发射器(ir),ir相机和rgb相机组成fig 2. kinect 与两个nikon d60 slr 相机 rig.2. kinect作为一种3d测量设备kinect是一种由ir发射器、ir相机组成,它们能够用来对空间点做三角测量。它能够作为一个深度相机和一个rgb相机使用。如图1.作为一个测量设备,kinect相机有三个输出结果:ir图像,rgb图像和深度图像。2.1 ir图像ir(12801024像素,5745度的视场fov,6.1mm的焦距,像素尺寸为5.2m)相机被用来观察和对ir发射模型向生成三角测量场景的过程解码。如果由一个卤素灯【16,19】合适的照射,而且ir发射器被阻挡,fig 7(c,d)中,kinect就可以用rgb相机的棋盘格模式来可靠的进行标定。在tab2中国显示出相机的一些可忽略的径向和切向畸变。2.2 rgb图像rgb(12801024像素,6350度的视场fov,2.9mm的焦距,像素尺寸为2.8m)相机传送中等质量图像。它能通过【2】中的方法标定,能通过sfm系统来追踪相机的移动。2.3 深度图形kinect相机的主要原始输出是场景中相应的深度。它返回的是“逆深度”d,而不是实际的深度z.如fig.3(a)。由于用kinect相机能得到深度分辨率,我们采用在【3】中提出的模型eqn.5。深度图像能经由来自ir图像和发射器的三角测量获得,所以它是由ir图像所附带。(a) kinect 逆深度作为真实深度的函数(b) kinect 深度量化步长 q(0-15 m)(c) kinect 深度量化步长(0-5 m detail)2.4 深度分辨率 fig.3(b,c)显示了深度分辨率作为衡量距离的功能。通过移动kinect相机(0.5 m-15 m)以充分远离平面目标来获得大约在图像中心5度视场内的所有数值。量化的步长大小q是连续的记录值之间的距离,由他可以建立下面的方程:q(z) = 2.73 z2 + 0.74 z 0.58mm. (1)z的单位:m.q的初值q(0.50m)=0.65mm,终值q(15.7m)=685 mm. 2.5 ir 图像与深度图像之间的转换ir与depth图能进行转换。为了确定转换uo,vot,需要在ir和depth图中提取一些不同目标,如fig.4(a)。相对应的从背景中分割的目标如fig.4(b). 用不同外形的目标图像进行的实验结果如表1.在整个实验中所有转化过程中均以均值进行计算的。我们的结果表明在深度计算过程中用的尺寸大小是:77像素。这比较接近于【11】中的9的窗口大小。(a) 校准前 (b) 校准后fig.4 黑色为ir目标图像,白色边缘为目标深度图 table 1.ir到深度相机像素点变换3 .kinect的几何模型我们将kinect作为由rgb、ir和深度相机组成的多视角系统来建模。rgb和ir相机的一个将三维点x投影到图像点 u ,vt几何模型,可以由【2】得出。其中,畸变参数k=k1,k2,.,k5,相机标定矩阵k,旋转阵r和相机中点c【6】。kinect深度相机与ir相机是密切联系在一起的。它沿着z坐标轴返回一个逆深度d。fig.5,对ir相机的每个像素u , vt 如下式: fig.5 kinect 几何模型 u ,v 由公式3可得,真实深度z 如等式 4, u0,v0t通过表1可得,x代表三维空间坐标中的点,c1,c0为模型中的参数。我们将kinect坐标系统与ir相机联系在一起,因而得到rir = i及cir =0。一个三维点xir 可以从深度图像中的x,y,d来构建。公式:投影到rgb图像中按下式:其中:dis: 为公式3的畸变函数; kir ,krgb :分别为:ir相机和rgb相机的畸变参数; kir,krgb,rrgb,crgb 为ir和rgb相机的标定矩阵,及rbg相机的旋转矩阵和中心。 fig.6 两个相机的畸变估计值4.kinect相机标定我们通过向ir和rgb显示相同的标定目标同时按【2】中所提方法对kinect的相机进行标定,如fig.7(c)。通过此方法两个相机用相同3d点来标定。将ir相机的笛卡尔坐标系统作为kinect总体的坐标系统,这使相机的相对姿势等价为:rrgb ,crgb 。tab.2,3 显示了内部参数,fig.6显示了相机中的畸变效果。我们考虑了不能忽略的切向畸变,这提高了整体的三位测量准确性。fig.7(a) 显示了kinect相机在常规运行下由ir发射器获取的的标定板的ir图像。fig.7(b)是由卤素照射器在遮挡住ir发射器的情况下得到的效果较好的图像。table 2.kinect ir相机的内参数table 3.kinect rgb相机的内参数深度相机的c0,c1参数按下述方法标定。我们提取了n个值xdi = xi,yi,dit,i =1,n,为深度图像的所有标定点,如fig.7(d)。笛卡尔坐标系统下相同的标定点xiri 通过在ir笛卡尔坐标系统中计算得到。它是通过投射到具有最优的适于重建的标定点的ir图像上的交叉射线得到。参数c0,c1 是最适于用eqn.6 将xdi调整到xiri 。(a) ir模式下显示的棋盘格ir图像 (b)卤素照射器显示的的ir图像 (c)从rgb图像提取的标定点 (d) 深度图性的标定点fig 7. ir,rgb和深度图像的标定板fig 8.重建二维平面目标点4.1 学习复杂的剩余误差由观察可知用上述方法标定的kinect仍呈现一些小但是复杂的剩余误差。fig.9显示了这些结果。二维目标已经从0.7到1.3米范围内获取18个不同距离统计剩余误差具有有高度相关性。fig 9.不同距离的噪音图像table 4. 沿着250个水平方向的深度图像行的剩余误差如fig.10(a)。剩余误差在中心点处一直为正,在圆周处为负。为了补偿剩余误差,我们构造了一个z的校正值,它用来作为剩余图像的像素级的均值。z校正图像从由eqn.6计算得出的xir 矩阵z坐标差分出来。 为了验证这种校正方法,z校正图像从偶数图像的剩余误差中构建之后再运用到奇数图像再到深度图像。标准的剩余误差的偏移值减小了。 从5.1中描述的实验知,在运用z校正图像到kinect测量后,剩余误差减少了大约0.25mm,见fig.10(b)。对横跨视场的4410个点进行了剩余误差统计。(a)fig.10 复杂剩余误差的校正5 验证5.1kinect相机与slr立体视觉和3d tof的比较我们对由kinect和slr及3d tof获取的二维平面目标测量值进行了比较。kinect和slr(图像尺寸:23041536像素)牢固安装和标定在一起。slr按【2】中的方法提取出重建的标定点及由【6】中的提到的最小二乘三角划分来划分成三角形。他们在14个目标的每一个的315个控制标定点中测算出相同的二维目标。sr-4000 3d tof【13】测量了不同的二维平面目标但这是在有11个目标,每一个具有88个控制标定点的相机上,可比较的距离范围为:0.9-1.4米。误差e ,如tab.5,它与在相机标定过程中重建的点与传感器返回值之间的欧氏距离相等。slr是最准确的,kinect其次,而sr-4000最差。table 5(a)rgb图像 (b)深度图像5.2 kinect与sfm结合fig.11显示了两张亚像素分辨率的(640480)kinect rgb图像和深度图像。获取50张的rgb-depth图像对的序列,rgb相机的位恣由【17,7】中的方法已经通过计算sfm管道出来。运用kinect标定,真实的图像深度已经计算出并记录在一起。fig.12(a)显示了就kinect rgb图像由多视角立体视觉【9】获得的3d点重建的表面。fig.12(b)显示了通过运用记录下来的kinect 3d数据改进的结果。 fig.13比较了由3d点云重建的表面与对70个kinect3d数据按【9】的表面重建方法重建的表面 (23041536)。kinect 3d数据记录到一个共同坐标系中。这是经由运用于kinect图像数据的sfm【17,7】实现的。我们可以看到当多个测量值被运用时,用kinect得到的结果比多维视角重建的精度更高。(a) 仅视觉数据用来重建图(b)改进后重建图像6.结论我们提出了一个对kinect 3d 测量能力的分析,以及它的标定程序,这个标定流程允许将kinect与sfm结合在一起,这也为kinect开辟了一个新的应用领域。很有趣的看到在多视角的重建中,kinect超越了swissranger sr-4000,接近于3.5m 像素的slr stereo。 (a)左slr图像 (b)kinect真实图 (c)右slr图像(d)多视角重建(e)kinect 3d重建fig.13 kinect与多视角相机的比较第二部分:总结与运用思考本文主要提出一种对kinect相机的分析,设计它的几何模型,提出校正流程和显示它的功能。我们都知道kinect相机是一种功能强大的集ir、rgb和depth相机于一体的摄像机。kinect是微软在2010年6月14日对xbox360体感周边外设正式发布的名字。natal为开发代号。伴随kinect名称的正式发布,kinect还推出了多款配套游戏,包括lucasarts出品的星球大战、mtv推出的跳舞游戏、宠物游戏、运动游戏kinect sports、冒险游戏kinect adventure、赛车游戏joyride等。 在相机所拍摄的图像用于分析时,必须矫正(数学方式)因使用透镜而给针孔模型带来的误差,因此需要测量出透镜的畸变模型以及摄像机的几何模型。这两个模型就定义为摄像机的内参数(上文中提到的intrinsic parameter)。标定需要一个标定目标,任何合适的表征物体都可以作为标定目标,在实际应用中选用棋盘格作为表定目标。将棋盘所在空间的3d几何关系定为外参数。本文各个部分介绍的都是原理方面的内容,而这为我们在运用kinect做实验时提供了理论支撑,而实验的具体步骤本文没有着重描述,具体实验的辅助是验证标定方法和优于其他立体视觉系统的最佳途径,也最有说服力的方式。因此这也为我们研究视觉方向的研究者提供了一个挑战,对此我在参考学习opencv(中文版)的摄像机标定的基础上,拟对kinect相机进行标定,并提取深度图像在matlab上进行仿真。1. 标定原理:d =1/8*(doff - kd) (1)d:为标准视差;doff:为kinect相机给定的补偿值;kd:是kinect的视差。 z = b * f /( 1/8*( doff kd ) (2) z:深度 f : 焦距u,v,wrgb=d*u,v,kd,1ir (3)这个公式将ir图像的u,v坐标转换到rgb图像的坐标系,d为43转换矩阵。2. 提取的深度图、gb图像和仿真图。以上为用kinect相机所做的体感运用的实例,从图中可以看到它能够提取出人体的深度图像,这是基于能够提供深度数据的基础之上。通过本次学习对kinect相机的物理结构、参数标定以及在图像提取等方面比较完整的进行了一次尝试,在下面的研究工作中还将继续探索它的更广应用。最后衷心感谢谭老师给予的一次学习机会,通过这次的学习,锻炼了自己翻译英语文献的能力,提高了对外语专业词汇的理解能力.部分程序附录:#includecv.h#includehighgui.h#includexncppwrapper.h#includeiostream#includestdlib.husing namespace std;void main()/*-读数据-*/file * fp3;/-openni设置-/xn:context mctxt;mctxt.init();mctxt.openfilerecording(d:record1.oni);xn:depthgenerator depth;xn:irgenerator ir;depth.create(mctxt);ir.create(mctxt);xnmapoutputmode nn;nn.nxres = 640;nn.nyres = 480;nn.nfps = 30;/设置帧率的变量/*-指定depth和ir的图像输出模式-*/depth.setmapoutputmode(nn);ir.setmapoutputmode(nn);xn:depthmetadata depthdata;xn:irmetadata irdata;/*-usergenerator-*/xn:scenemetadata scenedata;xn:usergenerator usergor;usergor.create(mctxt);/*xnuint16 id = usergor.getnumberofusers();xnuserid* auserid = new xnuserid(id);*/*-usergenerator-*/*-定义opencv图像-*/iplimage* img = cvcreateimage(cvsize(640,480),8,1);iplimage* irimg = cvcreateimage(cvsize(640,480),8,1);iplimage* uimg = cvcreateimage(cvsize(640,480),8,3);iplimage* imgturn = cvcreateimage(cvsize(640,480),16,1);iplimage* imgturn1 = cvcreateimage(cvsize(640,480),16,1);iplimage* imgturn2 = cvcreateimage(cvsize(640,480),16,1);cvzero(uimg);/*-开始生成数据-*/ mctxt.startgeneratingall();/depth.waitandupdatedata();/*-获取-*/while(!mctxt.waitandupdateall() /*-update data(更新数据)-*/mctxt.waitandupdateall(); /*-1.深度图&ir图生成-*/depth.getmetadata(depthdata);ir.getmetadata(irdata); const xndepthpixel* pdmap=depth.getdepthmap();memcpy(imgturn-imagedata,depthdata.data(),640*480*2);cvconvertscale(imgturn,img,255/255.,0);memcpy(imgturn1-imagedata,irdata.data(),640*480*2); cvconvertscale(imgturn,irimg,255/255.,0);/cvthreshold(img,img,200,255,cv_thresh_binary);cvnamedwindow(深度图像);cvshowimage(深度图像,img);cvnamedwindow(ir图像);cvshowimage(ir图像,irimg);cvwaitkey(27);/xnuint16 nusers = usergor.getnumberofusers(); coutthe users number is :nusers 0 ) /get users id xnuserid* auserid = new xnuserid nusers ; usergor.getusers( auserid , nusers ); for( xnuint16 id = 1 ; id = nusers; id + ) /ui usergor.getuserpixels( id , smd ); for( i = 0; i height/*depthdata.fullyres( )*/;i+ ) ide = i *uimg-height /*depthdata.fullxres( )*/; for( j = 0;j width/*depthdata.fullxres( )*/; j+ ) if( smd( i , j ) != 0 )/* idet = ide + j; z = pdmap idet ; cout深度”: z endl;/* x = ( int ) i; y = ( int ) j;*/ cout 坐标为: ( i , j ) 0 ) /get users id xnuserid* auserid = new xnuserid nusers ; usergor.getusers( auserid , nusers ); /get pixel /usergor.getuserpixels(,smd); /save the real pixel / uchar* imgposition = new uchar uimg-height * uimg-width * 3 ;for( xnuint16 i = 1 ; i imagedata ); /*-查找users-*/ unsigned int upointnum = uimg-height * uimg-width; xnpoint3d* pdepthpointset = new xnpoint3d upointnum ; for( int y = 0; y height; y + ) ide = y * uimg-width; for( int x = 0; x width; x + ) /imgposition += 3*x + y*img.widthstep; /if the pixel belongs to the user pixels,change its rgb valueidet = ide + x; z = pdmapidet;/cout users no.: smd( x, y ) endl;if( smd( x, y ) != 0 )/cout 坐标为: ( x , y , z ) endl;pdepthpointsetidet.x = x;pdepthpointsetidet.y = y;pdepthpointsetidet.z = z;/fprintf( fp,%d %d %fn , x , y , z );/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论