Cuboid特征提取算法
Cuboid特征提取算法
Cuboid特征檢測算法是一種用于檢測和表示視頻中行為的通用算法。什么意思呢?就是說,對于視頻里面的任意行為,不管是人的行為,動物的行為,還是機器人的行為,都可以用Cuboid特征來進行表示。所以說,這個算法的應用范圍還是很廣泛滴。
Cuboid特征是一種時空特征( Spatio-temporal Feature),它將圖片的空間檢測算子擴展到了視頻的時空檢測算子。我們把視頻看成是由一張張圖像組成的序列,那么對于視頻中的任意一點,我們都可以用(x,y,t)來表示,從而我們就可以把視頻視為一種三維數據。時空特征點就是從這樣的三維數據中提取出的興趣點。
圖 1 將視頻看成一種三維數據示意圖
優點:對周期性運動的物體,或是有著顯著運動特征的物體,檢測效果好,且檢測出來的特征點數目非常多。
缺點:如果物體做平移運動,或者運動特征不明顯,則檢測的特征點數目很少。
Cuboid特征提取過程
Cuboid特征提取可分為特征檢測,生成Cuboid,生成Cuboid原型,生成最終行為描述子,這4個過程。
特征檢測(Feature Detection)
R=(I?g?hev)2+(I?g?hod)2
和許多興趣點檢測算法一樣,Cuboid的響應函數是通過應用可分離的線性濾波器(Separable Linear Filters)來進行計算的。
前提假設:
假設攝像頭是靜止的,或者攝像頭運動但是其運動過程是可描述的。
響應函數:
其中
g(x,y;σ)=12πσ2e?(x2+y2)2σ2
hev(t;τ,ω)=?cos(2πtω)e?t2τ2
hod(t;τ,ω)=?sin(2πtω)e?t2τ2
ω=4τg(x,y;σ)是應用在空間域上的二維高斯平滑函數,hev和hod是應用于時間維上的互相正交的一維Gabor濾波器,用來探測具有周期運動的成分。
我們取響應函數的局部最大值(極值)的點作為興趣點,即采用了非最大抑制法來尋找興趣點。
此處或許大家會跟我一樣有一個疑惑,只要是響應函數的極值點就把它作為興趣點嗎?答案是:Yes。沒錯,要是有500個極值點,我就取500個興趣點;要是有1000個極值點,我就取1000個興趣點,就是那么任性。因此,可能就會產生這樣的結果,我對三個不同的視頻應用響應函數來提取特征點,三個視頻提取出的特征點個數都是不一樣的。很神奇吧,居然還有這樣的操作。生成Cuboid
特征點→Cuboid
好啦,經過上一步,我們已經拿到了很多個特征點,比如說是666個吧。接下來呢,我們就要把這666個特征點變成666個cuboid,即
首先呢,每一個特征點取一個cuboid塊兒,以特征點為中心,長寬高分別為(x,y,t)=(2[3σ]+1,2[3σ]+1,2[3τ]+1)。那么cuboid長什么樣子呢?多說廢話不如上圖。
圖 2 基于cuboid的行為識別可視化算法示意圖
圖1里上面那一大塊兒就是一段倉鼠吃東西的視頻。經過特征檢測,我們從這段視頻里面檢測出來18個特征點。我們把每一個特征點變成一個cuboid,也就是圖1下半部分的那些小塊兒,我們用這些小塊兒來進行行為分析。
為了能夠比較cuboid之間的相似度,在進行下一步之前,我們還需要對這些小塊兒進行一些處理,將cuboid轉化為向量。
首先,對cuboid做變換。 Cuboid的提出者采用了三種變換方式:歸一化像素值,亮度梯度,引入窗口光流。
然后,將變換后的cuboid轉化為向量。同樣的,提出者也采用了三種方式:直接將Cuboid拉直為一個向量,全局直方圖和局部直方圖。
(經過測試比較,發現直接用cuboid求亮度梯度得到特征向量的分類誤差最小。)
最后,用PCA進行降維。到目前為止,我們得到的特征向量維度非常的大,為了減少最終描述子(也就是特征向量)的維數,我們需要使用PCA來進行降維。
我們在提取的cuboids里,隨機選取一定數目的 cuboids 特征向量,然后進行 PCA 降維,取特征值最大的前 K 個主成分(實際上就是提取了 k 個basis)。然后將每個 cuboids 投影到這些基上,構成了 K × 1 的 cuboid 特征描述子。這種描述子可看成了 PCA-SIFT 描述子的推廣。
好,那現在每一個cuboid都變成了K × 1的特征向量(特征描述子)。生成Cuboid原型(Cuboid Prototypes)
在上一步我們得到了一堆Cuboid特征描述子,雖然這些描述子可能互相不相同,但冥冥之中,它們可能是同一種描述子。什么意思呢?舉個栗子,假如我們都是一個Cuboid特征描述子,你跟我,我跟他長得都不一樣吧,我們是不一樣的描述子,但是呢,從本質上來說,我們是一樣的,我們都屬于人種對吧,也就是說我們這些描述子都屬于同一個Cuboid原型。
當不同人做同一種動作時,盡管其表觀和運動有所不同,但是檢測到的興趣點應該是相似的。所以盡管可能的cuboid的數目很多,但cuboid的類型的很少。所以在動作識別領域,cuboid的精確構成不是很重要,重要的是要檢測出cuboid的類型,即cuboid prototypes。
因此,在得到大量的Cuboid特征描述子后,我們將其進行k-means聚類,聚類中心即為Cuboid原型,從而形成Cuboid 原型字典庫。- 生成行為描述子(Behavior Descriptor)
有了 Cuboid 原型庫,接下來我們要提取行為描述子作為一個視頻序列的特征向量。
這個采用的方法是用Cuboid原型的直方圖表示,如圖3所示。一個視頻的興趣點對應的Cuboids屬于某個Cuboid prototype的個數構成的向量。橫軸是Cuboid原型,圖3上是50個Cuboid原型,縱軸就是屬于這個原型的Cuboid的個數。這個直方圖呢,我們用一個向量來表示,圖3的直方圖,我們就用一個50*1的向量,向量里的第1個元素的值就是屬于原型1的Cuboid的個數,以此類推。
圖 3 Cuboid原型直方圖
經過特征檢測,生成Cuboid,生成Cuboid原型,生成最終行為描述子這4個過程,每一個視頻我們最終都得到了一個行為描述子。接下來,我們就只要把這些行為描述子扔到分類器里面去做分類就可以啦,比如簡單的KNN,稍微復雜點的SVM等等。
ps: 后面寫的比較糙,有時間再詳細把每一塊兒擴充一下。
本文參考了tornadomeet的文章,鏈接為
http://www.cnblogs.com/tornadomeet/archive/2012/05/10/2495212.html
總結
以上是生活随笔為你收集整理的Cuboid特征提取算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab中gradient函数的使用
- 下一篇: MAC Android Studio|