導(dǎo)讀:我們?cè)趯?shí)現(xiàn)AR效果時(shí),為了大大減少我們的工程量,我們可以借助一些主流的ARSDK,比如EasyAR,Vuforia,太虛AR等等,當(dāng)然,作為AR技術(shù)的狂熱愛(ài)好者
我們?cè)趯?shí)現(xiàn)AR效果時(shí),為了大大減少我們的工程量,我們可以借助一些主流的AR SDK,比如EasyAR ,Vuforia,太虛AR等等,當(dāng)然,作為AR技術(shù)的狂熱愛(ài)好者,我們的追求遠(yuǎn)遠(yuǎn)不止于此。所以了,我今天給大家介紹了幾種“底層”實(shí)現(xiàn)AR的方式。
Opencv和C++ 實(shí)現(xiàn)
大概思路是OpenCV實(shí)現(xiàn)對(duì)Marker的識(shí)別和定位,然后通過(guò)OpenGL將虛擬物體疊加到攝像頭圖像下,實(shí)現(xiàn)增強(qiáng)現(xiàn)實(shí)。具體思路是:
使用SIFT算法進(jìn)行識(shí)別(特征點(diǎn)的提取并用特征向量對(duì)特征點(diǎn)描述,接著當(dāng)前視圖的特征向量與目標(biāo)對(duì)象的特征向量進(jìn)行匹配)
根據(jù)識(shí)別出來(lái)的原目標(biāo)和幀圖像匹配關(guān)系得到變化矩陣,來(lái)顯示三維物體(使用OpenGL來(lái)繪制),實(shí)現(xiàn)跟蹤。
對(duì)于基于標(biāo)記的AR的Opencv實(shí)現(xiàn),我們常常用到Marker:
黑色邊框中是編碼信息,白色為1,黑色為0,將每一行作為一個(gè)字,那么每個(gè)字有5bits。其中,1、3、5位為校驗(yàn)位,2、4位為信息位。接下來(lái)用Opencv實(shí)現(xiàn),其具體思路為:
對(duì)輸入圖像幀進(jìn)行標(biāo)記檢測(cè),灰度化,找到圖像中輪廓,檢測(cè)和解碼標(biāo)記,
估計(jì)標(biāo)記的三維姿態(tài),這里包括提前對(duì)攝像機(jī)進(jìn)行相機(jī)標(biāo)定,獲取相機(jī)內(nèi)參數(shù)和失真系數(shù),根據(jù)這個(gè)計(jì)算出標(biāo)記的旋轉(zhuǎn)矩陣和平移矩陣,
由相機(jī)內(nèi)參數(shù)和標(biāo)記的旋轉(zhuǎn)矩陣和平移矩陣,用OpenGL進(jìn)行渲染三維物體。
項(xiàng)目地址:https://github.com/GeekLiB/opencv_iphoneAR
參考資料:
書(shū)籍:深入理解OpenCV 實(shí)用計(jì)算機(jī)視覺(jué)項(xiàng)目解析
(鏈接: https://pan.baidu.com/s/1mi0oCmG 密碼: erh5)
文章:OpenGL與OpenCV實(shí)現(xiàn)增強(qiáng)現(xiàn)實(shí)
?。ㄦ溄觝ttp://www.tuicool.com/articles/MNJjyam)
Python 實(shí)現(xiàn)AR效果
Python是世界上最優(yōu)雅的語(yǔ)言,目前的計(jì)算機(jī)視覺(jué)項(xiàng)目大都用Python來(lái)實(shí)現(xiàn),當(dāng)然用Python的CV庫(kù)也可以很輕松的實(shí)現(xiàn)AR效果。
用Python來(lái)實(shí)現(xiàn)AR效果,我們首先運(yùn)用到兩個(gè)工具包----PyGame與PyOpenGL。PyGame是非常流行的游戲開(kāi)發(fā)工具包,它可以非常簡(jiǎn)單的處理顯示窗口,輸入設(shè)備,事件以及其他內(nèi)容。PyGame是開(kāi)源的(http://www.pygame.org/)。PyOpenGL是OpenGL圖形煸炒的Python綁定接口。并且它也是開(kāi)源的(http://www.opengl.org/wiki/Getting_started)。在實(shí)現(xiàn)的過(guò)程中,我們需要獲取照相機(jī)矩陣并轉(zhuǎn)換到OpenGL格式,并以平面和標(biāo)記物進(jìn)行姿態(tài)估計(jì),然后在圖像中放置虛擬物體。
參考資料:
python計(jì)算機(jī)視覺(jué):鏈接: https://pan.baidu.com/s/1geArUUn 密碼: fnby
當(dāng)然,這里也有一個(gè)很好的Python AR框架BAR4Py,它是由百曉通客?!羷?chuàng)客項(xiàng)目群著手開(kāi)發(fā)的“增強(qiáng)現(xiàn)實(shí)(AR)”的 Python 開(kāi)發(fā)庫(kù)。
項(xiàng)目地址:https://github.com/GeekLiB/AR-BXT-AR4Python
特點(diǎn):
基于 OpenCV,以及 Python 的數(shù)學(xué)庫(kù);
跨平臺(tái),可拓展,免費(fèi)、開(kāi)源;
支持簡(jiǎn)單的 Mark 標(biāo)記物以及復(fù)雜的圖像標(biāo)記;
使用遺忘隊(duì)列結(jié)構(gòu)動(dòng)態(tài)更新相機(jī)標(biāo)定;
可以看看他們的測(cè)試效果:
AR+SLAM
SLAM主要用于地圖重建,在AR中,我們主要運(yùn)用SLAM算法來(lái)獲取camera pose(SLAM的結(jié)果是基于feature的點(diǎn)云,提前重建后可以remap拿到較好的camera pose)。
在這里,我給大家收集了一些SLAM開(kāi)發(fā)資源與AR-SLAM 項(xiàng)目案例,大家可以下載參考。
SLAM開(kāi)發(fā)資源匯總:https://github.com/GeekLiB/Lee-SLAM-source
PTAM-AR:http://www.robots.ox.ac.uk/~bob/research/research_ptamm.html
OpenCV-Marker-less-AR:https://github.com/takmin/OpenCV-Marker-less-AR
Stereo_SLAM_AR(基于ORB-SLAM):https://github.com/ygx2011/Stereo_SLAM_AR
效果:
opencv-markerless-AR-Mobile:https://github.com/meiroo/opencv-markerless-AR-Mobile
ARToolkit
這是一個(gè)老牌的AR工具包,ARToolKit 它是一個(gè)C/C++ 語(yǔ)言編寫的庫(kù)。對(duì)于開(kāi)發(fā)一個(gè)AR程序來(lái)說(shuō),最困難的部分在于實(shí)時(shí)的將虛擬圖像覆蓋到用戶視口,并且和真實(shí)世界中的對(duì)象精確對(duì)齊。ARToolKit使用圖像技術(shù)計(jì)算攝像機(jī)和標(biāo)記卡之間的相對(duì)位置,從而使程序員能夠?qū)⑺麄兊奶摂M對(duì)象覆蓋到標(biāo)記卡上面。ARToolKit 提供的快速和準(zhǔn)確的標(biāo)記跟蹤,能夠讓你快速的開(kāi)發(fā)出許多更新更有趣的AR程序。
目前ARToolkit支持以下系統(tǒng):
相信大多數(shù)開(kāi)發(fā)者學(xué)習(xí)或開(kāi)發(fā)的第一個(gè)AR應(yīng)用用的就是ARToolkit。ARtoolkit的實(shí)現(xiàn)步驟是:程序初始化----抓取一幀進(jìn)行視頻的輸入----然后探測(cè)標(biāo)示卡----計(jì)算攝像頭的轉(zhuǎn)移矩陣----繪制虛擬物體----關(guān)閉視頻捕捉。