AR與VR都是計算視覺產業體系的核心技術。但AR 與 VR 相比,人們普遍認為前者的前景更加廣闊,更有預測稱,到2020年,AR的市場規模會比VR大一倍。但是,由于AR 多了與真實世界相互融合這一個步驟,因此實現難度也比 VR 大得多。下文中,我們對目前業內應用的AR實現方式做了較完善的盤點,包括專業級別的七種主流AR光學方案,以及針對狂熱科技愛好者的四種底層AR實現方式。幫助大家了解AR是如何實現虛擬世界和現實世界的交互融合的。
七種AR光學方案及優缺點
1、直接投影或離軸反射
這種技術類似于投影儀,可以將影像直接投影到眼鏡上,比如 Glass Up,就是在右側鏡腿上安裝了一個微型投影儀,并將鏡片作為反射鏡,會在鏡片上投射一個大小為 320×240 的區域,通過反射以后形成平行光進入人眼成像。這種方案雖無法像手機或平板電腦一樣進行多任務處理,但應付一些文字信息和簡單圖表足夠。Meta 眼鏡也采用了類似技術——離軸反射鏡,與標準拋物反射鏡的不同之處在于,它可在特定角度下直射并聚焦入射平行光,且支持無限遠焦點,造型極其緊湊的投影儀藏在鏡框內,左右各有一個,由 LED 光源將半透式 LCD 上的影像投射到分光鏡片上成像,從而提供了立體視覺。
2、棱鏡光學
如圖,最簡單的就是 45 度角棱鏡,把顯示器產生的光從眼鏡框反射進人眼,也同時讓現實世界的光透進來。這樣做簡單便宜,眾所周知的 Google Glass 便是采用了這種方案。但由于技術限制,連 Google Glass 的缺點也很明顯,視場角僅 20°左右(棱鏡方式要想做大 FOV 只能做得更厚),光線需要先后經過半反半透膜層兩次,光能利用率低(約為 20%),導致畫面較暗。受限于制造工藝,鏡片厚,提供面積大的鏡片成本高、良率低。
3、自由曲面棱鏡式
自由曲面指表面形狀不能被連續加工的,具有傳統加工成型的任意性特點的曲面,其設計難度遠遠高于前兩類。一般情況下它的形態是一個楔形的玻璃,這種曲面是非旋轉對稱的 XY 多項式自由曲面。在這種結構中,光線經過該棱鏡的變換,形成虛擬放大的圖像,自由曲面全反射的出射面和自由曲面的反射面能消除色差和畸變等像差,因此成像質量更加清晰,視角可以達到 54 度,采用雙自由曲面棱鏡視角可以進一步提高。缺陷就是,體積較大,厚度約在 7-10mm。
4、光波導+全息技術
波導能夠在 3mm 以內的玻璃上,實現 30-40°的視場角。它會低于一般近視眼鏡的厚度,非常輕薄,因此可以和普通眼鏡結合。不過,它的設計難度也是最大的。該技術的基本原理是光的全反射和衍射。如圖,全息波導頭盔顯示系統主要由微顯示器、全息光柵和平板波導組成。圖像經過微型準直透鏡后變成平行光進入光波導到達第一個全息光柵,由于全息光柵的衍射效應使平行光改變傳輸方向從而滿足全反射條件并沿波導方向向前無損傳播。當平行光傳播到第二個全息光柵時,全反射條件被破壞從而使平行光從全息波導出射,并進入人眼成像。由于全息波導的存在,光學圖像可以垂直偏轉傳播。這不但減小了傳播距離,還可保持光學系統的重心在頭部以內。同時減少了折鏡的使用,從而有利于光學系統的簡潔化和輕小型設計。不過,該技術智能實現單色顯示,想要實現彩色效果必須采用 3 層鏡片,分別投射紅、綠、藍三原光,利用不同光線的融合形成彩色。目前,HoloLens 便是采用這種方案。
5、光波導+反射技術
全息光柵方案,由于衍射效應會造成色散和圖像模糊。所以,以色列公司 Lumus 用到了一種 Light-guide Optical Element(LOE)器件,這種器件使用的并非全息光柵,而是更加簡單的多反射層結構,如圖所示。LOE 器件的原理和潛望鏡類似,但是使用了多個反射鏡擴展出瞳。每個反射鏡反射的都是平行光,這些反射鏡成同一像。其中 Lumus 的代表性產品 PD-18 分辨率為 800×600,視場角為 26°×20°,出瞳為 10mm,出瞳距為 23mm。器件厚度為 2.3mm,重量小于 70g,亮度為 1200fL,顯示區透過率為 70%,其余區域透過率為 92%。
6、光場技術
光場技術作為近眼 3D 的另外一大技術路線,其代表者就是 Magic Leap。該技術最大的好處就是可以允許用戶自由對焦,看遠看近不至于產生傳統照片或視頻那樣的模糊感覺。這種方法的技術核心是光導纖維投影儀(Fiber Optic Projector),基于激光在光導纖維中傳播后從纖維的端口射出時輸出方向和纖維相切的原理,Magic Leap 通過改變纖維在三維空間中的形狀,特別是改變纖維端口處的切方向,控制激光射出的方向,直接投射到視網膜。
7、視頻疊加技術
上述幾種方案相對較難,視頻疊加技術則可以更簡單地實現 AR 效果。視頻疊加技術直接利用攝像頭取代透鏡觀察真實世界,并將虛擬事物疊加在攝像頭所拍攝的場景中。該方法避免了光學設計上的難題,并且可以增強人的視覺感知能力,比如通過使用紅外線攝像頭,可以看見紅外光譜的景象。不過,它也帶來了另一個難題,那就是數據運算量極高,這個問題亟待解決。
四種“底層”AR實現方式
如果說上面的是專業技術解決方案,那么下面我們要介紹的就是專為AR技術愛好者準備的“業余”方案。
1、Opencv和C++
大致原理是OpenCV實現對Marker的識別和定位,然后通過OpenGL將虛擬物體疊加到攝像頭圖像下,實現增強現實。具體思路是:使用SIFT算法進行識別(特征點的提取并用特征向量對特征點描述,接著當前視圖的特征向量與目標對象的特征向量進行匹配),根據識別出來的原目標和幀圖像匹配關系得到變化矩陣,來顯示三維物體(使用OpenGL來繪制),實現跟蹤。
2、Python
Python是世界上最優雅的語言,目前的計算機視覺項目大都用Python來實現,當然用Python的CV庫也可以很輕松的實現AR效果。用Python來實現AR效果,首先需要運用到兩個開源的工具包PyGame與PyOpenGL。PyGame是非常流行的游戲開發工具包,它可以非常簡單的處理顯示窗口,輸入設備,事件以及其他內容。在實現的過程中,需要獲取照相機矩陣并轉換到OpenGL格式,并以平面和標記物進行姿態估計,然后在圖像中放置虛擬物體,實現增強現實。
3、AR+SLAM
SLAM主要用于地圖重建,在AR中,通常運用SLAM算法來獲取camera pose。網上有一些SLAM開發資源與AR-SLAM 項目案例,有興趣的可以下載參考。
4、ARToolkit
ARToolKit 是一個C/C++ 語言編寫的庫。對于開發一個AR程序來說,最困難的部分在于實時的將虛擬圖像覆蓋到用戶視口,并且和真實世界中的對象精確對齊。ARToolKit使用圖像技術計算攝像機和標記卡之間的相對位置,從而使程序員能夠將他們的虛擬對象覆蓋到標記卡上面。ARToolKit 提供的快速和準確的標記跟蹤,能夠讓人快速的開發出許多更新更有趣的AR程序。實現步驟是:程序初始化—抓取一幀進行視頻的輸入—然后探測標示卡—計算攝像頭的轉移矩陣—繪制虛擬物體—關閉視頻捕捉。