小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

根據(jù)相機(jī)外參實(shí)現(xiàn)單應(yīng)矩陣計(jì)算的理論與實(shí)踐

 點(diǎn)云PCL 2021-07-30

論文閱讀模塊將分享點(diǎn)云處理,SLAM,三維視覺(jué),高精地圖相關(guān)的文章。公眾號(hào)致力于理解三維視覺(jué)領(lǐng)域相關(guān)內(nèi)容的干貨分享,歡迎各位加入我,我們一起每天一篇文章閱讀,開(kāi)啟分享之旅,有興趣的可聯(lián)系微信dianyunpcl@163.com。

單應(yīng)矩陣介紹

單應(yīng)性在計(jì)算機(jī)視覺(jué)領(lǐng)域是一個(gè)非常重要的概念,它在圖像校正、圖像拼接、俯視圖生成,相機(jī)位姿估計(jì)、視覺(jué)SLAM等領(lǐng)域有非常重要的作用。

單應(yīng)性(Homography)變換是將一幅圖像中的點(diǎn)映射到另一幅圖像中相應(yīng)點(diǎn)的變換關(guān)系:

單應(yīng)矩陣是一個(gè)3x3矩陣,具有8個(gè)自由度,通常為歸一化后表達(dá)式,其尺度為1。

下面展示了不同類型的變換,但都與兩個(gè)平面之間的變換有關(guān)。

(1)真實(shí)平面和圖像平面

(2)由兩個(gè)相機(jī)位置拍攝的平面

(3)圍繞其投影軸旋轉(zhuǎn)的相機(jī)采集的圖像進(jìn)行拼接

所以單應(yīng)性矩陣主要用來(lái)解決兩個(gè)問(wèn)題:

一是表述真實(shí)世界中一個(gè)平面與對(duì)應(yīng)它圖像的透視變換

二是從通過(guò)透視變換實(shí)現(xiàn)圖像從一種視圖變換到另外一種視圖

外參求解單應(yīng)矩陣?yán)碚?/span>

這里將主要講解以下已知兩個(gè)相機(jī)的位姿如何實(shí)現(xiàn)圖像的拼接,主要公式就是根據(jù)外參計(jì)算H矩陣。

單應(yīng)性將兩個(gè)平面之間的變換聯(lián)系起來(lái),這樣就可以計(jì)算出從第二個(gè)平面視圖轉(zhuǎn)到第一個(gè)平面視圖下相應(yīng)相機(jī)位移,在已知內(nèi)外參的情況下有

使用齊次坐標(biāo)系表達(dá)式將三維世界點(diǎn)轉(zhuǎn)轉(zhuǎn)到相機(jī)坐標(biāo)系下:

使用矩陣乘法可以輕松地將一圖像幀中表示的點(diǎn)轉(zhuǎn)換為另一幀圖像中:c1Mo是第一幀的位姿,c2Mo是第二幀的位姿。要將相機(jī)1中表示的三維點(diǎn)變換為相機(jī)2幀的坐標(biāo)下,其變換公式為:

以上公式對(duì)應(yīng)的是:同一平面兩個(gè)不同相機(jī)坐標(biāo)系的單應(yīng)矩陣。如果要同一平面計(jì)算出兩個(gè)圖像間的單應(yīng)矩陣H,則需要內(nèi)參,此時(shí)左邊乘以K,右邊乘以K的逆矩陣。

為了更好的理解,這里寫(xiě)了一個(gè)demo,并與上述的理論對(duì)應(yīng)(注意這里是將第二幀轉(zhuǎn)到第一幀的坐標(biāo)系下)。

Mat cameraMatrix = (Mat_<double>(3, 3) << 700.0, 0.0, 320.0, 0.0, 700.0, 240.0, 0, 0, 1);Mat R1 = c1Mo(Range(0, 3), Range(0, 3));Mat R2 = c2Mo(Range(0, 3), Range(0, 3)); //c1Mo * oMc2Mat R_2to1 = R1*R2.t();//同一平面兩個(gè)不同相機(jī)坐標(biāo)系的單應(yīng)矩陣// [compute-homography]Mat H = cameraMatrix * R_2to1 * cameraMatrix.inv();//同一平面計(jì)算出兩個(gè)圖像間的單應(yīng)矩陣HH /= H.at<double>(2, 2);//歸一化cout << "H:\n" << H << endl;

根據(jù)求解的單應(yīng)矩陣實(shí)現(xiàn)兩個(gè)視圖的拼接實(shí)例顯示如下

拼接的結(jié)果如下:

warpPerspective(img2, img_stitch, H, Size(img2.cols * 2, img2.rows)); Mat half = img_stitch(Rect(0, 0, img1.cols, img1.rows));

完整代碼如下:

