<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 超強實(shí)操!手把手教學(xué)Kinect深度圖與RGB攝像頭的標定與配準

超強實(shí)操!手把手教學(xué)Kinect深度圖與RGB攝像頭的標定與配準

發(fā)布人:計算機視覺(jué)工坊 時(shí)間:2022-06-17 來(lái)源:工程師 發(fā)布文章

作者 | aipiano @CSDN

編輯 | 3D視覺(jué)開(kāi)發(fā)者社區


導讀

Kinect作為微軟推出的XBOX360體感周邊外設,具有獲取深度信息的能力。但由于Kinect自身RGB攝像頭分辨率有限,其清晰度也略低,對于較高要求的開(kāi)發(fā)者來(lái)說(shuō)不夠適用。因此,很多開(kāi)發(fā)者都會(huì )使用第三方攝像頭代替Kinect攝像頭,但是二者之間如何配準一直是個(gè)問(wèn)題。本篇就“如何將Kinect的深度圖與第三方攝像頭的RGB圖像對準”的問(wèn)題進(jìn)行了詳細地講解與手把手地教學(xué),簡(jiǎn)單易懂,十分推薦閱讀。


自從有了Kinect,根據深度圖提取前景就非常方便了。因此出現了很多虛擬現實(shí)、視頻融合等應用。但是,Kinect自身的RGB攝像頭分辨率有限,清晰度也不及一些專(zhuān)業(yè)攝像頭,因此有了用第三方攝像頭代替Kinect攝像頭的想法?,F在的問(wèn)題是,如何將Kinect的深度圖與第三方攝像頭的RGB圖像對準?


當使用Kinect的RGB時(shí),有方便的MapColorCoordinatesToDepth和MapDepthCoordinatesToColor方法可以使用,這些函數將深度圖和RGB對準到一起,從而可根據深度圖準確地提取出RGB中的前景。但打算使用第三方攝像頭時(shí),這些函數都沒(méi)有用了,它們不可能知道我們所用攝像頭的參數以及空間位置,因此只能靠自己標定的方法解決這一問(wèn)題。


在標定之前,先要固定好Kinect和攝像頭的位置,讓深度攝像頭和RGB攝像頭的像平面盡量平行,距離也不要隔得太遠,就像下面這樣:


圖片



一、RGB攝像頭的標定


RGB攝像頭的標定想必大家都很熟悉,最常用的就是棋盤(pán)法。用待標定的攝像頭拍攝多幅不同視角下的棋盤(pán)圖片,將這些圖片扔給OpenCV或Matlab,從而計算出該攝像頭的內參以及對應于每一幅圖像的外參。這里就寫(xiě)寫(xiě)我在標定過(guò)程中的一些感受和經(jīng)驗吧。


1、標定所用的棋盤(pán)要盡量大,至少要有A3紙的大??;


2、棋盤(pán)平面與攝像頭像平面之間的夾角不要太大,控制在45度以下;


3、棋盤(pán)的姿勢與位置盡可能多樣化,但相互平行的棋盤(pán)對結果沒(méi)有貢獻;


4、用于標定的圖片要多于10張;


5、注意設置好攝像頭的分辨率,長(cháng)寬比最好和深度圖的相同,比如1280x960(4:3)。


以下是一些用于標定的樣圖:


圖片


二、深度攝像頭的標定


深度攝像頭看起來(lái)和RGB攝像頭差別很大,實(shí)際上有很多相似之處。就Kinect而言,其通過(guò)一個(gè)紅外散斑********紅外光束,光束碰到障礙物后反射回深度攝像頭,然后通過(guò)返回散斑之間的幾何關(guān)系計算距離。其實(shí),Kinect的深度攝像頭就是一個(gè)裝了濾波片的普通攝像頭,只對紅外光成像的攝像頭(可以這么認為)。


