《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > ar技術(shù)怎么實(shí)現(xiàn) 四種AR的實(shí)現(xiàn)方式

ar技術(shù)怎么實(shí)現(xiàn) 四種AR的實(shí)現(xiàn)方式

2017-08-14
關(guān)鍵詞: AR Python OpenGL SLAM

導(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:

97135f54812041e599c9affe02c63472.jpg.png

  黑色邊框中是編碼信息,白色為1,黑色為0,將每一行作為一個字,那么每個字有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ù)這個計(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)用到兩個工具包----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)然,這里也有一個很好的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)定;

  可以看看他們的測試效果:

4cd5682dc58a4fa4a55820a8f0a0ec0a_th.jpg

bab7ae93cf6d48f58f5a7e14f6e8ad04_th.jpg

0ef0d614527b449ebff53af57f891172_th.jpg

  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

b86df2e18cc347af842f34cfa87ac55c_th.jpg

81cde31cd94b4c1dba20444f4355a0de_th.jpg

c70c7c7850494e8391bb8d51f45774a0_th.jpg

  OpenCV-Marker-less-AR:https://github.com/takmin/OpenCV-Marker-less-AR

  Stereo_SLAM_AR(基于ORB-SLAM):https://github.com/ygx2011/Stereo_SLAM_AR

  效果:

174e5f78aa554b1bbb1fc6d0db957847_th.jpg

  opencv-markerless-AR-Mobile:https://github.com/meiroo/opencv-markerless-AR-Mobile

  ARToolkit

  這是一個老牌的AR工具包,ARToolKit 它是一個C/C++ 語言編寫的庫。對于開發(fā)一個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ā)的第一個AR應(yīng)用用的就是ARToolkit。ARtoolkit的實(shí)現(xiàn)步驟是:程序初始化----抓取一幀進(jìn)行視頻的輸入----然后探測標(biāo)示卡----計(jì)算攝像頭的轉(zhuǎn)移矩陣----繪制虛擬物體----關(guān)閉視頻捕捉。

513efa16137445c6a08ed05ff86b1fc3_th.jpg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。