1. 程式人生 > >再談AR中的影象識別演算法

再談AR中的影象識別演算法

轉自:http://www.jianshu.com/p/35aec0e907e4

之前在《淺談移動平臺創新玩法》簡單的猜測了easyar中使用的影象識別演算法,基於圖片指紋的雜湊演算法的圖片檢索 。後再阿里引商大神的指點下,意識到圖片檢測只適用於靜態圖片的識別,只能做AR脫卡(不進行影象追蹤),簡單地說就是如果圖片有角度翻轉,光線明暗的變化都會改變圖片自身的指紋雜湊值,無法做到跟蹤識別。那要如何進行跟蹤識別呢?

引商的指點:我們用的是akaze,整個匹配流程採用的是基於特徵提取加kmeans樹求近似最近鄰匹配的演算法,然後再對匹配到的關鍵點對求單應性對映,最後根據inlier點集進行打分的方式來最終判定識別到的目標

影象特徵

和影象指紋類似,能夠唯一標示,區別於其他影象的“有趣部分”。一個很抽象的概念,它的精確定義往往由具體問題或應用型別來決定。可重複檢測性是影象特徵最重要的特性:同一影象無論發生角度,位移,明暗變化,所提取的特徵應該是相同的。影象特徵是許多計算機影象分析演算法的起點,因此一個演算法是否成功往往由它使用和定義的特徵決定。
常用的影象特徵有顏色特徵,紋理特徵,形狀特徵,空間關係特徵。

顏色特徵,是一種全域性特徵,描述了影象或影象區域所對應景物的表面性質。例如灰度直方圖等。
紋理特徵,是一種全域性特徵,描述了影象或影象區域所對應景物的表面性質。例如基於共生矩陣的熵、角二階矩和區域性平穩性等。
形狀特徵,是一種區域性特徵,描述了局部區域內物體的外形性質。例如邊界特徵等。
空間關係特徵,是指影象中分割出來的多個目標之間的相互的空間位置或相對方向關係。這些關係也可分為連線/鄰接關係、交疊/重複關係和包含/包容關係等。

特徵被檢測後它可以從影象中被提取出來。這個過程可能需要許多影象處理的計算(如大名鼎鼎的計算機視覺影象處理庫OpenCV)。其結果被稱為特徵描述或者特徵向量。

AKAZE特徵提取演算法

KAZE是 Pablo F. Alcantarilla,Adrien Bartoli和Andrew J. Davison2012年在ECCV2012[ECCV是計算機視覺領域最頂尖的三個會議(CVPR、 ECCV, ICCV)之一,每兩年一次]中提出來的一種比SIFT、SURF(OpenCV 2.4.9版本中實現的影象特徵檢測演算法)更穩定、效能更好的特徵檢測演算法。

K-Meas演算法

在資料探勘中,K-Means 演算法是一種聚類分析的演算法。K-Means聚類的目的是:把n個點(可以是樣本的一次觀察或一個例項)劃分到k個聚類中,使得每個點都屬於離他最近的均值(此即聚類中心)對應的聚類,以之作為聚類的標準。


K-Means演算法主要解決的問題:我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四個點群,但是我們怎麼通過計算機程式找出這幾個點群來呢?於是就出現了我們的K-Means演算法。


K-Means演算法.jpg

例如在網際網路金融公司的借貸業務中,給你1000000個使用者,需要按金融產品種類分成n個人群,每一群人都有各自的“突出特徵”(類似影象特徵),以便區分出來他們都能適用哪一類產品,幫助金融公司合理規避借貸風險,這就是網際網路金融公司基於大資料分析風控系統的基本原理。
這麼解釋K-Means演算法是不是就容易理解多了。

單應性