因此要對其標定,只需用紅外光源照射物體即可,LED紅外光源在淘寶上就20元一個(gè)。還有一點(diǎn)必須注意,在拍攝紅外照片時(shí),要用黑膠帶(或其他東西)將Kinect的紅外****完全擋住,否則其發(fā)出的散斑會(huì )在紅外照片中產(chǎn)生很多亮點(diǎn),不利于棋盤(pán)角點(diǎn)的檢測。以下是對應于上面RGB圖像的紅外圖:


圖片


三、計算內參


得到以上圖片之后,就可以分別對RGB攝像頭和深度攝像頭計算內參了??梢允褂肙penCV,自己寫(xiě)一小段程序,然后把圖片扔進(jìn)去。也可以使用著(zhù)名的Matlab Camera Calibration Toolbox。


自己寫(xiě)代碼累,Matlab我沒(méi)裝,因此我使用 GML Calibration Toolbox,可以在這里下載:http://graphics.cs.msu.ru/en/node/909 。這是一個(gè)C++寫(xiě)的標定程序,有友好的用戶(hù)界面,精度也不錯,使用非常方便。


分別將RGB和紅外的照片扔進(jìn)去,得到RGB攝像頭的內參(包括畸變參數):


=== Intrinsic ===

554.952628      0.000000           327.545377

0.000000           555.959694      248.218614

0.000000           0.000000           1.000000

=== Distortion ===

0.025163          -0.118850          -0.006536          -0.001345 


和Kinect深度攝像頭的內參(這個(gè)對所有Kinect應該都是差不多的):


=== Intrinsic ===

597.599759      0.000000           322.978715

0.000000           597.651554      239.635289

0.000000           0.000000           1.000000

=== Distortion ===

-0.094718          0.284224           -0.005630          -0.001429 



四、配準



現在說(shuō)說(shuō)怎么配準,由于Kinect可以得到真實(shí)點(diǎn)的三維坐標,因此深度圖的配準可以用一些簡(jiǎn)單特殊的方法。


設P_ir為在深度攝像頭坐標下某點(diǎn)的空間坐標,p_ir為該點(diǎn)在像平面上的投影坐標(x、y單位為像素,z等于深度值,單位為毫米),H_ir為深度攝像頭的內參矩陣,由小孔成像模型可知,他們滿(mǎn)足以下關(guān)系:


圖片


又設P_rgb為在RGB攝像頭坐標下同一點(diǎn)的空間坐標,p_rgb為該點(diǎn)在RGB像平面上的投影坐標,H_rgb為RGB攝像頭的內參矩陣。由于深度攝像頭的坐標和RGB攝像頭的坐標不同,他們之間可以用一個(gè)旋轉平移變換聯(lián)系起來(lái),即:


圖片


其中R為旋轉矩陣,T為平移向量。最后再用H_rgb對P_rgb投影,即可得到該點(diǎn)對應的RGB坐標:


圖片


需要注意的是,p_ir和p_rgb使用的都是齊次坐標,因此在構造p_ir時(shí),應將原始的像素坐標(x,y)乘以深度值,而最終的RGB像素坐標必須將p_rgb除以z分量,即(x/z,y/z),且z分量的值即為該點(diǎn)到RGB攝像頭的距離(單位為毫米)。


現在的問(wèn)題是,如何求聯(lián)系兩個(gè)坐標系的旋轉矩陣和平移向量。這就要用到攝像頭的外參了。


外參矩陣實(shí)際上也是由一個(gè)旋轉矩陣R_ir(R_rgb)和平移向量T_ir(T_rgb)構成的,它表示將一個(gè)全局坐標系下的點(diǎn)P變換到攝像頭坐標系下,分別對深度攝像頭和RGB攝像頭進(jìn)行變換,有以下關(guān)系:


圖片


在第一式中,將P用P_ir、R_ir和T_ir表示,并帶入第二式,可得:


圖片


從上式可以看出,這是在將P_ir變換為P_rgb,對比之前的式子:


