農(nóng)場中一頭奶牛悠閑地吃著草,一個卡通小人兒在和消費者聊著天。出現(xiàn)這一切,都源于一個簡單的牛奶瓶。消費者通過手機或平板掃描牛奶瓶身上的圖案,就會呈現(xiàn)一個虛擬農(nóng)場,可以選擇各種小動物,并和它們進行互動。
這種深受孩子喜愛的宣傳方式是怎么實現(xiàn)的呢?其實這個過程只需要六步:
通過攝像頭采集實時視頻;
將采集到的視頻流數(shù)字化成圖像,然后通過上文的特征點檢測、特征點描述子生成、特征點匹配一系列處理,找到識別標識物;
識別出標識物后,以標識物作為參考,確定要生成的動畫在 AR 環(huán)境中的位置和方向,并確定提前存入手機中的標識圖位置;
標識物中的標識符號與預設的目標圖進行匹配;
程序根據(jù)標識物位置調(diào)整動畫(虛擬信息)位置;
動畫(虛擬信息)被渲染進視頻流。
這就是 AR 的實現(xiàn)過程,今天將為大家解釋六步中的“精華”——識別并跟蹤標識物。
牛奶瓶上的特點
當消費者拿起手機掃描牛奶瓶時,手機是怎么判斷這幅圖是不是自己要找的目標呢?
目標圖是在開發(fā)這款 AR 應用時提前讀入 app 的。啟動 app 后,它就開始查找與標識圖相同的幀。
這就像警察在抓逃犯時,會在各交通要道設立排查點,將過往行人與逃犯照片進行對比,進行排查。警察在比對照片時,不會每根頭發(fā),每個毛孔都要進行比較。他們會關注嫌疑人的一些顯著外貌特征,與這些特征相似度極高的人視為犯罪嫌疑人。
同理,圖像識別中的目標圖也具有特征,我們將這些特征稱為“特征點”。
那么問題來了,如何找到這些點?
圖像在電子設備中的狀態(tài)是一堆數(shù)字。特征點就是那些和周圍數(shù)字值相差較大的點,檢測方法一般有:FAST、Harris、SIFT、SURF、MSER 等。
FAST 特征點檢測法因檢測速度快而深受研究者喜愛,具體遵循以下步驟:
首先,從圖像中選取一個像素,記作 P。如果我們想判斷它是否為一個特征點,首先把 P 點的亮度值記作 I。再設定一個合適的閾值 t,用來控制特征點的選取。以 P 為圓心,3 個像素為半徑做圓,這個圓的邊界上有 16 個像素,如下圖所示:
如果這 16 個像素的像素值都比 I+t 大,或都比 I-t 小,那么 P 就是一個特征點。一般在實際檢測中,這 16 個像素不用全部與 P 的亮度值進行比較,只要有 3/4 個以上的像素亮度值比 P+t 大或比 P-t 小,就可以認為 P 點為特征點。
簡單來說,特征點就是與周圍反差較大的點,就像下圖所示:
找到特征點就可以識別了么?
只知道檢測到特征點還不行,必須知道兩張圖像中的特征是否一致。如何判斷特征點是否一致,就需要借助特征點描述子了。
特征點描述子是一種描述特征點的方法。比如,我們在挑西瓜時,會選根蒂蜷縮、敲起來聲音濁響的青綠西瓜。這個挑瓜的過程就是描述的過程,挑瓜的依據(jù)就相當于生成的描述子。
如果一個瓜和我們的挑瓜條件相似或相同,那么我們就判斷它是一個好瓜。同樣的如果一幅圖像中有一個點和我們的描述子相似或相同,那么就可以判斷它們?yōu)橥惶卣鳌?/p>
找到了特征點描述子,接下來就是要在目標圖和識別圖之間進行匹配。
判斷兩幅圖是否為同一幅圖的標準是人為控制的。我們既可以設置匹配率為 10% 以上的兩幅圖像是同一圖像,也可以設置匹配率為 90% 以上。具體標準根據(jù)應用所需而定。
目前,特征點匹配技術大概分為兩類:一類是分別獲取兩幅圖像的特征點及特征點描述子,根據(jù)一定的搜索策略對這些特征點和描述子進行計算,最終獲得最優(yōu)極值點即為匹配結果;另一類是只獲取參考幀圖像的特征點信息,并利用它在當前幀上尋找最優(yōu)匹配,這種匹配的最大優(yōu)點是只需提取參考幀的特征點,節(jié)約了一半的特征點提取時間。
發(fā)現(xiàn)目標要盯緊
從文章開頭的視頻中可以看到,當小孩拿著 iPad 轉(zhuǎn)動時,生成的動畫會保持不動。給我們一種“動畫和牛奶是一個整體”的錯覺。要想達到這種效果,需要對視頻流中的圖像進行特征點跟蹤。
特征跟蹤有兩種方式,一種是對視頻流中的每一幀圖像,進行特征點匹配。另一種則在第一幅圖像中,尋找可能的特征位置,然后在后續(xù)的圖像中搜索它們的對應位置。顯然,這類“先檢測后跟蹤”的方法適合用在視頻跟蹤應用中。
在跟蹤過程中,相鄰兩幀經(jīng)過匹配后,得到當前幀的目標特征點。由于得到的目標特征點中存在不穩(wěn)定特征點,因此需要將這些不穩(wěn)定的點剔除。
但又出現(xiàn)了一個新的問題,即隨著跟蹤的進行,有效特征點會逐漸減少。尤其是在跟蹤過程中當目標姿態(tài)發(fā)生了大幅度變化時,經(jīng)常會出現(xiàn)目標的特征點急劇減少甚至消失的情況,這樣會導致跟蹤效果不好甚至跟蹤失敗。
這就像賣水果的小商販經(jīng)常會挑出好的水果擺放在最前面,隨著客人的購買,再繼續(xù)往上添加。
解決特征點減少問題的方法和賣水果是一樣的。只需擴大范圍搜索重新提取特征點,即當前時刻目標物中得到的特征點的個數(shù)小于一定的閾值時,擴大跟蹤面積重新提取特征點,將重新提取到的特征點用在接下來的跟蹤過程中。
農(nóng)場中一頭奶牛悠閑地吃著草,一個卡通小人兒在和消費者聊著天。出現(xiàn)這一切,都源于一個簡單的牛奶瓶。消費者通過手機或平板掃描牛奶瓶身上的圖案,就會呈現(xiàn)一個虛擬農(nóng)場,可以選擇各種小動物,并和它們進行互動。
在跟蹤的同時還需要完成一件事情,那就是渲染動畫。動畫必須和識別圖位置保持一致才能達到融合效果。
目前手機端 AR 應用開發(fā)多數(shù)是采用這種圖像法,這種方法已經(jīng)被模式化。開發(fā)者不用考慮上述這些底層實現(xiàn),可以使用一些插件來實現(xiàn)。常用插件國外的有 Vuforia、Metaio 等,國內(nèi)有 HiAR、EasyAR、VoidAR 等。