光流的基本概念
光流(Optical Flow)是指圖像中像素或特征點在時間序列上的運動軌跡。它反映了物體在場景中的運動信息,廣泛應用于計算機視覺、視頻處理等領域。
光流是在連續(xù)運動的視頻中識別運動物體的識別方法。
這里強調物體的運動屬性(運動的影像,拖影就是流)。就像青蛙捕蟲,蟲子不動是不會被青蛙發(fā)現(xiàn)的。
光流如何在動態(tài)視頻中識別出運動物體?
核心點在于,在動態(tài)視頻中,運動物體的像素點的運動方式和靜止物體的像素點運動方式不一樣。
如果載體(無人機,車輛,船只等)本身靜止不動,那么所有靜止物體的像素點在第t幀和第t+1幀的位置是不變的,像素點的運動矢量(就是像素點x從第t幀位置往第t+1幀位置的有向連線)是0向量。
如果載體(無人機,車輛,船只等)本身運動,那么所有靜止物體的像素點在第t幀和第t+1幀的位置會“均勻”的改變,像素點的運動矢量(就是像素點x從第t幀位置往第t+1幀位置的有向連線)是載體本身運動矢量的逆。
凡是不按上述方式運動的像素點,這些“叛逆分子”就代表運動物體。
圖二中的光流,由于是全部是靜物環(huán)境,所以都按相同規(guī)律超中心射影點匯聚。假設出現(xiàn)一些“倒行逆施”的像素點,那么它們必然是運動物體。
光流這個名字的直觀記憶方法是運動拖影。雖然在現(xiàn)實中我們拍攝到的動態(tài)圖像由于使用高速攝影機根本沒有拖影。但是我們確實是使用“拖影”原理來表現(xiàn)光流,所謂拖影也就是前面幀和后面幀的像素位置差異。
光流和其他圖像識別方法的區(qū)別
前面舉例青蛙捕蟲,蟲子不動的話青蛙就發(fā)現(xiàn)不了,這是因為青蛙用光流這種方法來識別運動物體;但對于某些不依賴光流方法的捕食者,即使目標靜止不動也會被發(fā)現(xiàn),因為這些捕食者是依靠靜態(tài)圖像識別。
一言以蔽之,光流是依靠連續(xù)圖像的幀與幀之間像素位置變化,挑選出不符合靜物特征的像素點群作為運動物體來識別。只有單幀圖像時,光流無法工作。
其它圖像識別算法是以單幀圖像為基礎來識別其中的物體。所以,直觀的講,非光流方法的圖像識別可以識別不動的目標物體。
非光流方法中最有代表性的是圖像語義識別。這里的語義不是說和自然語言處理有任何關系,而是說給出被識別物體的語義稱謂,通俗的說就是不僅識別出物體,還識別出該物體在人類語言體系中叫什么。比如一只黃白相間圓頭圓腦毛茸茸的小動物會被識別為“貓”,貓就是語義。
光流的應用場景
視頻監(jiān)控
1. 目標跟蹤
利用光流可以直觀地跟蹤視頻中的目標。例如在商場監(jiān)控中,通過對人體特征點的光流分析,可以持續(xù)跟蹤顧客的行動軌跡,無論是在平地上行走還是在上下樓梯,光流都能提供準確的運動方向和速度信息,方便安保人員監(jiān)控異常行為。
2. 人群流動分析
在大型活動場所,如體育場或者演唱會現(xiàn)場,光流可以用來分析人群的整體流動方向和速度。通過計算大量像素或者特征點的光流,可以得到人群的動態(tài)分布情況,有助于場地管理和安全保障。
1. 環(huán)境感知
車輛周圍的物體運動信息對于自動駕駛至關重要。光流可以直觀地提供道路標志、其他車輛和行人的運動情況。例如,通過分析路邊樹木或者路燈桿的光流,車輛可以判斷自己的行駛速度和方向是否正確;通過跟蹤其他車輛的光流矢量,可以提前做出避讓或者跟車決策。
2. 視覺里程計
光流有助于計算車輛相對于周圍環(huán)境的運動距離。就像我們通過觀察周圍景物的移動來感覺自己走了多遠一樣,車輛利用光流可以更精確地確定自己的行駛里程,提高導航和定位的準確性。
雖然光流有很多應用場景,在筆者的日常工作中,我們用的最多的是用光流來進行環(huán)境感知。我們結合圖像語義識別和光流法來識別運動型障礙物的存在以及運動方式,再用匈牙利算法之類的匹配算法將圖像語義識別和光流法分別識別到的運動障礙物一一對應起來,并剔除誤識別的障礙物。這種方法也被稱為“后融合”。