圖片


可得:


圖片


因此,我們只需在同一場(chǎng)景下,得到棋盤(pán)相對于深度攝像頭和RGB攝像頭的外參矩陣,即可算出聯(lián)系兩攝像頭坐標系的變換矩陣(注意,所有旋轉矩陣都是正交陣,因此可用轉置運算代替求逆運算)。雖然不同場(chǎng)景下得到的外參矩陣都不同,計算得到的R和T也有一些變化,但根據實(shí)際實(shí)驗結果來(lái)看,使用一個(gè)正面棋盤(pán)的標定圖像就可達到較好的效果,如下圖:


圖片


注意,這兩幅圖像必須來(lái)自于同一場(chǎng)景,否則沒(méi)有意義。當然你也可以使用多個(gè)場(chǎng)景下的外參,然后使用OpenCV的StereoCalibration函數求得兩個(gè)攝像頭的最佳相對變換矩陣,由于時(shí)間關(guān)系,我沒(méi)有做這個(gè)測試。


使用GML Calibration Toolbox得到以上兩圖的外參(在菜單欄的Calibration->Export Calibration Data菜單中選擇導出),然后根據上式,扔進(jìn)Mathematica里面去做矩陣運算,得到最終的R和T:


R={ {0.999853, -0.00340388, 0.0167495}, 


{0.00300206, 0.999708,  0.0239986},


{-0.0168257, -0.0239459, 0.999571}  }


T={  {15.2562}, {70.2212}, {-10.9926}  }



五、測試



最后寫(xiě)一個(gè)小程序測試一下,在此說(shuō)一下這個(gè)測試程序的思路:

1、獲取Kinect的深度圖像;


2、獲取RGB攝像頭的圖像;


3、為深度圖像中的每一個(gè)像素附上對應的RGB顏色,比如你要給坐標為(x, y)的深度圖像素附上顏色,具體步驟如下;


1)構造一個(gè)三維向量p_ir = (x, y, z),其中x,y是該點(diǎn)的像素坐標,z是該像素的深度值;


2)用Kinect內參矩陣H_ir的逆,乘以p_ir得到對應的空間點(diǎn)坐標P_ir,具體公式見(jiàn)上文第四部分(配準);


3)由于P_ir是該點(diǎn)在Kinect坐標系下的坐標,我們需要將其轉換到RGB攝像頭的坐標系下,具體的,就是乘以一個(gè)旋轉矩陣R,再加上一個(gè)平移向量T,得到P_rgb;


4)用RGB攝像頭的內參矩陣H_rgb乘以P_rgb,得到p_rgb,p_rgb也是一個(gè)三維向量,其x和y坐標即為該點(diǎn)在RGB圖像中的像素坐標,取出該像素的顏色,作為深度圖像中對應像素的顏色;


5)對深度圖像中的每一個(gè)像素都做上述操作,得到配準后的深度圖。


看看配準前(左)和配準后(右)的區別:

圖片


從圖像上看,配準已經(jīng)很精確了。若還要更好,可以手動(dòng)微調一下兩個(gè)攝像頭的平移向量T,主要改x分量和y分量,這樣可以控制RGB和深度圖的左右對齊和上下對齊。另外,還可以加入對畸變系數的處理,不過(guò)由于Kinect的攝像頭以及我使用的RGB攝像頭本身質(zhì)量較高,畸變影響不大,這里就全部忽略了。


版權聲明:本文為作者授權轉載,由3D視覺(jué)開(kāi)發(fā)者社區編輯整理發(fā)布,僅做學(xué)術(shù)分享,未經(jīng)授權請勿二次傳播,版權歸原作者所有,圖片來(lái)源于網(wǎng)絡(luò ),若涉及侵權內容請聯(lián)系刪文。


本文僅做學(xué)術(shù)分享,如有侵權,請聯(lián)系刪文。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>