计算机视觉 12 Optical Flow
Optical Flow
- 光流是图像中亮度模式的变化,也就是颜色的变化,由相机运动、物体运动或照明变化引起
Optical Flow vs. Motion Field
- 光流并非正相关与运动场,可能出现有光流但是物体静止,也可能出现物体运动但是没有光流
- 光流和运动场不一致可能导致视觉错觉
Optical Flow vs. Scene Flow
场景流 (Scene flow) 是世界中点的三维运动场
输入:由多个摄像机捕获的动态场景的多个图像
输出:每个点在时间上每个时刻的 3D 形状和完整 3D 运动
光流的应用
Reconstruct Motion from Images
运动是感知的途径,可以帮助理解图像
光学鼠标
对视频进行插帧、编辑
识别微表情,放大运动
声音相机:声音引起物体的轻微振动,根据振动来复原声音
3D重建场景中的运动,找correspondence
Optical Flow Problem
input
- 输入是多张照片或者视频 I(x,y,c,t)其中c是通道数,x,y,t用于参数化视频
Problem Definition
光流:估计从图像 I(x,y,t)到图像 I(x,y,t+1)的像素运动
可以看作是一个correspondence问题:给定时间 t 的像素,找到附近时间 t+1 处相同颜色的像素
关键假设:
- 对应点颜色不突变
- 运动小
- 邻域一致性:相邻点的运动相似
明暗一致可以得到:𝐼 (𝑥, 𝑦,𝑡) = 𝐼(𝑥 + 𝑢, 𝑦 + 𝑣,𝑡 + 1)
位移(u, v)在一个时间单位内,因此也可以看作是速度
Brute force match:逐个像素做循环,逐个位置找误差,argmax误差得到u,v。代价太高
Optical Flow Equation
使用 Taylor 展开线性化明暗一致公式的右侧可得:𝐼 (𝑥 + 𝑢, 𝑦 + 𝑣,𝑡 + 1) ≈ 𝐼 (𝑥,𝑦,𝑡) + 𝐼𝑥𝑢 + 𝐼𝑦𝑣+ 𝐼𝑡 = 𝐼 (𝑥,𝑦,𝑡)
光流公式:𝐼𝑥𝑢 + 𝐼𝑦𝑣 + 𝐼𝑡 = 𝐼𝑡 + ∇𝐼 ⋅ [𝑢, 𝑣] = 0
对于点 (x,y) ,其光流 (u,v) 位于线上:Ixu + Iyv + It = 0
可以将光流进行正交分解:u = un + up,其中un与其他无关是固定的,up是不确定的有歧义
un可求:
- 但是,我们无法确定 up,平行于约束线的光流分量。假设(u,v)满足约束条件:∇I ∙ (u,v) + It = 0,即邻域一致性,则∇I ∙ (u + u′,v + v′) + It = 0 对于任何 u′,v′ s.t. ∇I ∙ (u′,v′) = 0
Solving Optical Flow – Lucas Kanade
光流公式:𝐼𝑡 + ∇𝐼 ⋅ [𝑢, 𝑣] = 0。2 个未知数(u,v),每个像素 1 个方程,约束不足
邻域一致性:像素的邻居一起移动/具有相同的(u,v),5x5 窗口提供 25 个新方程
- 可以通过最小二乘法求解,每个像素都可以用该方法计算u,v
Low Texture Region
- lamada1,2都很小,u,v估计不准确
Edges
- lamada1,2其一很小,u,v估计不准确
High texture region
- 只有lamada1,2都很大的时候,纹理比较丰富,u,v的估计才准确
Failure Cases in Lucas-Kanade Optical Flow
- 运动太大,远大于一个像素
Fixing the Large Motion
在低分辨率图像中,大运动变成小运动。因此可以降采样使得运动变小,从而使得光流的估计变得更加精准
多分辨率估计、迭代细化
Coarse-to-Fine Optical Flow Estimation
Horn-Schunck Optical Flow
是一种优化算法
可以添加平滑度约束,而不是假设窗口中的光流相同
FlowNet: Learning-based Optical Flow Estimation
- 光流数据集:该网络在合成数据集上进行训练,同一个物体在不同背景下生成