级基于Kinect的人体建模中点云配准研究_第1页
级基于Kinect的人体建模中点云配准研究_第2页
级基于Kinect的人体建模中点云配准研究_第3页
级基于Kinect的人体建模中点云配准研究_第4页
级基于Kinect的人体建模中点云配准研究_第5页
免费预览已结束,剩余54页可下载查看

下载本文档

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

文档简介

第1章绪 引 三维测量技 非接触式测量技 国内外研究背 Kinect简 第2章系统环境的调配与数据的获 系统环境的调 配置Kinect 配置OpenCV及 数据的获取及简单处 深度数据的获 点云数据的获 第3章骨骼数据的处 骨骼数据的获 骨骼数据的校 kd-tree算法简 利用Kd-tree查找最邻近 第4章基于骨架的点云配 基于骨架的动作变 动作变换算 对变换后点云的优 另一种实现方 第5章总结与展 全文总 工作展 谢 参考文 附录 外文文献原 附录 外文文献译 基于Kinect的建模中点云配准研 ,随着现代三维建模技术的发展建模也成为了一个非常重要的课题。运用MAYA、3DMAX等软件进行直接建模需要耗费大量的时间以及精力,并且针对不建模可以大大方便建模的过程。本文使用Kinect可以获取空深度信息的功能,对真实世界模型的重建进行了测量与研究。,首先通过KinectSDK以及OpenNI提供的系统环境利用Kinect设备对空间中的的深度图像深度数据骨骼信息进行简单的识别以及提取。然后将经过优化的深度图像与获取的深度数据结合并形成的点云数据。接着,使用一个已经提取了骨骼并基于骨骼进行了分块的标准模型的点云,将其与kinect所获取的骨架信息匹配在中计算出每一块点云的旋转矩个最大程度近所获取信息的模型。关键字;Kinect;建模;点云;骨骼配准Withthedevelopmentofmodernthree-dimensionalmodelingtechnology,thehumanmodelinghas eaveryimportanttopic.CarryingonthedirectmodelingbyusingMAYA,3DMAXandothersoftwarerequiresalotoftimeandenergy,inaddition,it'sdifficulttoachieveflexibletransformationfordifferentshapeandmovementofthehumanbody.Therefore,usingthehumanbodysensorstoconductzationmodelingcangreatlyfacilitatethemodelingprocessofhumanbody.Inthispaper,usingKinectcanobtainthefunctionofthedeepeninformationinthespace,thustocarryonthesurveyandresearchonthereconstructionofthehumanbodymodelintherealworld.Firstofall,throughthesystemenvironmentprovidedbyKinectSDKandOpenNI,usetheKinectequipmenttocarryonrecognitionandextractiontothedepthimage,depthdata,andbonesinformationofhumanbody.Then,combinethebodydepthimagethathasbeenoptimizedwiththeobtainedthedepthdatatoformthepointclouddataofhumanbody.Afterwards,matchitwiththebonesinformationobtainedfromkinectbyusingapointcloudofastandardbodymodelingthathasbeenextractedtheboneandhasbeenseparatedbasedonthebones,thencalculatetherotationmatrixofeachpieceofpointcloudtoconductthemotioncorrection.Finally,usethequaternionmethodtocalculatethetransformationmatrixofthetwoskeletons,thustoformamodelofthehumanbodythatissimilartotheobtainedapproximationtoKeyword:Kinect;PointCloud;Humanmodeling;SkeletonCalibration;1引点云三维坐标进行建模现阶段比较成非接触式的测量方法有基于激光口的非接触式三维测量设备体积过大、价格不菲,小型的商家难以成本低地。同时,传统的三维测量设备获取表面特征数据的过程十分复杂。所以,易使用、精度高、成本小的三维测量工具有很广阔的前景。本文Kinect三维测量技测量师通过测量各个部位的尺寸来去顶和群体之间在尺人类学研究、医学等提供基础资料。,随着时代发展和社会进步数据测量也同样在不断的发展和更新。为了委的体型特征数字化,用精确的数据表示各部位的特征。,三 测量技术与传统的手 测量技术相比较最主要的特点是快速非接触式测量技非接触式三维测量技术(interactive3Dwholebodyscannersystem)全身扫描技术是通过应用光敏设备捕捉设备投射到表面的维自动测量弥补了传统的接触式测量的不足,是得测量的结果更加的国内外研究背非接触式三维自动测量师现代化测量技术的主要特征,对三维测量技术的研究,、英国、德国和等发达国家开始的较早,大致70年代中期开始,已研制开发了一系列三维测量系统。目前主要是CyberwareWB4、Vitronic、TC、TecMath、mat、Hamano以及Hamamatsu等公司产品:。CyberwareWB4扫描仪是世界上最早的扫描仪系统之一。这个系统是用多个激光测距(由激光和CCD仪组成对站立在测量想内的被测者从多个方位进量机接受激光光束射到表面的反射光通过受光位置、时间间隔、光轴角度,与测距仪同步移动时,可通过计算机算出同一高度若干点的坐标,从而可以测得表面的全部数据。它产生外表面的高分辨率的数据集。这个系统有四个扫描头被安装在一个架子上,两个引擎使得他1-1CyberwareWB4。1-1CyberwareWB4TecMath的产品是数字化模型‘Ramsis,他是用关节连接CAD模型相连来工作空间和可见性等。TecMath研制了一台人体扫描仪以此来讲模型的测量背景最佳化。其将激光条投射到上来检索的外形,虽热的边缘并不能用这种扫面方法来体现,但是输入数据Ramsis1-2是这个扫描仪及扫描例子。由于一条制定的告诉现行图像照相机,对于一个以激光为基础的系统来说扫描id速度是非2s。1-2TecMathTC2在结构化光栅投射技术的基础上研制了扫描仪。这个测量方法通过白光分层轮廓,取得的身体上;光栅式样的强度在水平方向上以正弦曲线的形式变化,在垂直方向是没有变化的。正弦曲线式样的相数载四步中转变,每步为90°角度,生成场景的四个图像,使用这些图像,就可以决定每个像素的相数。系统使用粗糙的和细的光栅式样,粗糙的光栅用来测量不明确的表面,而这些表面用细的光栅测量会产生不连续性。法国Lectra产品是BodyScanner。BodyScanner3D扫描仪。从头到脚扫描一次需要的时间仅需要8s,系统捕获形象后,通过电脑产生一个高度精确的三维图像。,在我国赛博服装科研中心投入2400启动了“中国三维热体数据库”的项目,成为了国内规模最大的。设备最先进的、专业技术水平最高的服装研究实体,测量结果使原来的四个号型增加到七个,为今后服装生产的运作模式——大规模定制和个性定制,实现企业量身定制系统打下了坚实的基础。,Kinect简上述的测量仪器非常昂贵又难以保养不易对于一些小型的业购置这样的一台仪器可能难以负担因此本文使用了(微软20106XBOX360Kinect也不能直接获取的三维模型但用于一些后,同样能得到十分近与真实的模型。此外,目前此款Kinect售价不1000,方便携带,给快速建模带来了。,直至今日公司已经发布了第二代的Kinect,其总体性能大幅Kinect,将其系统环境调配好,也能完美支持。,如图1-3所示,从外观上来看,正面有三个头以及一个指示灯,指示灯色的RGB数据相当于一台机最右边的是红外头用于接收红外光源,以获取空间中物体的深度信息。给出的参数称RGB头最大能获取1280*960的图像,而红外头可获取最大640*480的深度图像。此外,在感外光源以及红外头他们的发射以及感应的范围是互为(如图1-430图1-4Kinect红外头视KinectLightCoding,顾名思义,就PrimeSenseLightCoding所以,如果事先记录下了这个光源的感知范围的所有的散斑图案,空间中的3D1-52为了获取研究要用的各种数据,首先需要为Kinect搭建系统环境,本文选择了KinectSDKv1.8这个微软公司自己提供的SDK进行对Kinect的控制操作。此外,由于SDK的一些缺陷,我们还使用了OpenNI2提供的API获取了某些数据。在图像的获取、显示以及处理方面,我们使用了常用的OpenCVv2.4.9配置KinectKinectforXBOX360,不能直接与电脑连接,需XBOX360(2-1)接上电源方可连接电脑。2-1XBOX接着,便可在官网KinectforWindowsSDKv1.8(包含两部分KinectStudio和DeveloperToolkit)地址: Kinect的安装地址是无法修改的,默认到C:\ProgramFiles\SDKs\Kinect路径中注意安装SDK之前需要断开Kinect与VisualStudioSDKKinectWindowsKinect,KinectLED这时候我们就可以打开安装下的DeveloperToolkitBrowserv1.8.0文件,发现里面有很多已经完成的开发包,点击其中一个C++文件并运行,如图2-2,Kinect2-2KinectSDKVS2012includelib进入VS,首先创建一个空的win32控制台应用程序。然后进入项目属性,在ProjectsandSolutionsVC++DirectoriesIncludefilesC:\ProgramFiles\SDKs\Kinect\v1.8\inc;再将Libraryfiles中加入C:\ProgramFiles\SDKs\Kinect\v1.8\lib\x86;最后还需要在器的输入中,增加附加依赖性:Kinect10.lib。到此VS的开发环境就配置API配置OpenCV首先进入OpenCV的找到合适版本的进行,本文使用了较普遍的2.4.9版本:OPENCV,OPENCVD:\opencv\opencv\build中找到“Path”变量,双击并在变量值的末尾添加:%OPENCV%\x86\vc11\bin。注意,vc10,vc11,vc12VS2010,S2012,VS2013VisualVSVS2012KinectC+Includefiles加入D:\opencv\opencv\build\include;再将Libraryfiles中加入D:\opencv\opencv\build\x86\vc12\lib;最后还需要在器的输入中,增加附加依赖性:opencv_calib3d249d.lib;opencv_contrib249d.lib;opencv_gpu249d.libopencv_highgui249d.libopencv_imgproc249d.libopencv_legacy249d.libopencv_ml249d.libopencv_nonfree249d.libopencv_objdetect249d.libopencv_ocl249d.libopencv_photo249d.libopencv_249d.lib;opencv_stab249d.lib等文件。有了上面的环境配置的经验,OpenNI2便很容易配置了,了相应的开发包后,配置好VS中的include和lib路径,增加附加依赖属性openNI.lib就可以了。需要注意的是,要从OpenNI'sredist 中所有文件到你的 (默认为C:\ProgramFiles\OpenNI2\Redist或者数据的获取及简单处有:的深度信息、骨架信息、点云数据。骨骼信息获取之后需要进行相应Kinect深度数据的获1.3Kinect640*480由此我们可以利用所安装的开发包进行深度图像的获取然opencv需要研究的便是IDepthFrameSource,IDepthFrameReader,IDepthFrame这样命如图2-3所示,这三个接口是一环扣一环从Kinect中数据的2-3首先,我们初始化并且打开了Kinect之后,利用KinectSDK,我们可以向设备请求打开一个源从当中获取我们想要的数这就是Source接口的用途,其中m_pKinecsor是Kinect的总端口然后通过Source端口我们仅Kinect就需要使用Reader接口在电脑端穿件一个端口与之前使用Source获取的信息源绑定在一起在这之后当我们想信息的时候都可以从这个的端口来获得,其代码为:pBodyIndexFrame->CopyFrameDataToArray(cDepthHeight*cDepthWidth,bodyIndexArra到最后,Frame才是真的数据的类,他其中的数据源源不断来自于ReaderKinectSDKpBodyIndexFrame->CopyFrameDataToArray(cDepthHeight*cDepthWidth,bodyIndexArraMatdepthImage.create(480,640,HANDLEdepthEvent=CreateEvent(NULL,TRUE,FALSE,NULL);HANDLEdepthStreamHandle=NULL;namedWindow("depthImage",CV_WINDOW_AUTOSIZE);while(1){If(WaitForSingleObject(colorEvent,0)==0)getColorImage(colorEvent,colorStreamHandle,colorImage);其中代码第一行是创立一个Frame的类,第二行的cDepthHeight为424,cDepthWidth为512,如此便可深度数据并进MatdepthImage.create(480,640,HANDLEdepthEvent=CreateEvent(NULL,TRUE,FALSE,NULL);HANDLEdepthStreamHandle=NULL;namedWindow("depthImage",CV_WINDOW_AUTOSIZE);while(1){If(WaitForSingleObject(colorEvent,0)==0)getColorImage(colorEvent,colorStreamHandle,colorImage);if(WaitForSingleObject(depthEvent,0)==0)getDepthImage(depthEvent,depthStreamHandle,depthImage);imshow("colorImage",colorImage);imshow("depthImage",depthImage);intc=cvWaitKey(1);{std::ofstreamoutfile1;for(inty=0;y<480;y++){constUSHORT*p_depthTmp=for(intx=0;x<640;{USHORTdepthValue=p_depthTmp[x*3/2];SHORTrealDepth =NuiDepthPixelToDepth(depthValue);outfile1<<realDepth<<"}outfile1<<}}}Kinect可获得原始的深度数据以及深度图像,如图2-4点云数据的获由于KinectSDK的智能性,它可以自己识别(或某一些物体将其从首先,Kinect征点的“分类”等环节。通过这一技术最终将从背景环境中区分出来。Kinect,6这个步骤的过程中,Kinect会自动将这些可以识别的物体进行编码,将每一个为游戏的体感工具使用时十分有效,因为游戏的生产商只需要识别的部分if(LockedRect.Pitch!=0{for(inti=0;i<depthImage.rows;{uchar*ptr=uchar*pBuffer=(uchar*)(LockedRect.pBits)+i*LockedRect.Pitch;USHORT*pBufferRun=(USHORT*)pBuffer;for(intj=0;j<depthImage.cols;{intplayer=intdata=(pBufferRun[j]&0xfff8)if(LockedRect.Pitch!=0{for(inti=0;i<depthImage.rows;{uchar*ptr=uchar*pBuffer=(uchar*)(LockedRect.pBits)+i*LockedRect.Pitch;USHORT*pBufferRun=(USHORT*)pBuffer;for(intj=0;j<depthImage.cols;{intplayer=intdata=(pBufferRun[j]&0xfff8)>>ucharimageData=255-(uchar)(256*data/0x0fff);(2) 2-5openni::DevicedevAnyDevice;devAnyDevice.open(openni::ANY_DEVICEStreamstreamDepth;streamDepth.create(devAnyDevice,EPTH);FrameRefframeDepth;streamDepth.readFrame(&frameDepthconstopenni::DevicedevAnyDevice;devAnyDevice.open(openni::ANY_DEVICEStreamstreamDepth;streamDepth.create(devAnyDevice,EPTH);FrameRefframeDepth;streamDepth.readFrame(&frameDepthconstopenni::DepthPixel*pDepth=(constopenni::DepthPixel*)frameDepth.getData();2-6OpenNI2,pdepth=for(inti=0;i<frameDepth.getHeight();{for(intj=0;,pdepth=for(inti=0;i<frameDepth.getHeight();{for(intj=0;j<frameDepth.getWidth();{depthv=pdepth[i*frameDepth.getWidth()+j];CoordinateConverter::convertDepthToWorld(streamDepth,i,j,depthv,&x,&y,&z);xyzdata[i][j][0]=xxyzdata[i][j][1]=yxyzdata[i][j][2]=z}}2-72-7经过筛选以后,我们就获得了的点云数据了,将这些点用opengl画出来,可以得到图2-8所示的图像,整个人的轮廓清晰可见。2-83需要根据的动作改变目标点云的位置,那么骨骼的信息是必不可少的,第2章中提到,Kinect最多可以两个骨骼,可以最多检测六个人。站立模式可以20个关节点,坐着的模式的话,可以10个关节点。如图3-1所图3-1Kinect骨骼示意在KinectSDK中,对骨骼的具有两种模式,从图3-1也可以看出,一种是全身骨架20个点的追踪,被称为主动:另一种只能显示感知用户的位获取一组的骨骼信息,因此,在骨骼获取的时候,不能有干扰的对象存在,KinectFrameSourceReader含了骨架数据的所有信息。这些信息中,存在着一个每一个骨架点的数0HIP_CENTER,SPINE,SHOULDER_CENTER,HEAD,SHOULDER_LEFTHANDLEskeletonEvent=CreateEvent(NULL,TRUE,FALSE,NULL);hr=NuiSkeletonTrackingEnable(skeletonEvent,0);if(FAILED(hr){cout<<"Couldnotopencolorimagestream return}namedWindow("skeletonImage",CV_WINDOW_AUTOSIZE);{NUI_SKELETON_FRAMEskeletonFrame={0};boolbFoundSkeleton=false;if(WaitForSingleObject(skeletonEvent,{hr=NuiSkeletonGetNextFrame(0,&skeletonFrame);if(SUCCEEDED(hr)){Kinect能够追踪到的骨骼数量是一个常量。因此我们可以直接为这些数据skeletonFrame,每一次处理HANDLEskeletonEvent=CreateEvent(NULL,TRUE,FALSE,NULL);hr=NuiSkeletonTrackingEnable(skeletonEvent,0);if(FAILED(hr){cout<<"Couldnotopencolorimagestream return}namedWindow("skeletonImage",CV_WINDOW_AUTOSIZE);{NUI_SKELETON_FRAMEskeletonFrame={0};boolbFoundSkeleton=false;if(WaitForSingleObject(skeletonEvent,{hr=NuiSkeletonGetNextFrame(0,&skeletonFrame);if(SUCCEEDED(hr)){for(inti=0;i<NUI_SKELETON_COUNT;i++ NUI_SKELETON_TRACKING_STATEtrackingState=skeletonFif(trackingState==NUI_SKELETON_TRACKED{bFoundSkeleton=}}}if(!bFoundSkeleton{}for(inti=0;i<NUI_SKELETON_COUNT;i++{if(skeletonFrame.SkeletonData[i].eTrackingState==NUI_SKELETON_TRACKEDON_SHOULDER_CENTER]!=NUI_SKELETON_POSITION_NOT_TRACKED){floatfx,for(intj=0;j<NUI_SKELETON_POSITION_COUNT; onData[i].SkeletonPositions[j],&fx,&fy);skeletonPoint[i][j].x=(int)fx*2;skeletonPoint[i][j].y=}for(intj=0;j<NUI_SKELETON_POSITION_COUNT;{if(skeletonFrame.SkeletonData[i].eSkeletonPositionTrackingState[j]!=NUI_SKELETON_POSITION_NOT_TRACKED){circle(skeletonImage,skeletonPoint[i][j],3,cvScalar(0,255,255),1,tracked[i]=}}drawSkeleton(skeletonImage,skeletonPoint[i],}}imshow("skeletonImage",skeletonImage);//}{cout<<"Bufferlengthofreceivedtextureis}}return0;}HIP_CENTER,3-2m_pCoordinateMapper->MapCameraPointToDepthSpace(joints[j].Position,&depthSpacePosit最后我们不能忽略了一点就是Kinect每一个数据流的深度图彩、KinectcoordinateMapperm_pCoordinateMapper->MapCameraPointToDepthSpace(joints[j].Position,&depthSpacePosit在本文的研究中我们使用一个标准模型并且这个模型已经做了骨3-3中获取的骨骼点个数并不相同这就造成了骨架点对应的因此接下来的16(于标准模型骨架中明显不存在WRIST、ANKLE这四个点,因此将他们从骨中删去kd-treekd-tree算法简kd-tree是一种可以在高中利用的,可以快速查出最邻近点的一项查K-dimensionaltreeK,Kd-tree事实上是一个二叉树,其中存放了一些需要用到的K维数据。这个么,要想知道Kd-tree的有关算法须要首先了解一下二叉查找树(BST)点的值;它的左、右也分别为二叉排序树。如图3-4就是一个简单的二叉查,Kd-treeK我们就需要将整个的KKd-treeKiKi一个值将整个K分割成两部分。其中,这个超平面的一边的数据中的KiKiKd-tree3-5Kd-tree显然,在划分过程中需要注意两个问题:1.在K维数据中选择哪一个维度的对于第一个问题,最简单的方法就是一个接着一个维度来划分,就比如说xz限度做到合理划分。明确了这两个问题以后,Kd-tree3-6输出:Kdk-d1.IfData-setk-d差。以SURF特征为例,描述子为64维,可计算64个方差。挑选出最大值,对应的维就Node-dataData-set'=Data-set\Node-data(除去其中Node-data3.dataleft{dData-set'&&d[split]Node-data[split]}Left_Range={Range&&dataleft}dataright{dData-set'&&d[split]Node-Right_Range={Range&&4.left=由(dataleft,Left_Range)建立的k-dtree,即递归调用(datalef,Left_Rngeright=由(dataright,Right_Range)建立的k-dtree,即调用Range利用Kd-tree查找最邻近char*source_window="Sourceimage";char*warp_window="Warp";char*warp_rotate_window="Warp+Rotate";intmain(intargc,char**argv){Point2fsrcTri[3];Point2fMatrot_mat(2,3,CV_32FC1Matwarp_mat(2,char*source_window="Sourceimage";char*warp_window="Warp";char*warp_rotate_window="Warp+Rotate";intmain(intargc,char**argv){Point2fsrcTri[3];Point2fMatrot_mat(2,3,CV_32FC1Matwarp_mat(2,3,CV_32FC1);Matsrc,warp_dst,warp_rotate_dst;src=imread("Lena.jpg"warp_dst=Mat::zeros(src.rows,src.cols,src.type());srcTri[0]=Point2f(0,0);srcTri[1]=Point2f(src.cols-1,0);srcTri[2]=Point2f(0,src.rows-1);dstTri[0]=Point2f(src.cols*0.0,src.rows*0.33);dstTri[1]=Point2f(src.cols*0.85,src.rows*0.25);dstTri[2]=Point2f(src.cols*0.15,src.rows*0.7);warp_mat=getAffineTransform(srcTri,dstTriwarpAffine(src,warp_dst,warp_mat,warp_dst.size());Pointcenter=Point(warp_dst.cols/2,warp_dst.rows/2);doubleangle=-50.0;//doublescale=0.6;doublescale=1;rot_mat=getRotationMatrix2D(center,angle,scale);warpAffine(warp_dst,warp_rotate_dst,rot_mat,warp_dst.size());namedWindow(source_window,CV_WINDOW_AUTOSIZE);imshow(source_window,src);namedWindow(warp_window,CV_WINDOW_AUTOSIZE);imshow(warp_window,warp_dst);namedWindow(warp_rotate_window,CV_WINDOW_AUTOSIZE);imshow(warp_rotate_window,warp_rotate_dst);return}Kd-treeKd-tree录下每个中包含的所有数据在该对应的维度k上的边界参数[min,max];第二种是在构造树的过程中,记录下每个所在的分割维度k和分割值m(k,m,目标点Q与的距离则为|Q(k)-m|。KDTree::_HyperRectangle{assert(_sizeKDTree::_HyperRectangle{assert(_size>assert(_dims>_Examplar_Examplarfor(int{mn.dataAt(j)=mx.dataAt(j)=}for(int{for(int{if((*this)[i][j]<mn[j]mn[j]=if((*this)[i][j]>mx[j]mx[j]=}}_HyperRectanglehr(mx,return}std::pair<KDTree::_Examplar,double>KDTree::KDTree::findNearest_i(KDTreeNode*root,_Examplartarget){KDTreeNode*pSearch=root;std::vector<KDTreeNode*>search_path;_Examplarnearest;doublemax_dist;while(pSearch!=NULL){ints=pSearch->splitDim();if(target[s]<=pSearch-{pSearch=pSearch-}{pSearch=pSearch-}}nearest=search_path.back()->getDomElt();max_dist=Distance_exm(nearest,target);{KDTreeNode*pBack=search_path.back();if(pBack->_left_child==NULL&&pBack->_right_child=={if(Distance_exm(nearest,target)>Distance_exm(pBack->getDomElt(),et){nearest=pBack-max_dist=Distance_exm(pBack->getDomElt(),}}{

ints=pBack-if(abs(pBack->getDomElt()[s]-target[s])<{target)

if(Distance_exm(nearest,target)>Distance_exm(pBack-{nearest=pBack-max_dist=Distance_exm(pBack->getDomElt(),}if(target[s]<=pBack->getDomElt()[s])pSearch=pBack->_right_child;pSearch=pBack-if(pSearch!=NULL)}}}std::pair<_Examplar,double>res(nearest,max_dist);returnres;}intKDTree::KDTree::findNearest_range(KDTreeNode*root,_Examplartarget,doublerastd::vector<std::pair<_Examplar,double>>&res_nearest{if(root==NULL)return0;doubledist_sq,intret,added_res=0;dist_sq=0;dist_sq=Distance_exm(root->getDomElt(),target);if(dist_sq<=range){std::pair<_Examplar,double>temp(root->getDomElt(),dist_sq);added_res=}dx=target[root->splitDim()]-root->getDomElt()[root-ret=findNearest_range(dx<=0.0?root->_left_child:root->_right_child,target,range,res_nearest);if(ret>=0&&fabs(dx)<range)added_res+=ret=findNearest_range(dx<=0.0?root->_right_child:root->_left_child,target,range,res_nearest);}added_res+=ret;returnadded_res;}163-4本章将完成本次研究的最后一步也就是把基于骨架分块好的标准模型套到目标骨架上,以实现最终的建模。简单的来说,这个过程分为两部分。首先根据提取的骨架,将标准模型骨架的动作变换到同样的动作,当然,随动作变换在第三章我们提到过,在获取骨架数据的时候,我们控制了必须面对镜头,并且,我们使用的标准模型也是面对机视角的。这种对应是很重要Kd-treeSHOULDER_CENTERHIP_CENTERalbowrightalbowleftkneeleftkneerightwristleft、wristright、ankleleft、ankleright,4-1,到的仿射变换将两条线段对齐,但是无论如何我们需要保证的是获取时必须面对镜头,才能保证两个骨架变换的X、Y、Z轴是相互平行的,变换才能一一对应。,当我们变换某一个骨架点时,两者的比较才有意义,考虑到工作平台的简便性,本实验中选择了来帮助我们快速方便地完成条线段在空间中的方向向量,设第一条线段两端点 (x2s,y2s,z2s),(x2e,y2e,z2e),那么这两条线段的方向向量就为(x1e-x1s,y1e-y1s,z1e- (x2e-x2s,y2e-y2s,z2e-z2s)。简单记(x1,y1,z1),(x2,y2,z2),首先我们可以求出最后要旋转的角度,也就是这两个向量的夹角,已知这个三角形的三个顶点的坐标(加上坐标原点,利用余弦定计算过程如下:a*b=x1x2+y1y2+z1z2|a(x1^2+y1^2+z1^2)|bcloseall closeall -dirct(2), holdonholdon可以看出来,利用进行云数据的计算是非常方便的。知道了方法232的位置后再继续操作,这是就需要包括编号为3的骨架点对应的点云。最后变换好的标准模型如图4-24-4对变换后点云的优示其变换的程度。这个系数从0-1依次增加,为了方便起见,本文选择了线性增4-5在第三章中我们曾提到过一种Kd-tree算法他能很有效的求出目标数据距于Kd-tree进行远近的判断分类,然后再将约束条件加上,本文在这个方面没有四台经过校准的Kinect同时获取一个的各方位的点云数据,并且连续取30(1s)使一个人的模型清晰可见了。。文献提出了一种基于Kinect的快速建模方式使用4台Kinect从不同视角同步扫描,用户仅需站立在Kinect前数秒即可完成扫描过程。将得到的人噪声去除;去噪后的点云作为可变模型拟合算法的输入,使用SCAPE模型和迭代最近点(iteratedclosestpoint,ICP)查找方法。将一个标准模型逐步迭代变形到扫描的点云的过程中,重建时要解决非刚性形变的点云注册问题。为了避免在抓取数据时出现非刚性形变,文献采用在前后各设置2台Kinect的策略,以保证在3S内完成数据的抓取。文献重建系统不仅克服了深度机的缺点而且能够快速重建出高质量的三维模型。其中SCAPE(shapecompletionandanimationofpeople)模型是通过改变标准模型的体型和,将标准模型变形到目标模型。更一般地说,SCAPE模型将标准模型参数化成体型参数和参数两部分这2个参数决定变形过程中的刚性变化和非刚性变化。文献使用一个具有550个模型的数据库,通过学习得到了SCAPE模型将一个标准模型参数化后指定体型参数和 。,型变形到目标点云。在SCAPE模型中的非刚性变化通过线性预测值从数据库中建模出参数的变元。而体型参数的模型由主成分分析(principalcomponentysis,PCA)在数据库中得到。,Step2:ySCAPEyβ和姿Step3:C(p,q),β和αY7.y7Y则迭代终止,Yy=Y7,进行下一次迭代。5Kinect出建议并修改。基于近年来众多领域对于建模的需求增加本文提出了一种可以快速根据现实深度信息以及骨架数据进行建模的方法此方法基于微软公司研发的Kinect体感设备,使得建模过程廉价、便捷、迅速。这种方式省去了传统建模方MAYA、3DMAX在本文的实验期间,首先对Kinect本身的功能进行了了解,包括其安装方能够顺利接上电脑,并使用SDK提供的现有程序进行了测试。接着,我们对电脑的系统环境进行了配置,使得其能够完美支持Kinect并且可以从中拿取想要的数据。在这里我们对Kinect自带的SDK进行了学习,深要,又对OpenNI2这个借口进行了初步的了解,取其获取点云数据的简单方法将而后就要开始骨骼数据的获这就要学习Kinect的骨骼数据流的提取,这里使用了他人制作的基于骨骼分块好的标准模型的点云将其骨骼与获取Kd-tree最后也是最重要的部分通过单纯的空间几何的数学计算使用不出现断裂,尽力做到近真实。解决并且对于最后的结果还能进行后续的处理使之更加近真实的。Kinect3Kinect以至于从获取的点云来看也只能勉强看出一个点云数据也存在着许许点云数据,这样的数据更加精准清晰,易于处理。再者,可以使用更新一代的Kinect最后,在动作变换中算法具有一定的限制性。首先,使用的标准当标准模型的动作对应好获取的骨架之后需要将其套入获取的骨架上,将两个的点云重合(这里必须获取了整个的点云,然后,再根据Kd-tree的算法,将标准模型的点映射到获取的点云上。这样一来,不仅能避免大幅度的失真,而且可以真实再现数据,能根据人的体型变化而变化。 谢莫展之时,我会去请教老师。老师总是放下手中的事情,喊我去面对面在此外,我还要感谢周元峰导师带领的潘晓,帮助我调试程序并指BUG就是提取的。还有我的队友吴雪榕同学,我们进行的是类似的课题,虽然她并且,她做了标准模型基于骨架的点云分类这一块工作,才使得我的研究能 SurmannH,NüchterA,HertzbergJ.Anautonomousmobilerobotwitha3Dlaserrangefinderfor3Dexplorationanddigitalizationofindoorenvironments[J].RoboticsandAutonomousSystems,2003,45(3):181-198.ThrunS,BurgardW,FoxD.Areal-timealgorithmformobilerobotmapwithapplicationstomulti-robotand3Dmap[C]//RoboticsandAutomation,2000.Proceedings.ICRA'00.IEEEInternationalConferenceon.IEEE,2000,1:321-328.globalconstraints[C].ProceedingsoftheTwentiethNationalConferenceonArtificialMayS,DroeschelD,HolzD,etal.Three-dimensionalmapwithtime-of-flightcameras[J].JournalofFieldRobotics,2009,26(11‐12):934-965.NistérD.Anefficientsolutiontothefive-pointrelativeposeproblem[J].PatternysisandMachineInligence,IEEETransactionson,2004,26(6):756-770.宋诗超.基于Kinect的三维建模与测量的研究[D].:东华大学,.基于Kinect深度相机的室内三维场景重构[D].大连:大连理工大学,2013..立体视觉技术的应用与发展[J].20103(450-YangR,ChengS,YangW,etal.Robustandaccuratesurfacemeasurementusingstructuredlight[J].IEEETransactionsonInstrumentationandMeasurement,2008,57(6):1275-1280.余涛.Kinect应用开发实战:用最自然的方式与机器[M].机械工业社,胡馨月.面向个性化学习的体感计算研宂[D].卜富清.基于人工神经网络的图像识别和分类[D].:理工大王亚平,.非接触式激光测量点云数据预处理[J].现代机械,2005,3:王霄.逆向工程技术及其应用[M金涛,童水光.逆向工程技术[M[17],高建民,李言.基于逆向工程的点云数据与处理技术的研宂[J].仪仪表与检测,2005,7:73-MasahiroFujimoto,KomyoKariya.Animprovedmethodfordigitizeddatareductionusinganangleparameter[J].Measurement,1993,12(2):113-122R.R.Martin,I.A.Stroud,A.D.Marshall.Datareductionforreverseengineering.RECCAD,Deliverable1COPERNICUSproject,No1068.ComputerandAutomationInstituteofHungarianAcademyofScinece.January1996.PVeron,JCL6on.StaticpolyhedronsimplificationusingerrormeasurementsComputerAidedDesign,1997.29(4):287-,周儒荣,,周来水.海量测量数据简化技术研宄[J].计算机辅助设计与图形学学报,2001.1外文文献原文3DHumanmodeladaptationbyframeselectionandshape–textureoptimizationMichaelHofmanna,DariuM.GavrilaWepresentanovelapproachfor3Dhumanbodyshapemodeladaptationtoasequenceofmulti-viewimages,givenaninitialshapemodelandinitialposesequence.Inafirststep,themostinformativeframesaredeterminedbyoptimizationofanobjectivefunctionthat izesashape–texturelikelihoodfunctionandaposediversitycriterion(i.e.themodelsurfaceareathatliesclosetotheoccludingcontours),intheselectedframes.Thereafter,abatch-modeoptimizationisperformedoftheunderlyingshape-andpose-parameters,bymeansofanobjectivefunctionthatincludesbothcontourandtexturecuesovertheselectedmulti-viewframes.Usingaboveapproach,weimplementautomaticposeandshapeestimationusingathree-stepprocedure:first,werecoverinitialposesoverasequenceusinganinitial(generic)bodymodel.Bothmodelandposesthenserveasinputtotheabovementionedadaptationprocess.Finally,amoreaccurateposerecoveryisobtainedbymeansoftheadaptedmodel.Wedemonstratetheeffectivenessofourframeselection,modeladaptationandintegratedposeandshaperecoveryprocedureinexperimentsusingbothchallengingoutdoordataandtheHumanEvadataset.Markerless3Dhumanposerecoveryhasmanypotentialapplicationsinareassuchasanimation,interactivegames,motionysisandsurveillance.Overthelastdecade,considerableadvanceshavebeenmadeintheareaofposeinitializationandtracking,however,theproblemof3Dhumanshapeestimationhasreceivedlessattentioncomparison.Suitablemodelsareoftenbeingassumedgivenoracquiredinaseparate,controlledmodelacquisitionstep.Thisdecouplingisnotsurprising,giventhehighdimensionalityofthejointposeandmodelspace;typical3Dhumanposerecoverysystemshave25–50DOFs,andatleastthatmanyparametersformodelingshape.Thepremiseinthispaperisthat,dueitshighdimensionality,wecannotaccurayestimateanapproximateinitialhumanmodel(e.g.anthropometricmean)andastate-of-the-artmulti-viewposerecoverysystem[13,26],wecanobtainposeestimateswhichare,atleastforasubsetofframes,accurateenoughtostartanoptimizationprocesstoimprovethehumanmodelused.Thissubsequentlyfacilitatesmoreaccurateposerecovery.Giventhata naturallytakesdifferentposesandpositionsovertime,onecanselectivelychoosetheframesofasequenceatwhichtoadaptamodel.Notallframesofasequenceareequallysuited;someframesinvolveposeswithdepthambiguity,othersinvolvecaseswherebodypartsareself-occluded.Overall,onewouldliketoselecta(preferablysmall)setofframesthatcontainsacertaindiversityinposesbeingobserved.Thispaperdescribeshowtoselectasuitablesubsetofframesandhowtoperformtheoptimizationoftheshapeandposeparametersrobustly,basedonshapeandtexturecues.Aswewillseeintheexperiments,ourframeselectionnotonlyimprovessystemefficiency(byprocessingonlyasubsetofasequence),italsoleadstoabetterbehavedoptimization.PreviousworkandThereisanextensiveamountofliteratureon3Dhumanposerecovery,seerecentsurveys[13,26,35].Duetospacelimitations,wefocusonliteraturethatrecoversboth3Dhumanposeandshape,i.e.themainpaperscope.Previousworkon3Dhumanposeandshaperecoverycanbedistinguishedbythetypeofshaperepresentationusedandthewayinwhichshapemodeladaptationtakesplace.3Dhumanshapemodelscomeinroughlythreecategories.Thefirstcategoryrepresents3Dhumanshapebyasetofvoxels[8,16,39];eigenspacemodelscanbeusedtointroducepriorsforthesegmentation[16]andtoperformbodypartlabeling[39].Thesecondrepresentsthevariousbodypartsbyvolumetricprimitives[21,25,37].Forexample,Mikicetal.[25]usesellipsoids,whereasSminchisescuandTriggs[37]choosesforsuperquadricswith1077-3142/$-seefrontmatter2011ElsevierInc.Allrights.:10.1016/j.cviu.2011.08.002⇑Correspondingauthorat:EnvironmentPerceptionDepartment,DaimlerResearchandDevelopment,WilhelmRungeSt.11,89081Ulm,Germany.E-mailaddresses:mhof (M.Hofmann),d.m.gavrila@uva.nl(D.M.Gavrila).ComputerVisionandImageUnderstanding115(2011)1559–1570ContentslistsavailableatSciVerseScienceDirectComputerVisionandImageUnderstandingjournalhomepage: cate/cviuglobaldeformations.Thethirdcategoryusessurfacemodels(e.g.meshes)todescribehumanshape[1–4,10,15,17,18,30,33,38,40].Theuseofeigenspacesurfacemodelsforshapeestimation(SCAPE)waspopularizedbyAnguelovetal.[1]andlaterusedinBalanandBlack[2],Balanetal.[3],Guanetal.[17]forjointposeandshapeestimationunderclothing.Eachabove-mentionedcategoryofhuman3Dshaperepresentationcomeswithitsownbenefitsanddrawbacks.Thechoiceforaparticularrepresentationshouldbeguidedbytheapplicationathand.Forexample,anapplicationrequiringadetailedrecoveryofthe3Dhumanshapewillfavortheuseoffinelytesselatedmeshmodels,especiallyifloose(non-rigid)clothingistobeconsidered.Thehighexpressivityofmeshmodelscomes,however,atthepriceofhavingtoestimatecomparativelylargenumberofparameters.Inpractice,thismeansthat3Dmeasurementneedstobepreciseandatahighspatialresolution.Thisinturnleadstoin-doorsettingswithcontrolledbackgrounds,andtheavailabilityofalargenumberofcameras(>5)relativelyup-close,foranaccuratevolumecarving[10,38,40].Insomecases,rangedataismeasuredbymeansofstereovision[30,38].Yetotherworkassumesthatadetailedinitial3Dshapemodelhasbeenobtainedoff-linebylaserscanning[10,18,40].Humanshapemodelsbasedonvolumetricprimitivescometypicallywithalowernumberofparametersandaremoresuitedforthoseapplicationswherehighrealismisnotfeasibleornottheprimaryscope,e.g. trackingfromalargerdistancewithalownumberofcameras(1–3)inasurveillancecontext.Global,eigenspace-basedsurfacemodels(e.g.SCAPE[1–3,17])havetheabilitytoreducethenumberofparameters,possiblybelownumberofparametersneededforthelocalmodelsusingvolumetricprimitives;thisaslongasaparticulartestinstanceiswelldescribedbythemodesofvariationinthetrainingset(atrainingsetofbodyscansmighthowevernotcompactlyrepresentallclothedhumans,e.g.thoseinwidejac

温馨提示

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

评论

0/150

提交评论