光流(optical flow)
/ OP-tih-kul floh /
光流透過對每一個像素發問「它移動到了哪裡?」,來測量相鄰兩幀影片之間的運動。它的輸出是一片密密麻麻的小箭頭,每個像素一支,表示表觀運動的方向與速度。想像你在相隔幾分之一秒拍下的兩張照片之間來回翻看,描出場景裡每一個斑點是如何滑過畫面的——那張「滑動地圖」就是光流。機器正是這樣感知到「東西在動」以及大致動得多快。
經典的方法基於一個簡單假設:世界裡的一小塊從這一幀到下一幀保持同樣的亮度,於是你可以透過匹配亮度模式來找到它去了哪兒。由此你可以穩定抖動的影片、壓縮影片(只存運動,而不必把每個像素重新存一遍)、在幀與幀之間插值出流暢的慢動作、追蹤物體,以及把運動線索餵給動作辨識和機器人。較新的系統用神經網路來學習光流,更能應付那些困難的情形。
誠實的局限就寫在名字裡:它是光流,是圖像中亮度的表觀運動,而不是世界裡物體的真實運動。一根旋轉的理髮店招牌燈柱看起來像在向上移動;一面均勻的白牆從眼前滑過卻給不出任何光流,因為根本沒有東西可追蹤;閃亮的反光和陰影會在沒有任何物體移動的情況下移動。那個經典的亮度假設,在光照變化、大幅快速運動和遮擋之下也會失效。所以光流是一個強有力的運動線索,但它是對「表觀」的推斷,而不是對物理的直接讀數。
一輛車從左向右行駛的兩幀:光流在車身上密密地畫出向右的箭頭,運動最快處箭頭最長,而靜止的背景上箭頭幾乎為零。那扇平滑、塗色均勻的車門,因為沒有紋理可追蹤,中間部分可能得到不可靠或缺失的箭頭。
每個像素的箭頭表示表觀運動——但沒有紋理的表面給不出可追蹤的信號。
光流是圖像中亮度的運動,而非世界裡物體的運動——反光、陰影和光照變化都會在沒有任何東西真正移動的情況下產生光流,而一個正在移動卻沒有特徵的表面則一點光流也不產生。它是一個有待解讀的線索,而不是一個可以盲目信任的測量值。