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