機器人視覺與感知

光流

光流是當你看著一幀畫面變成下一幀時,所感受到的那種表觀運動的圖案。設想兩張相隔一瞬間拍下的照片:幾乎所有東西都還在原處,但影像裡有幾小塊挪動了一點點——一輛經過的車向右滑去,一隻手向上飄移。光流在每個像素上畫一支小箭頭,標出它在兩幀之間看起來朝哪個方向、移動了多遠。把所有這些箭頭疊在一起,你就得到一片運動的場,一張描繪整幅畫面如何流動的地圖。

「表觀」二字很要緊:光流只知道像素動了,卻不知道為什麼動。同樣一批朝右的箭頭,可能意味著車向右開了,也可能是相機向左搖了,或者兩者都有。電腦估算這片光流時,會假設一個明亮的小點從這一幀到下一幀大體保持同樣的亮度,然後逐塊地問:這份亮度跑到哪裡去了?把這些小塊對上號,就得到了那些箭頭。當運動又小又平滑時,它運作得極好;而面對一堵空白的牆(沒有紋理可供追蹤),或當物體在兩幀之間動得太快時,它就會吃力。

對機器人來說,這一片流動的箭頭之場,是一條豐富又廉價的運動線索,只用一台普通相機就能得到。如果整片場都從一個中心點向外湧流,機器人就是在往前走(越靠邊緣,一切掠過得越快,就像透過汽車擋風玻璃看出去的景象);而當機器人在世界裡移動時,近處的物體產生大箭頭,遠處的背景幾乎不動,這就暗示了距離——不過這條深度線索只在相機平移行進時才成立,相機若只是原地轉動就不行,因為單純的旋轉會讓遠近一同移動。一小塊逆著大勢移動的箭頭,則標出了某個正在自行運動的東西。機器人用光流來穩穩懸停、躲開迎面而來的障礙、估計自己的速度——很像一隻蜜蜂憑著世界從眼前掠過的樣子來判斷自己的飛行。

一架小型室內無人機帶著一台朝下的相機,讀取腳下地板滑過的光流:當地板的紋路不再漂移時,無人機就知道自己已經停止移動,正穩穩地懸停在原地。

地板掠過給出速度;地板靜止意味著穩定懸停。

光流告訴你像素動了,卻不告訴你是相機還是物體造成的——這種歧義必須藉助其他線索來消解。

又稱
motion fieldapparent motion field光流场光流場