光流估計 是什麼?

Optical Flow:光流估計 的完整解釋

估計影片相鄰幀之間像素的運動向量,用於動作檢測、影片壓縮、視覺導航等應用。

核心概念

光流(Optical Flow)源於光學運動的物理學原理。當物體在相機視場中移動時,其投影在影像平面上也隨之移動,這種運動在影像序列中表現為亮度(灰度)的時空變化。光流估計的目標是從這些亮度變化中反向推導物體的真實運動。

光流的核心假設是亮度恆定假設(Brightness Constancy Assumption):物體的亮度在短時間內保持不變。即,像素 (x, y) 在時刻 t 的亮度等於其在時刻 t+1 運動到的新位置的亮度。數學上表達為:

I(x, y, t) = I(x + u, y + v, t + 1)

其中 (u, v) 就是該像素的光流向量。實踐中,亮度恆定假設不總成立(如光照變化、遮擋、反射),這是光流估計的主要挑戰。

光流分為兩類:稀疏光流和稠密光流。稀疏光流(如Lucas-Kanade)只計算特徵點的運動,適合實時應用。稠密光流為每個像素計算運動向量,精度高但計算量大。

運作原理

  • 傳統方法基於亮度恆定假設。對原始假設式 I(x+u, y+v, t+1) = I(x, y, t) 進行泰勒展開,得到光流約束方程(Optical Flow Constraint Equation):

I_x * u + I_y * v + I_t = 0

其中 I_x, I_y, I_t 分別是影像在x、y、時間方向的梯度。但這個方程只有一個約束條件卻有兩個未知數(u, v),屬於不適定問題(aperture problem)。

Lucas-Kanade方法通過假設局部鄰域內光流恆定,在小窗口內累積多個約束方程,利用最小二乘法求解。FlowNet等深度學習方法則直接用卷積神經網絡回歸光流向量。

  • 深度學習方法如PWCNet、RAFT採用編碼器-解碼器架構。編碼器提取多尺度特徵,解碼器逐步上採樣同時細化光流。RAFT引入疊代細化機制(Iterative Refinement),在內存有限的情況下多次精煉光流預測,顯著提升精度。

訓練通常使用L1或L2損失,比較預測光流與真值光流的差異。由於真實光流標籤難以獲取,常用合成資料(如FlyingChairs、Sintel)或自監督學習方法。

實際應用

  • 影片壓縮中,光流支撐幀間預測編碼。編碼器計算相鄰幀間的光流,用前幀和光流重建當前幀,只需編碼殘差,大幅降低碼率。H.264和H.265等現代視頻編碼標準都採用基於光流的運動補償。

  • 影片行為識別利用光流捕捉動作特徵。光流直接表達人體運動,結合靜態特徵(RGB),能更準確識別跑步、跳躍等動作。3D卷積和兩流網絡架構就基於這一原理。

  • 自動駕駛中,光流估計自車運動和障礙物運動。通過光流的一致性,可區分相機自身運動(由自車運動導致)和相對運動(真實障礙物運動),支撐碰撞預警。

  • 視覺導航和SLAM利用光流估計相機位姿變化。光流的累積可推導相機軌跡,補充或替代特徵匹配方法。

常見誤區

誤區一:光流就是相鄰幀間的直接匹配。實際上光流是底層運動的估計,涉及複雜的亮度恆定假設和梯度優化,不能簡單地與特徵匹配等同。

誤區二:高精度光流總能提升高層任務性能。實際上光流本身是中間表達,高層任務(如行為識別)還受其他因素影響。光流精度影響有限時,改進特徵設計可能更有效。

誤區三:光流在高速運動或遮擋時完全不可用。雖然挑戰大,但多尺度方法和粗到精的策略能在困難場景下仍給出有用的估計。

與相關技術的比較

  • 光流 vs 場景流:光流是2D像素運動,場景流進一步估計3D點雲的運動。光流更輕量,場景流更全面。

  • 光流 vs 物體跟蹤:物體跟蹤識別並追蹤特定物體,通常基於邊框或掩模。光流是低層運動估計,無物體語義概念。

  • 光流 vs 特徵匹配:特徵匹配只在特徵點間建立對應,稀疏且通常是離散選擇。光流是稠密估計,每像素都有連續值。光流適合連續運動估計,特徵匹配適合結構恢復。

常見問題