在過去的一年半里嘗試了一些簡單的目標跟蹤算法,現總結如下:
1、 采用霍夫變換提取圓輪廓,對目標進行跟蹤。
OpenCV實現的是一個比標准霍夫圓變換更為靈活的檢測方法: 霍夫梯度法, 也叫2-1霍夫變換(21HT)。它的原理依據是圓心一定是在圓上的每個點的模向量上, 這些圓上點模向量的交點就是圓心, 霍夫梯度法的第一步就是找到這些圓心, (圓心包含了圓心處的x和y坐標)這樣三維的累加平面就又轉化為二維累加平面. 第二步根據所有候選中心的邊緣非0像素對其的支持程度來確定半徑。
HoughCircles函數實現了圓形檢測,它使用的算法也是改進的霍夫變換——2-1霍夫變換(21HT)。也就是把霍夫變換分為兩個階段,從而減小了霍夫空間的維數。第一階段用於檢測圓心,第二階段從圓心推導出圓半徑。檢測圓心的原理是圓心是它所在圓周所有法線的交匯處,因此只要找到這個交點,即可確定圓心,該方法所用的霍夫空間與圖像空間的性質相同,因此它僅僅是二維空間。檢測圓半徑的方法是從圓心到圓周上的任意一點的距離(即半徑)是相同,只要確定一個閾值,只要相同距離的數量大於該閾值,我們就認為該距離就是該圓心所對應的圓半徑,該方法只需要計算半徑直方圖,不使用霍夫空間。圓心和圓半徑都得到了,那么通過公式1一個圓形就得到了。從上面的分析可以看出,2-1霍夫變換把標准霍夫變換的三維霍夫空間縮小為二維霍夫空間,因此無論在內存的使用上還是在運行效率上,2-1霍夫變換都遠遠優於標准霍夫變換。但該算法有一個不足之處就是由於圓半徑的檢測完全取決於圓心的檢測,因此如果圓心檢測出現偏差,那么圓半徑的檢測肯定也是錯誤的。
2-1霍夫變換的具體步驟為:
1)首先對圖像進行邊緣檢測,調用opencv自帶的Canny()函數,將圖像二值化,得到邊緣圖像。
2)對邊緣圖像上的每一個非零點。采用Sobel()函數,計算x方向導數和y方向的導數,從而得到梯度。從邊緣點,沿着梯度和梯度的反方向,對參數指定的min_radius到max_radium的每一個像素,在累加器中被累加。同時記下邊緣圖像中每一個非0點的位置。
3)從(二維)累加器中這些點中選擇候選中心。這些中心都大於給定的閾值和其相鄰的四個鄰域點的累加值。
4)對於這些候選中心按照累加值降序排序,以便於最支持的像素的中心首次出現。
5)對於每一個中心,考慮到所有的非0像素(非0,梯度不為0),這些像素按照與其中心的距離排序,從最大支持的中心的最小距離算起,選擇非零像素最支持的一條半徑。
6)如果一個中心受到邊緣圖像非0像素的充分支持,並且到前期被選擇的中心有足夠的距離。則將圓心和半徑壓入到序列中,得以保留。
視頻結果顯示:http://i.youku.com/i/UNDc2MTE1OTczNg==/videos?spm=a2hzp.8244740.0.0
2、 利用顏色直方圖,選擇合適的閾值,提取目標的顏色特征進行跟蹤。
顏色特征是在圖像檢索中應用最為廣泛的視覺特征,主要原因在於顏色往往和圖像中所包含的物體或場景十分相關。此外,與其他的視覺特征相比,顏色特征對圖像本身的尺寸、方向、視角的依賴性較小,從而具有較高的魯棒性。
顏色特征的特點:顏色特征是一種全局特征,描述了圖像或圖像區域所對應的景物的表面性質。一般顏色特征是基於像素點的特征,此時所有屬於圖像或圖像區域的像素都有各自的貢獻。由於顏色對圖像或圖像區域的方向、大小等變化不敏感,所以顏色特征不能很好地捕捉圖像中對象的局部特征。另外,僅使用顏色特征查詢時,如果數據庫很大,常會將許多不需要的圖像也檢索出來。顏色直方圖是最常用的表達顏色特征的方法,其優點是不受圖像旋轉和平移變化的影響,進一步借助歸一化還可不受圖像尺度變化的影響,基缺點是沒有表達出顏色空間分布的信息。
顏色直方圖是在許多圖像檢索系統中被廣泛采用的顏色特征。它所描述的是不同色彩在整幅圖像中所占的比例,而並不關心每種色彩所處的空間位置,即無法描述圖像中的對象或物體。顏色直方圖特別適於描述那些難以進行自動分割的圖像。當然,顏色直方圖可以是基於不同的顏色空間和坐標系。最常用的顏色空間是RGB顏色空間,原因在於大部分的數字圖像都是用這種顏色空間表達的。然而,RGB空間結構並不符合人們對顏色相似性的主觀判斷。因此,有人提出了基於HSV空間、Luv空間和Lab空間的顏色直方圖,因為它們更接近於人們對顏色的主觀認識。其中HSV空間是直方圖最常用的顏色空間。它的三個分量分別代表色彩(Hue)、飽和度(Saturation)和值(Value)。
計算顏色直方圖需要將顏色空間划分成若干個小的顏色區間,每個小區間成為直方圖的一個bin。這個過程稱為顏色量化(color quantization)。然后,通過計算顏色落在每個小區間內的像素數量可以得到顏色直方圖。顏色量化有許多方法,例如向量量化、聚類方法或者神經網絡方法。最為常用的做法是將顏色空間的各個分量(維度)均勻地進行划分。相比之下,聚類算法則會考慮到圖像顏色特征在整個空間中的分布情況,從而避免出現某些bin中的像素數量非常稀疏的情況,使量化更為有效。另外,如果圖像是RGB格式而直方圖是HSV空間中的,我們可以預先建立從量化的RGB空間到量化的HSV空間之間的查找表(look-up table),從而加快直方圖的計算過程。
上述的顏色量化方法會產生一定的問題。設想兩幅圖像的顏色直方圖幾乎相同,只是互相錯開了一個bin,這時如果我們采用L1距離或者歐拉距離計算兩者的相似度,會得到很小的相似度值。為了克服這個缺陷,需要考慮到相似但不相同的顏色之間的相似度。一種方法是采用二次式距離。另一種方法是對顏色直方圖事先進行平滑過濾,即每個bin中的像素對於相鄰的幾個bin也有貢獻。這樣,相似但不相同顏色之間的相似度對直方圖的相似度也有所貢獻。
選擇合適的顏色小區間(即直方圖的bin)數目和顏色量化方法與具體應用的性能和效率要求有關。一般來說,顏色小區間的數目越多,直方圖對顏色的分辨能力就越強。然而,bin的數目很大的顏色直方圖不但會增加計算負擔,也不利於在大型圖像庫中建立索引。而且對於某些應用來說,使用非常精細的顏色空間划分方法不一定能夠提高檢索效果,特別是對於不能容忍對相關圖像錯漏的那些應用。另一種有效減少直方圖bin的數目的辦法是只選用那些數值最大(即像素數目最多)的bin來構造圖像特征,因為這些表示主要顏色的bin能夠表達圖像中大部分像素的顏色。實驗證明這種方法並不會降低顏色直方圖的檢索效果。事實上,由於忽略了那些數值較小的bin,顏色直方圖對噪聲的敏感程度降低了,有時會使檢索效果更好。
HSV空間是比較常用的統計顏色特征的空間,它比RGB系統更接近人們的經驗隊彩色的感知。
其中H代表了色調,S代表顏色,V可以看做飽和度,統計中采用了固定h和s,統計v特征,比如,划分h為16份,s為4份,v為4份,那么我們最終會得到一個256維的特征向量。具體的維數可以相應的調整,我們也可以分塊對圖像進行統計。顯示更多的細節。
視頻結果顯示:http://i.youku.com/i/UNDc2MTE1OTczNg==/videos?spm=a2hzp.8244740.0.0
3、 采用Camshift算法對目標進行跟蹤。
CamShift算法的全稱是"Continuously Adaptive Mean-SHIFT",即:連續自適應的MeanShift算法。其基本思想是對視頻序列的所有圖像幀都作MeanShift運算,並將上一幀的結果(即搜索窗口的中心位置和窗口大小)作為下一幀MeanShift算法的搜索窗口的初始值,如此迭代下去。簡單點說,meanShift是針對單張圖片尋找最優迭代結果,而camShift則是針對視頻序列來處理,並對該序列中的每一幀圖片都調用meanShift來尋找最優迭代結果。正是由於camShift針對一個視頻序列進行處理,從而保證其可以不斷調整窗口的大小,如此一來,當目標的大小發生變化的時候,該算法就可以自適應地調整目標區域繼續跟蹤。
在OpenCV自帶的camShift的例子當中,是通過計算目標在HSV空間下的H分量直方圖,通過直方圖反向投影得到目標像素的概率分布,然后通過調用OpenCV的CAMSHIFT算法,自動跟蹤並調整目標窗口的中心位置與大小。該算法對於簡單背景下的單目標跟蹤效果較好,但如果被跟蹤目標與背景顏色或周圍其它目標顏色比較接近,則跟蹤效果較差。另外,由於采用顏色特征,所以它對被跟蹤目標的形狀變化有一定的抵抗能力。
分為三個部分:
1--色彩投影圖(反向投影):
(1).RGB顏色空間對光照亮度變化較為敏感,為了減少此變化對跟蹤效果的影響,首先將圖像從RGB空間轉換到HSV空間。(2).然后對其中的H分量(色調)作直方圖,在直方圖中代表了不同H分量值出現的概率或者像素個數,就是說可以查找出H分量大小為h的概率或者像素個數,即得到了顏色概率查找表。(3).將圖像中每個像素的值用其顏色出現的概率對替換,就得到了顏色概率分布圖。這個過程就叫反向投影,顏色概率分布圖是一個灰度圖像。
2--meanshift
meanshift算法是一種密度函數梯度估計的非參數方法,通過迭代尋優找到概率分布的極值來定位目標。
算法過程為:
(1).在顏色概率分布圖中選取搜索窗W
(2).計算零階距:
計算一階距:
計算搜索窗的質心:
(3).調整搜索窗大小
寬度為;長度為1.2s;
(4).移動搜索窗的中心到質心,如果移動距離大於預設的固定閾值,則重復2)3)4),直到搜索窗的中心與質心間的移動距離小於預設的固定閾值,或者循環運算的次數達到某一最大值,停止計算。關於meanshift的收斂性證明可以google相關文獻。
3--camshift
將meanshift算法擴展到連續圖像序列,就是camshift算法。它將視頻的所有幀做meanshift運算,並將上一幀的結果,即搜索窗的大小和中心,作為下一幀meanshift算法搜索窗的初始值。如此迭代下去,就可以實現對目標的跟蹤。
算法過程為:
(1).初始化搜索窗
(2).計算搜索窗的顏色概率分布(反向投影)
(3).運行meanshift算法,獲得搜索窗新的大小和位置。
(4).在下一幀視頻圖像中用(3)中的值重新初始化搜索窗的大小和位置,再跳轉到(2)繼續進行。
camshift能有效解決目標變形和遮擋的問題,對系統資源要求不高,時間復雜度低,在簡單背景下能夠取得良好的跟蹤效果。但當背景較為復雜,或者有許多與目標顏色相似像素干擾的情況下,會導致跟蹤失敗。因為它單純的考慮顏色直方圖,忽略了目標的空間分布特性,所以這種情況下需加入對跟蹤目標的預測算法。
視頻結果顯示:http://i.youku.com/i/UNDc2MTE1OTczNg==/videos?spm=a2hzp.8244740.0.0
4、 采用ASMS算法對目標進行跟蹤。
ASMS是VOT2015的第20名官方推薦的實時算法,VOT2016的32名(中等水平),平均幀率125FPS,在經典mean-shift框架下加入了尺度估計,經典顏色直方圖特征,加入了兩個先驗(尺度不劇變+可能偏最大)作為正則項,和反向尺度一致性檢查。
作者給的測試速度如下(以ms為單位):
視頻結果顯示:http://i.youku.com/i/UNDc2MTE1OTczNg==/videos?spm=a2hzp.8244740.0.0(視頻中紅色矩形框是真實位置,藍色矩形框為算法計算位置)
上圖分別是跟蹤序列的准確度(閾值20)和成功率(閾值0.5)。