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