級基于Kinect的人體建模中點云配準研究_第1頁
級基于Kinect的人體建模中點云配準研究_第2頁
級基于Kinect的人體建模中點云配準研究_第3頁
級基于Kinect的人體建模中點云配準研究_第4頁
級基于Kinect的人體建模中點云配準研究_第5頁
免費預覽已結(jié)束,剩余54頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第1章緒 引 三維測量技 非接觸式測量技 國內(nèi)外研究背 Kinect簡 第2章系統(tǒng)環(huán)境的調(diào)配與數(shù)據(jù)的獲 系統(tǒng)環(huán)境的調(diào) 配置Kinect 配置OpenCV及 數(shù)據(jù)的獲取及簡單處 深度數(shù)據(jù)的獲 點云數(shù)據(jù)的獲 第3章骨骼數(shù)據(jù)的處 骨骼數(shù)據(jù)的獲 骨骼數(shù)據(jù)的校 kd-tree算法簡 利用Kd-tree查找最鄰近 第4章基于骨架的點云配 基于骨架的動作變 動作變換算 對變換后點云的優(yōu) 另一種實現(xiàn)方 第5章總結(jié)與展 全文總 工作展 謝 參考文 附錄 外文文獻原 附錄 外文文獻譯 基于Kinect的建模中點云配準研 ,隨著現(xiàn)代三維建模技術(shù)的發(fā)展建模也成為了一個非常重要的課題。運用MAYA、3DMAX等軟件進行直接建模需要耗費大量的時間以及精力,并且針對不建??梢源蟠蠓奖憬5倪^程。本文使用Kinect可以獲取空深度信息的功能,對真實世界模型的重建進行了測量與研究。,首先通過KinectSDK以及OpenNI提供的系統(tǒng)環(huán)境利用Kinect設(shè)備對空間中的的深度圖像深度數(shù)據(jù)骨骼信息進行簡單的識別以及提取。然后將經(jīng)過優(yōu)化的深度圖像與獲取的深度數(shù)據(jù)結(jié)合并形成的點云數(shù)據(jù)。接著,使用一個已經(jīng)提取了骨骼并基于骨骼進行了分塊的標準模型的點云,將其與kinect所獲取的骨架信息匹配在中計算出每一塊點云的旋轉(zhuǎn)矩個最大程度近所獲取信息的模型。關(guān)鍵字;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引點云三維坐標進行建模現(xiàn)階段比較成非接觸式的測量方法有基于激光口的非接觸式三維測量設(shè)備體積過大、價格不菲,小型的商家難以成本低地。同時,傳統(tǒng)的三維測量設(shè)備獲取表面特征數(shù)據(jù)的過程十分復雜。所以,易使用、精度高、成本小的三維測量工具有很廣闊的前景。本文Kinect三維測量技測量師通過測量各個部位的尺寸來去頂和群體之間在尺人類學研究、醫(yī)學等提供基礎(chǔ)資料。,隨著時代發(fā)展和社會進步數(shù)據(jù)測量也同樣在不斷的發(fā)展和更新。為了委的體型特征數(shù)字化,用精確的數(shù)據(jù)表示各部位的特征。,三 測量技術(shù)與傳統(tǒng)的手 測量技術(shù)相比較最主要的特點是快速非接觸式測量技非接觸式三維測量技術(shù)(interactive3Dwholebodyscannersystem)全身掃描技術(shù)是通過應(yīng)用光敏設(shè)備捕捉設(shè)備投射到表面的維自動測量彌補了傳統(tǒng)的接觸式測量的不足,是得測量的結(jié)果更加的國內(nèi)外研究背非接觸式三維自動測量師現(xiàn)代化測量技術(shù)的主要特征,對三維測量技術(shù)的研究,、英國、德國和等發(fā)達國家開始的較早,大致70年代中期開始,已研制開發(fā)了一系列三維測量系統(tǒng)。目前主要是CyberwareWB4、Vitronic、TC、TecMath、mat、Hamano以及Hamamatsu等公司產(chǎn)品:。CyberwareWB4掃描儀是世界上最早的掃描儀系統(tǒng)之一。這個系統(tǒng)是用多個激光測距(由激光和CCD儀組成對站立在測量想內(nèi)的被測者從多個方位進量機接受激光光束射到表面的反射光通過受光位置、時間間隔、光軸角度,與測距儀同步移動時,可通過計算機算出同一高度若干點的坐標,從而可以測得表面的全部數(shù)據(jù)。它產(chǎn)生外表面的高分辨率的數(shù)據(jù)集。這個系統(tǒng)有四個掃描頭被安裝在一個架子上,兩個引擎使得他1-1CyberwareWB4。1-1CyberwareWB4TecMath的產(chǎn)品是數(shù)字化模型‘Ramsis,他是用關(guān)節(jié)連接CAD模型相連來工作空間和可見性等。TecMath研制了一臺人體掃描儀以此來講模型的測量背景最佳化。其將激光條投射到上來檢索的外形,雖熱的邊緣并不能用這種掃面方法來體現(xiàn),但是輸入數(shù)據(jù)Ramsis1-2是這個掃描儀及掃描例子。由于一條制定的告訴現(xiàn)行圖像照相機,對于一個以激光為基礎(chǔ)的系統(tǒng)來說掃描id速度是非2s。1-2TecMathTC2在結(jié)構(gòu)化光柵投射技術(shù)的基礎(chǔ)上研制了掃描儀。這個測量方法通過白光分層輪廓,取得的身體上;光柵式樣的強度在水平方向上以正弦曲線的形式變化,在垂直方向是沒有變化的。正弦曲線式樣的相數(shù)載四步中轉(zhuǎn)變,每步為90°角度,生成場景的四個圖像,使用這些圖像,就可以決定每個像素的相數(shù)。系統(tǒng)使用粗糙的和細的光柵式樣,粗糙的光柵用來測量不明確的表面,而這些表面用細的光柵測量會產(chǎn)生不連續(xù)性。法國Lectra產(chǎn)品是BodyScanner。BodyScanner3D掃描儀。從頭到腳掃描一次需要的時間僅需要8s,系統(tǒng)捕獲形象后,通過電腦產(chǎn)生一個高度精確的三維圖像。,在我國賽博服裝科研中心投入2400啟動了“中國三維熱體數(shù)據(jù)庫”的項目,成為了國內(nèi)規(guī)模最大的。設(shè)備最先進的、專業(yè)技術(shù)水平最高的服裝研究實體,測量結(jié)果使原來的四個號型增加到七個,為今后服裝生產(chǎn)的運作模式——大規(guī)模定制和個性定制,實現(xiàn)企業(yè)量身定制系統(tǒng)打下了堅實的基礎(chǔ)。,Kinect簡上述的測量儀器非常昂貴又難以保養(yǎng)不易對于一些小型的業(yè)購置這樣的一臺儀器可能難以負擔因此本文使用了(微軟20106XBOX360Kinect也不能直接獲取的三維模型但用于一些后,同樣能得到十分近與真實的模型。此外,目前此款Kinect售價不1000,方便攜帶,給快速建模帶來了。,直至今日公司已經(jīng)發(fā)布了第二代的Kinect,其總體性能大幅Kinect,將其系統(tǒng)環(huán)境調(diào)配好,也能完美支持。,如圖1-3所示,從外觀上來看,正面有三個頭以及一個指示燈,指示燈色的RGB數(shù)據(jù)相當于一臺機最右邊的是紅外頭用于接收紅外光源,以獲取空間中物體的深度信息。給出的參數(shù)稱RGB頭最大能獲取1280*960的圖像,而紅外頭可獲取最大640*480的深度圖像。此外,在感外光源以及紅外頭他們的發(fā)射以及感應(yīng)的范圍是互為(如圖1-430圖1-4Kinect紅外頭視KinectLightCoding,顧名思義,就PrimeSenseLightCoding所以,如果事先記錄下了這個光源的感知范圍的所有的散斑圖案,空間中的3D1-52為了獲取研究要用的各種數(shù)據(jù),首先需要為Kinect搭建系統(tǒng)環(huán)境,本文選擇了KinectSDKv1.8這個微軟公司自己提供的SDK進行對Kinect的控制操作。此外,由于SDK的一些缺陷,我們還使用了OpenNI2提供的API獲取了某些數(shù)據(jù)。在圖像的獲取、顯示以及處理方面,我們使用了常用的OpenCVv2.4.9配置KinectKinectforXBOX360,不能直接與電腦連接,需XBOX360(2-1)接上電源方可連接電腦。2-1XBOX接著,便可在官網(wǎng)KinectforWindowsSDKv1.8(包含兩部分KinectStudio和DeveloperToolkit)地址: Kinect的安裝地址是無法修改的,默認到C:\ProgramFiles\SDKs\Kinect路徑中注意安裝SDK之前需要斷開Kinect與VisualStudioSDKKinectWindowsKinect,KinectLED這時候我們就可以打開安裝下的DeveloperToolkitBrowserv1.8.0文件,發(fā)現(xiàn)里面有很多已經(jīng)完成的開發(fā)包,點擊其中一個C++文件并運行,如圖2-2,Kinect2-2KinectSDKVS2012includelib進入VS,首先創(chuàng)建一個空的win32控制臺應(yīng)用程序。然后進入項目屬性,在ProjectsandSolutionsVC++DirectoriesIncludefilesC:\ProgramFiles\SDKs\Kinect\v1.8\inc;再將Libraryfiles中加入C:\ProgramFiles\SDKs\Kinect\v1.8\lib\x86;最后還需要在器的輸入中,增加附加依賴性:Kinect10.lib。到此VS的開發(fā)環(huán)境就配置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等文件。有了上面的環(huán)境配置的經(jīng)驗,OpenNI2便很容易配置了,了相應(yīng)的開發(fā)包后,配置好VS中的include和lib路徑,增加附加依賴屬性openNI.lib就可以了。需要注意的是,要從OpenNI'sredist 中所有文件到你的 (默認為C:\ProgramFiles\OpenNI2\Redist或者數(shù)據(jù)的獲取及簡單處有:的深度信息、骨架信息、點云數(shù)據(jù)。骨骼信息獲取之后需要進行相應(yīng)Kinect深度數(shù)據(jù)的獲1.3Kinect640*480由此我們可以利用所安裝的開發(fā)包進行深度圖像的獲取然opencv需要研究的便是IDepthFrameSource,IDepthFrameReader,IDepthFrame這樣命如圖2-3所示,這三個接口是一環(huán)扣一環(huán)從Kinect中數(shù)據(jù)的2-3首先,我們初始化并且打開了Kinect之后,利用KinectSDK,我們可以向設(shè)備請求打開一個源從當中獲取我們想要的數(shù)這就是Source接口的用途,其中m_pKinecsor是Kinect的總端口然后通過Source端口我們僅Kinect就需要使用Reader接口在電腦端穿件一個端口與之前使用Source獲取的信息源綁定在一起在這之后當我們想信息的時候都可以從這個的端口來獲得,其代碼為:pBodyIndexFrame->CopyFrameDataToArray(cDepthHeight*cDepthWidth,bodyIndexArra到最后,F(xiàn)rame才是真的數(shù)據(jù)的類,他其中的數(shù)據(jù)源源不斷來自于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);其中代碼第一行是創(chuàng)立一個Frame的類,第二行的cDepthHeight為424,cDepthWidth為512,如此便可深度數(shù)據(jù)并進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可獲得原始的深度數(shù)據(jù)以及深度圖像,如圖2-4點云數(shù)據(jù)的獲由于KinectSDK的智能性,它可以自己識別(或某一些物體將其從首先,Kinect征點的“分類”等環(huán)節(jié)。通過這一技術(shù)最終將從背景環(huán)境中區(qū)分出來。Kinect,6這個步驟的過程中,Kinect會自動將這些可以識別的物體進行編碼,將每一個為游戲的體感工具使用時十分有效,因為游戲的生產(chǎn)商只需要識別的部分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經(jīng)過篩選以后,我們就獲得了的點云數(shù)據(jù)了,將這些點用opengl畫出來,可以得到圖2-8所示的圖像,整個人的輪廓清晰可見。2-83需要根據(jù)的動作改變目標點云的位置,那么骨骼的信息是必不可少的,第2章中提到,Kinect最多可以兩個骨骼,可以最多檢測六個人。站立模式可以20個關(guān)節(jié)點,坐著的模式的話,可以10個關(guān)節(jié)點。如圖3-1所圖3-1Kinect骨骼示意在KinectSDK中,對骨骼的具有兩種模式,從圖3-1也可以看出,一種是全身骨架20個點的追蹤,被稱為主動:另一種只能顯示感知用戶的位獲取一組的骨骼信息,因此,在骨骼獲取的時候,不能有干擾的對象存在,KinectFrameSourceReader含了骨架數(shù)據(jù)的所有信息。這些信息中,存在著一個每一個骨架點的數(shù)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能夠追蹤到的骨骼數(shù)量是一個常量。因此我們可以直接為這些數(shù)據(jù)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每一個數(shù)據(jù)流的深度圖彩、KinectcoordinateMapperm_pCoordinateMapper->MapCameraPointToDepthSpace(joints[j].Position,&depthSpacePosit在本文的研究中我們使用一個標準模型并且這個模型已經(jīng)做了骨3-3中獲取的骨骼點個數(shù)并不相同這就造成了骨架點對應(yīng)的因此接下來的16(于標準模型骨架中明顯不存在WRIST、ANKLE這四個點,因此將他們從骨中刪去kd-treekd-tree算法簡kd-tree是一種可以在高中利用的,可以快速查出最鄰近點的一項查K-dimensionaltreeK,Kd-tree事實上是一個二叉樹,其中存放了一些需要用到的K維數(shù)據(jù)。這個么,要想知道Kd-tree的有關(guān)算法須要首先了解一下二叉查找樹(BST)點的值;它的左、右也分別為二叉排序樹。如圖3-4就是一個簡單的二叉查,Kd-treeK我們就需要將整個的KKd-treeKiKi一個值將整個K分割成兩部分。其中,這個超平面的一邊的數(shù)據(jù)中的KiKiKd-tree3-5Kd-tree顯然,在劃分過程中需要注意兩個問題:1.在K維數(shù)據(jù)中選擇哪一個維度的對于第一個問題,最簡單的方法就是一個接著一個維度來劃分,就比如說xz限度做到合理劃分。明確了這兩個問題以后,Kd-tree3-6輸出:Kdk-d1.IfData-setk-d差。以SURF特征為例,描述子為64維,可計算64個方差。挑選出最大值,對應(yīng)的維就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,即遞歸調(diào)用(datalef,Left_Rngeright=由(dataright,Right_Range)建立的k-dtree,即調(diào)用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錄下每個中包含的所有數(shù)據(jù)在該對應(yīng)的維度k上的邊界參數(shù)[min,max];第二種是在構(gòu)造樹的過程中,記錄下每個所在的分割維度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本章將完成本次研究的最后一步也就是把基于骨架分塊好的標準模型套到目標骨架上,以實現(xiàn)最終的建模。簡單的來說,這個過程分為兩部分。首先根據(jù)提取的骨架,將標準模型骨架的動作變換到同樣的動作,當然,隨動作變換在第三章我們提到過,在獲取骨架數(shù)據(jù)的時候,我們控制了必須面對鏡頭,并且,我們使用的標準模型也是面對機視角的。這種對應(yīng)是很重要Kd-treeSHOULDER_CENTERHIP_CENTERalbowrightalbowleftkneeleftkneerightwristleft、wristright、ankleleft、ankleright,4-1,到的仿射變換將兩條線段對齊,但是無論如何我們需要保證的是獲取時必須面對鏡頭,才能保證兩個骨架變換的X、Y、Z軸是相互平行的,變換才能一一對應(yīng)。,當我們變換某一個骨架點時,兩者的比較才有意義,考慮到工作平臺的簡便性,本實驗中選擇了來幫助我們快速方便地完成條線段在空間中的方向向量,設(shè)第一條線段兩端點 (x2s,y2s,z2s),(x2e,y2e,z2e),那么這兩條線段的方向向量就為(x1e-x1s,y1e-y1s,z1e- (x2e-x2s,y2e-y2s,z2e-z2s)。簡單記(x1,y1,z1),(x2,y2,z2),首先我們可以求出最后要旋轉(zhuǎn)的角度,也就是這兩個向量的夾角,已知這個三角形的三個頂點的坐標(加上坐標原點,利用余弦定計算過程如下:a*b=x1x2+y1y2+z1z2|a(x1^2+y1^2+z1^2)|bcloseall closeall -dirct(2), holdonholdon可以看出來,利用進行云數(shù)據(jù)的計算是非常方便的。知道了方法232的位置后再繼續(xù)操作,這是就需要包括編號為3的骨架點對應(yīng)的點云。最后變換好的標準模型如圖4-24-4對變換后點云的優(yōu)示其變換的程度。這個系數(shù)從0-1依次增加,為了方便起見,本文選擇了線性增4-5在第三章中我們曾提到過一種Kd-tree算法他能很有效的求出目標數(shù)據(jù)距于Kd-tree進行遠近的判斷分類,然后再將約束條件加上,本文在這個方面沒有四臺經(jīng)過校準的Kinect同時獲取一個的各方位的點云數(shù)據(jù),并且連續(xù)取30(1s)使一個人的模型清晰可見了。。文獻提出了一種基于Kinect的快速建模方式使用4臺Kinect從不同視角同步掃描,用戶僅需站立在Kinect前數(shù)秒即可完成掃描過程。將得到的人噪聲去除;去噪后的點云作為可變模型擬合算法的輸入,使用SCAPE模型和迭代最近點(iteratedclosestpoint,ICP)查找方法。將一個標準模型逐步迭代變形到掃描的點云的過程中,重建時要解決非剛性形變的點云注冊問題。為了避免在抓取數(shù)據(jù)時出現(xiàn)非剛性形變,文獻采用在前后各設(shè)置2臺Kinect的策略,以保證在3S內(nèi)完成數(shù)據(jù)的抓取。文獻重建系統(tǒng)不僅克服了深度機的缺點而且能夠快速重建出高質(zhì)量的三維模型。其中SCAPE(shapecompletionandanimationofpeople)模型是通過改變標準模型的體型和,將標準模型變形到目標模型。更一般地說,SCAPE模型將標準模型參數(shù)化成體型參數(shù)和參數(shù)兩部分這2個參數(shù)決定變形過程中的剛性變化和非剛性變化。文獻使用一個具有550個模型的數(shù)據(jù)庫,通過學習得到了SCAPE模型將一個標準模型參數(shù)化后指定體型參數(shù)和 。,型變形到目標點云。在SCAPE模型中的非剛性變化通過線性預測值從數(shù)據(jù)庫中建模出參數(shù)的變元。而體型參數(shù)的模型由主成分分析(principalcomponentysis,PCA)在數(shù)據(jù)庫中得到。,Step2:ySCAPEyβ和姿Step3:C(p,q),β和αY7.y7Y則迭代終止,Yy=Y7,進行下一次迭代。5Kinect出建議并修改?;诮陙肀姸囝I(lǐng)域?qū)τ诮5男枨笤黾颖疚奶岢隽艘环N可以快速根據(jù)現(xiàn)實深度信息以及骨架數(shù)據(jù)進行建模的方法此方法基于微軟公司研發(fā)的Kinect體感設(shè)備,使得建模過程廉價、便捷、迅速。這種方式省去了傳統(tǒng)建模方MAYA、3DMAX在本文的實驗期間,首先對Kinect本身的功能進行了了解,包括其安裝方能夠順利接上電腦,并使用SDK提供的現(xiàn)有程序進行了測試。接著,我們對電腦的系統(tǒng)環(huán)境進行了配置,使得其能夠完美支持Kinect并且可以從中拿取想要的數(shù)據(jù)。在這里我們對Kinect自帶的SDK進行了學習,深要,又對OpenNI2這個借口進行了初步的了解,取其獲取點云數(shù)據(jù)的簡單方法將而后就要開始骨骼數(shù)據(jù)的獲這就要學習Kinect的骨骼數(shù)據(jù)流的提取,這里使用了他人制作的基于骨骼分塊好的標準模型的點云將其骨骼與獲取Kd-tree最后也是最重要的部分通過單純的空間幾何的數(shù)學計算使用不出現(xiàn)斷裂,盡力做到近真實。解決并且對于最后的結(jié)果還能進行后續(xù)的處理使之更加近真實的。Kinect3Kinect以至于從獲取的點云來看也只能勉強看出一個點云數(shù)據(jù)也存在著許許點云數(shù)據(jù),這樣的數(shù)據(jù)更加精準清晰,易于處理。再者,可以使用更新一代的Kinect最后,在動作變換中算法具有一定的限制性。首先,使用的標準當標準模型的動作對應(yīng)好獲取的骨架之后需要將其套入獲取的骨架上,將兩個的點云重合(這里必須獲取了整個的點云,然后,再根據(jù)Kd-tree的算法,將標準模型的點映射到獲取的點云上。這樣一來,不僅能避免大幅度的失真,而且可以真實再現(xiàn)數(shù)據(jù),能根據(jù)人的體型變化而變化。 謝莫展之時,我會去請教老師。老師總是放下手中的事情,喊我去面對面在此外,我還要感謝周元峰導師帶領(lǐng)的潘曉,幫助我調(diào)試程序并指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深度相機的室內(nèi)三維場景重構(gòu)[D].大連:大連理工大學,2013..立體視覺技術(shù)的應(yīng)用與發(fā)展[J].20103(450-YangR,ChengS,YangW,etal.Robustandaccuratesurfacemeasurementusingstructuredlight[J].IEEETransactionsonInstrumentationandMeasurement,2008,57(6):1275-1280.余濤.Kinect應(yīng)用開發(fā)實戰(zhàn):用最自然的方式與機器[M].機械工業(yè)社,胡馨月.面向個性化學習的體感計算研宂[D].卜富清.基于人工神經(jīng)網(wǎng)絡(luò)的圖像識別和分類[D].:理工大王亞平,.非接觸式激光測量點云數(shù)據(jù)預處理[J].現(xiàn)代機械,2005,3:王霄.逆向工程技術(shù)及其應(yīng)用[M金濤,童水光.逆向工程技術(shù)[M[17],高建民,李言.基于逆向工程的點云數(shù)據(jù)與處理技術(shù)的研宂[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-,周儒榮,,周來水.海量測量數(shù)據(jù)簡化技術(shù)研宄[J].計算機輔助設(shè)計與圖形學學報,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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論