图像处理理论(八)——Meanshift, Camshift, Optical flow
Meanshift
Meanshift聚類
Meanshift(均值漂移)首先是個聚類算法,然后才應用到目標跟蹤領域。它是Keinosuke Fukunaga和Larry D. Hostetler于1975年發明的。
Keinosuke Fukunaga,日本裔美國科學家,普渡大學教授。著有《Introduction to Statistical Pattern Recognition》一書。
我們首先來定義一下Mean Shift向量。
對于給定的d維空間RdRd中的n個樣本點xi,i=1,?,nxi,i=1,?,n,則對于x點,其Mean Shift向量的基本形式為:
Mh(x)=1k∑xi∈Sh(xi?x)Mh(x)=1k∑xi∈Sh(xi?x)
其中,ShSh指的是一個半徑為h的高維球區域,如上圖中的藍色的圓形區域。ShSh的定義為:
Sh(x)=(y∣(y?x)(y?x)T?h2)Sh(x)=(y∣(y?x)(y?x)T?h2)
從物理的角度來看,由于1k∑xi∈Shxi1k∑xi∈Shxi實際上是ShSh的質量中心,因此Mh(x)Mh(x)實際上就是從x指向質心的向量,也被叫做歸一化的概率密度梯度。所以,Meanshift聚類實際上是一種密度聚類。
下面來看一下Meanshift算法的具體步驟。
首先,在空間中任選一點x(上圖中藍色的圈),以x為圓心,h為半徑做一個高維球(上圖中藍色的圓)。計算得到質心(上圖中黃色的圈)。移動x到質心,并重復之前的步驟。最終x會收斂到最密集區域的質心。
基本的Mean Shift形式存在一個問題:在ShSh的區域內,每一個點對x的貢獻是一樣的。而實際上,這種貢獻與x到每一個點之間的距離是相關的。同時,對于每一個樣本,其重要程度也是不一樣的。
到了1995年,Yizong Cheng(現為University of Cincinnati副教授)對基本的Mean Shift算法在以下兩個方面做了推廣。
首先,定義了一族核函數,使得隨著樣本與被偏移點的距離不同,其偏移量對均值偏移向量的貢獻也不同。
其次,還設定了一個權重系數,使得不同的樣本點重要性不一樣,這大大擴大了Mean Shift的適用范圍。
基于以上的考慮,可對基本的Mean Shift向量形式中增加核函數和樣本權重,得到如下的改進的Mean Shift向量形式:
Mh(x)=∑ni=1GH(xi?x)w(xi)(xi?x)∑ni=1GH(xi?x)w(xi)Mh(x)=∑i=1nGH(xi?x)w(xi)(xi?x)∑i=1nGH(xi?x)w(xi)
其中:
GH(xi?x)=|H|?12G(H?12(xi?x))GH(xi?x)=|H|?12G(H?12(xi?x))
G(x)是一個單位的核函數。H是一個正定的對稱d×d矩陣,稱為帶寬矩陣,其是一個對角陣。w(xi)?0w(xi)?0是每一個樣本的權重。對角陣H的形式為:
H=???????h210?00h22?0???00?h2d???????d×dH=(h120?00h22?0???00?hd2)d×d
因此,上述Mean Shift向量也可以改寫成:
Mh(x)=∑ni=1G(xi?xhi)w(xi)(xi?x)∑ni=1G(xi?xhi)w(xi)Mh(x)=∑i=1nG(xi?xhi)w(xi)(xi?x)∑i=1nG(xi?xhi)w(xi)
這里的核函數可以是Uniform核,也可以是Gaussian核。
參考:
https://wenku.baidu.com/view/5862334827d3240c8447ef40.html
meanshift算法簡介
http://www.cnblogs.com/liqizhou/archive/2012/05/12/2497220.html
Meanshift,聚類算法
https://wenku.baidu.com/view/0d9eb876a417866fb84a8eb2.html
mean-shift算法概述
http://www.cnblogs.com/cfantaisie/archive/2011/06/10/2077188.html
meanshift聚類
https://blog.csdn.net/google19890102/article/details/51030884
Mean Shift聚類算法
反向投影圖
在繼續介紹Meanshift之前,我們先引入反向投影圖的概念。
首先,我們對圖像的像素值按照某種特征進行直方圖統計,得到一組bin值。
然后,計算位置x上的bin值,并用該bin值替換原來的像素值,就得到了反向投影圖。
參考:
https://blog.csdn.net/poiiy333/article/details/9051409
反向投影圖
Meanshift與目標跟蹤
由于RGB對光照的變化比較敏感,而這種敏感對目標跟蹤而言是不利的。因此,通常我們要將圖像轉換到HSV顏色空間。
首先,統計目標box區域內H(色調)分量的直方圖,并對其進行歸一化,使得該直方圖成為概率直方圖。這一步相當于統計目標的顏色特征。
然后,使用統計得到的概率直方圖,將全圖轉換為反向投影圖,并應用Meanshift算法。由于前后兩幀中目標通常不會隔的太遠,原目標中心可能仍在目標范圍內。因此,目標中心會向反向投影圖中概率大的地方移動,從而達到了目標跟蹤的效果。
總結:用meanshift進行跟蹤最重要的一點是輸入圖像的把握,也就是要讓它的迭代能越來越迭代到目標上。這種圖像也不一定就是反向投影圖,只要是一幅反映當前圖像中每個像素點含有目標概率的圖就可以了。反向投影圖恰好就是這樣的一幅圖而已。
優點:
(1)算法計算量不大,在目標區域已知的情況下完全可以做到實時跟蹤;
(2)采用核函數直方圖模型,對邊緣遮擋、目標旋轉、變形和背景運動不敏感。
缺點:
(1)缺乏必要的模板更新;
(2)跟蹤過程中由于窗口寬度大小保持不變,當目標尺度有所變化時,跟蹤就會失敗;
(3)當目標速度較快時,跟蹤效果不好;
(4)直方圖特征在目標顏色特征描述方面略顯匱乏,缺少空間信息;
參考:
https://blog.csdn.net/li_dongxuan/article/details/70667170
目標跟蹤:Meanshift, Camshift
http://www.cnblogs.com/cfantaisie/archive/2011/06/10/2077190.html
meanshift目標跟蹤算法總結
https://blog.csdn.net/jinshengtao/article/details/30258833
基于MeanShift的目標跟蹤算法及實現
Meanshift與圖像分割
除此之外,mean shift還可以用于圖像分割。
如上圖所示,算法過程可分三步走:模點搜索/圖像平滑、模點聚類/合并相似區域、兼并小區域(可選)。
模點搜索是為了找到每個數據點的到類中心,以中心的顏色代替自己的顏色,從而平滑圖像。
但模點搜索得到的模點太多,并且很多模點挨得很近,若果將每個模點都作為一類的話,類別太多,容易產生過分割,即分割太細,所以要合并掉一些模點,也就是合并相似區域。
模點聚類后所得到的分割區域中,有些區域所包含的像素點太少,這些小區域也不是我們想要的,需要再次合并。
參考:
https://blog.csdn.net/ttransposition/article/details/38514127
mean shift圖像分割
Camshift
Camshift算法是Continuously Adaptive Mean Shift algorithm的簡稱。它是一個基于MeanSift的改進算法。它首次由Gary R.Bradski等人提出和應用在人臉的跟蹤上,并取得了不錯的效果。
由于Meanshift在跟蹤中搜索框的大小一直不變,對目標的尺度變化不具有魯棒性。Camshift針對此點設計了自適應算法用于調整窗口的大小。該方法共有兩步:
擴大:在計算窗口大小前,在MeanShift算出的窗口的四個方向上增大了TOLERANCE,即高和寬都增大了2TOLERANCE(此值自己調整設置)。
縮小:在擴大的窗口內重新計算0階矩,1階矩和2階矩,利用矩的值重新計算高和寬。
缺點:
(1)只利用顏色統計做的跟蹤,在背景有相似顏色時,會出現跟蹤錯誤的情況。
(2)不能做多目標跟蹤。
(3)由于它只在初始位置(而不是從每個像素點)開始迭代,所以有可能在初始位置錯了后,收斂的位置還是原位置(即跟丟了后,可能會找不回來)。
參考:
http://blog.sina.com.cn/s/blog_5d1476580101a57j.html
Camshift算法
http://blog.163.com/thomaskjh@126/blog/static/370829982010113133152722/
CAMSHIFT原理
https://wenku.baidu.com/view/59596ac42cc58bd63186bd37.html
Camshift算法原理
Optical flow
基本概念
從本質上說,光流就是你在這個運動著的世界里感覺到的明顯的視覺運動。例如,當你坐在火車上,然后往窗外看。你可以看到樹、地面、建筑等等,他們都在往后退。這個運動就是光流。
一些比較遠的目標,例如云、山,它們移動很慢,感覺就像靜止一樣。但一些離得比較近的物體,例如建筑和樹,就比較快的往后退,然后離我們的距離越近,它們往后退的速度越快。可以通過不同目標的光流運動速度判斷它們與我們的距離。
光流除了提供遠近外,還可以提供角度信息。與咱們的眼睛正對著的方向成90度方向運動的物體速度要比其他角度的快。
以上是光流的一個直觀的定義和特性,下面談一下它的嚴謹的研究性定義。
光流的概念是Gibson在1950年首先提出來的。它是空間運動物體在觀察成像平面上的像素運動的瞬時速度,是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關系,從而計算出相鄰幀之間物體的運動信息的一種方法。一般而言,光流是由于場景中前景目標本身的移動、相機的運動,或者兩者的共同運動所產生的。
當人的眼睛觀察運動物體時,物體的景象在人眼的視網膜上形成一系列連續變化的圖像,這一系列連續變化的信息不斷“流過”視網膜(即圖像平面),好像一種光的“流”,故稱之為光流(optical flow)。光流表達了圖像的變化,由于它包含了目標運動的信息,因此可被觀察者用來確定目標的運動情況。
研究光流場的目的就是為了從圖片序列中近似得到不能直接得到的運動場。運動場(motion field),其實就是物體在三維真實世界中的運動;光流場,是運動場在二維圖像平面上(人的眼睛或者攝像頭)的投影。
光流約束方程
1981年,Horn和Schunck創造性地將二維速度場與灰度相聯系,引入光流約束方程,得到光流計算的基本算法。人們基于不同的理論基礎提出各種光流計算方法,算法性能各有不同。Barron等人對多種光流計算技術進行了總結,按照理論基礎與數學方法的區別把它們分成四種:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法。近年來神經動力學方法也頗受學者重視。
總結
以上是生活随笔為你收集整理的图像处理理论(八)——Meanshift, Camshift, Optical flow的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像处理理论(七)——LBP, Fish
- 下一篇: 语音识别(三)——声学模型, 解码器技术