void basicPanoramaStitching(const string &img1Path, const string &img2Path){ Mat img1 = imread("Blender_Suzanne1.jpg"); Mat img2 = imread("Blender_Suzanne2.jpg"); //! [camera-pose-from-Blender-at-location-1] Mat c1Mo = (Mat_<double>(4, 4) << 0.9659258723258972, 0.2588190734386444, 0.0, 1.5529145002365112, 0.08852133899927139, -0.3303661346435547, -0.9396926164627075, -0.10281121730804443, -0.24321036040782928, 0.9076734185218811, -0.342020183801651, 6.130080699920654, 0, 0, 0, 1); //! [camera-pose-from-Blender-at-location-1] //! [camera-pose-from-Blender-at-location-2] Mat c2Mo = (Mat_<double>(4, 4) << 0.9659258723258972, -0.2588190734386444, 0.0, -1.5529145002365112, -0.08852133899927139, -0.3303661346435547, -0.9396926164627075, -0.10281121730804443, 0.24321036040782928, 0.9076734185218811, -0.342020183801651, 6.130080699920654, 0, 0, 0, 1); //! [camera-pose-from-Blender-at-location-2] Mat cameraMatrix = (Mat_<double>(3, 3) << 700.0, 0.0, 320.0, 0.0, 700.0, 240.0, 0, 0, 1); Mat R1 = c1Mo(Range(0, 3), Range(0, 3)); Mat R2 = c2Mo(Range(0, 3), Range(0, 3)); //c1Mo * oMc2 Mat R_2to1 = R1*R2.t(); //! [compute-homography] Mat H = cameraMatrix * R_2to1 * cameraMatrix.inv(); H /= H.at<double>(2, 2); cout << "H:\n" << H << endl; //! [compute-homography] //! [stitch] Mat img_stitch; warpPerspective(img2, img_stitch, H, Size(img2.cols * 2, img2.rows)); Mat half = img_stitch(Rect(0, 0, img1.cols, img1.rows)); img1.copyTo(half); //! [stitch] Mat img_compare; Mat img_space = Mat::zeros(Size(50, img1.rows), CV_8UC3); hconcat(img1, img_space, img_compare); hconcat(img_compare, img2, img_compare); imshow("Compare images", img_compare); imshow("Panorama stitching", img_stitch); waitKey(); }

以上是根據(jù)外參實(shí)現(xiàn)了同一相機(jī)不同位姿采集的圖像的拼接,其主要原理主要是根據(jù)外參計(jì)算出單應(yīng)性矩陣,將第二幀采集的圖像變換到第一幀視角下的結(jié)果,最終實(shí)現(xiàn)拼接。這里我想到了前視圖轉(zhuǎn)換俯視圖的方法,同樣也是變換視角的問(wèn)題,只是這里的俯視圖的虛擬相機(jī)的參數(shù)需要自己設(shè)置,有時(shí)間再更新。

資源

三維點(diǎn)云論文及相關(guān)應(yīng)用分享

【點(diǎn)云論文速讀】基于激光雷達(dá)的里程計(jì)及3D點(diǎn)云地圖中的定位方法

3D目標(biāo)檢測(cè):MV3D-Net

三維點(diǎn)云分割綜述(上)

3D-MiniNet: 從點(diǎn)云中學(xué)習(xí)2D表示以實(shí)現(xiàn)快速有效的3D LIDAR語(yǔ)義分割(2020)

win下使用QT添加VTK插件實(shí)現(xiàn)點(diǎn)云可視化GUI

JSNet:3D點(diǎn)云的聯(lián)合實(shí)例和語(yǔ)義分割

大場(chǎng)景三維點(diǎn)云的語(yǔ)義分割綜述

PCL中outofcore模塊---基于核外八叉樹(shù)的大規(guī)模點(diǎn)云的顯示

基于局部凹凸性進(jìn)行目標(biāo)分割

基于三維卷積神經(jīng)網(wǎng)絡(luò)的點(diǎn)云標(biāo)記

點(diǎn)云的超體素(SuperVoxel)

基于超點(diǎn)圖的大規(guī)模點(diǎn)云分割

更多文章可查看:點(diǎn)云學(xué)習(xí)歷史文章大匯總

SLAM及AR相關(guān)分享

【開(kāi)源方案共享】ORB-SLAM3開(kāi)源啦!

【論文速讀】AVP-SLAM:自動(dòng)泊車系統(tǒng)中的語(yǔ)義SLAM

【點(diǎn)云論文速讀】StructSLAM:結(jié)構(gòu)化線特征SLAM

SLAM和AR綜述

常用的3D深度相機(jī)

AR設(shè)備單目視覺(jué)慣導(dǎo)SLAM算法綜述與評(píng)價(jià)

SLAM綜述(4)激光與視覺(jué)融合SLAM

Kimera實(shí)時(shí)重建的語(yǔ)義SLAM系統(tǒng)

SLAM綜述(3)-視覺(jué)與慣導(dǎo),視覺(jué)與深度學(xué)習(xí)SLAM

易擴(kuò)展的SLAM框架-OpenVSLAM

高翔:非結(jié)構(gòu)化道路激光SLAM中的挑戰(zhàn)

SLAM綜述之Lidar SLAM

基于魚(yú)眼相機(jī)的SLAM方法介紹

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多