單應性是幾何中的一個概念,是一個從實射影平面到射影平面的可逆變換,直線在該變換下仍對映為直線。具有相同意義的詞還包括直射變換、射影變換和射影性等。在計算機視覺領域中,空間中同一平面的任意兩幅影象可以通過單應性關聯在一起。比如一個物體可以通過旋轉相機鏡頭獲取兩張不同的照片(這兩張照片的內容不一定要完全對應,部分對應即可),我們可以把單應性設為一個二維矩陣M,那麼照片1乘以M就是照片2。這有著很多實際應用,比如影象校正、影象對齊或兩幅影象之間的相機運動計算(旋轉和平移)等。
在數學裡齊次座標,或投影座標是指一個用於投影幾何裡的座標系統,如同用於歐氏幾何裡的笛卡兒座標一樣。如果點Q到成像儀上的點q的對映使用齊次座標,這種對映可以用矩陣相乘的方式表示。若有一下定義:


1.jpg

則可以將單應性簡單的表示為:


2.jpg

這裡引入引數s,它是任意尺度的比例(目的是使得單應性定義到該尺度比例)。H有兩部分組成:用於定位觀察的物體平面的物理變換和使用攝像機內參數矩陣的投影。


3.jpg

物理變換部分是與觀測到的影象平面相關的部分旋轉R和部分平移t的影響之和,表示如下:


4.jpg

這裡R為3*3大小的矩陣,t表示一個3維的列向量,攝像機內參數矩陣用M表示,那麼我們重寫單應性如下:


5.jpg

單應性研究的是一個平面上到另外一個平面的對映,那麼上述公式中的~Q,就可以簡化為平面座標中的~Q',即我們使Z=0。即物體平面上的點我們用x,y表示,相機平面上的點,我們也是用二維點表示。我們去掉了Z方向的座標,那麼相對於旋轉矩陣R,R可以分解為R=[r1 r2 r3],那麼r3也就不要了,參考下面的推導:


6.jpg

其中H為:


7.jpg

是一個3×3大小的矩陣,故最終的單應性矩陣可表示如下:


8.jpg

OpenCV就是利用上述公式來計算單應性矩陣。它使用同一物體的多個影象來計算每個視場的旋轉和平移,同時也計算攝像機的內參數。

inlier點集驗證

K-Means演算法解決了影象特徵聚類分析的問題,現在需要解決驗證的問題 。OpenCV中有很多種匹配演算法SIFT、ORB、RANSAC等演算法,這裡只說比較有名的RANSAC演算法。RANSAC演算法是一種簡單且有效的去除噪聲影響,估計模型的一種方法。與普通的去噪演算法不同,RANSAC演算法是使用盡可能少的點來估計模型引數,然後儘可能的擴大得到的模型引數的影響範圍。
RANSAC演算法的具體描述是:給定N個數據點組成的集合P,假設集合中大多數的點都是可以通過一個模型來產生的,且最少通過n個點(n<N)可以擬合出模型的引數,則可以通過以下的迭代方式擬合該引數。
對下面的操作執行k次:
(1)從P中隨機選擇n個數據點;
(2)用這n個數據點擬合出一個模型M;
(3)對P中剩餘的資料點,計算每個點與模型M的距離,距離超過閾值的則認定為局外點(及outlier點),不超過閾值的認定為局內點(及inlier點),並記錄該模型M所對應的局內點的值m;
迭代k次以後,選擇m最大的模型M作為擬合的結果。
因為在實際應用中N的值通常會很大,那麼從其中任選n個數據點的組合就會很大,如果對所有組合都進行上面的操作運算量就會很大,因此對於k的選擇就很重要。通常情況下,只要保證模型估計需要的n個點都是點的概率足夠高即可。因此設w為N個數據中局內點的比例,z為進行k次選取後,至少有一次選取的n個點都是局內點的概率。則有


9.jpg


其中 1−wn 表示一次選取不都是局內點的概率,(1−wn)k 表示k次選取中沒有一次都是局內點的概率。 則有:


10.jpg

這裡z一般要求滿足大於95%即可。
至此一個完整的AR識別追蹤流程原理分析完畢,後續就是OpenCV原始碼研究。