光流(optical flow)基础概念以及典型算法

光流(optical flow)基础概念以及典型算法


文章目录

  • 光流(optical flow)基础概念以及典型算法
    • 什么是光流?
    • 一、传统经典光流算法: Lucas-Kanade
    • 二、基于神经网络的光流算法:FlowNet&FlowNet2.0
      • 1.FlowNet
      • 2.FlowNet2.0
    • 总结


什么是光流?

  • 光流是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。参考博客
  • 光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。 由光流的定义可以引申出光流场,它是指图像中所有像素点构成的一种二维(2D)瞬时速度场,其中的二维速度矢量是景物中可见点的三维速度矢量在成像表面的投影。所以光流不仅包含了被观察物体的运动信息,而且还包含有关景物三维结构的丰富信息。百度百科
  • 光流目前应用于诸多的领域,包括:基于运动的三维重建、视频压缩、目标跟踪以及行为识别等。

一、传统经典光流算法: Lucas-Kanade

基本假设:
(1)亮度不变假设:即待估计的光流在两帧图像中的同一物体的亮度不变
(2)邻域光流相似假设:以像素点(x,y)为中心,设定n*n的邻域内所有像素点的光流值是一致的。(n不会很大)

  • 对于假设(1),我们可以得到:
    I ( x , y , t ) = I ( x + u , y + v , t + Δ t ) I(x,y,t)=I(x+u,y+v,t+ \Delta _t) I(x,y,t)=I(x+u,y+v,t+Δt)
    对等式右边进行泰勒展开,即的:
    I ( x + u , y + v , t + Δ t ) = I ( x , y , t ) + I x ′ u + I y ′ v + I t ′ Δ t I(x+u,y+v,t+\Delta _t)=I(x,y,t)+I'_xu+I'_yv+I'_t\Delta_t I(x+u,y+v,t+Δt)=I(x,y,t)+Ixu+Iyv+ItΔt
    也就是说 I ( x , y , t ) + I x ′ u + I y ′ v + I t ′ Δ t = I ( x , y , t ) I(x,y,t)+I'_xu+I'_yv+I'_t\Delta_t=I(x,y,t) I(x,y,t)+Ixu+Iyv+ItΔt=I(x,y,t)
    所以: I x ′ u + I y ′ v + I t ′ Δ t = 0 I'_xu+I'_yv+I'_t\Delta_t=0 Ixu+Iyv+ItΔt=0,即 [ I x ′ , I y ′ ] [ u , v ] T = − Δ I t [I'_x,I'_y][u,v]^T=-\Delta I_t [Ix,Iy][u,v]T=ΔIt

式中, I x ′ , I y ′ I'_x,I'_y Ix,Iy分别表示在像素点 ( x , y ) (x,y) (x,y)处,图像的亮度在 x , y x,y x,y方向的偏导数,亦即图像亮度的梯度。 I t ′ I'_t It是图像亮度对时间的偏导数,而 I t ′ Δ t I'_t \Delta_t ItΔt表示的是两张图片(一般是相邻帧)之间 ( x , y ) (x,y) (x,y)坐标位置像素点亮度的变化量,可以表示为 Δ I t = I t ′ Δ t \Delta I_t = I'_t\Delta _t ΔIt=ItΔt u , v u,v u,v即为待估计的光流值。
I x ′ , I y ′ , Δ I t I'_x,I'_y,\Delta I_t Ix,Iy,ΔIt均可以通过对图像进行直接计算得到。而 u , v u,v u,v的求取仅有一个方程无法完成求解。

  • 对于假设(2), 在取定邻域内的所有像素值均满足等式 I x ′ u + I y ′ v + I t ′ Δ t = 0 I'_xu+I'_yv+I'_t\Delta_t=0 Ixu+Iyv+ItΔt=0,由此我们可以将矩阵进行扩充得到:
    [ I x ′ ( 1 ) I y ′ ( 1 ) I x ′ ( 2 ) I y ′ ( 2 ) . . . . . . I x ′ ( n ) I y ′ ( n ) ] [ u , v ] T = [ − Δ I t ( 1 ) − Δ I t ( 2 ) . . . − Δ I t ( n ) ] \left [ \begin{array}{l} I^{'(1)}_x & I^{'(1)}_y \\ I^{'(2)}_x & I^{'(2)}_y \\ ...&...\\ I^{'(n)}_x & I^{'(n)}_y \\ \end{array} \right] [u,v]^T= \left[ \begin{array}{l} -\Delta I^{(1)}_t \\ -\Delta I^{(2)}_t \\ ...\\ -\Delta I^{(n)}_t \\ \end{array} \right] Ix(1)Ix(2)...Ix(n)Iy(1)Iy(2)...Iy(n) [u,v]T= ΔIt(1)ΔIt(2)...ΔIt(n)

即: A x = b Ax=b Ax=b。对于这组等式,可以使用最小二乘法 ( x = ( A T A ) − 1 A T b ) (x=(A^TA)^{-1}A^Tb) (x=(ATA)1ATb)近似估计的得到 [ u , v ] [u,v] [u,v]的解。但需要注意的是 ( A T A ) (A^TA) (ATA)需要时可逆的。

  • Lucas-Kanade算法还借助了图像金字塔(Pyramid)的方式,在高层低分辨率图像上,大的偏移将变为小的偏移。最终,Lucas-Kanade方法给出了一种求解稀疏(明显特征的角点)光流的方法。图像金字塔是图像多尺度调整表达的一种重要的方式,图像金字塔方法的原理是:将参加融合的的每幅图像分解为多尺度的金字塔图像序列,将低分辨率的图像在上层,高分辨率的图像在下层,上层图像的大小为前一层图像大小的1/4。层数为0,1,2……N。将所有图像的金字塔在相应层上以一定的规则融合,就可得到合成金字塔,再将该合成金字塔按照金字塔生成的逆过程进行重构,得到融合金字塔。
  • 当然,Horn-Schunck光流法也是一种很好的算法。该算法主要基于全局平滑性假设(即假设计算得到的光流场是连续变化的),通过最优化能量方程进行光流求解。该算法可以得到图像的稠密光流信息,但是计算量大、抗干扰性能弱,适用于干扰较小且实时性不高的应用场景。

二、基于神经网络的光流算法:FlowNet&FlowNet2.0

1.FlowNet

论文地址:https://arxiv.org/abs/1504.06852v2

  • 基本思路:采用神经网络 E n d − t o − E n d End-to-End EndtoEnd的优点,输入相邻帧的两张图片,通过一个卷积层组成的收缩部分提取各自的特征进行降维(收缩部分,encoder);然后再经过一个通过反卷积部分进行升维(放大部分,decoder)。
    光流(optical flow)基础概念以及典型算法_第1张图片

  • 收缩部分网络结构:

  • (1)方案一FlowNetSimple:直接将输入的两张图片合并在一起组合成一个 h × w × 6 h\times w\times 6 h×w×6作为卷积层的输入。
    光流(optical flow)基础概念以及典型算法_第2张图片

  • (2)方案二FlowNetCoor:将两张输入图片分别进行卷积操作,得到图像特征,然后进行相关计算(一种简单的操作是:对应位置像素相乘求和,得到的值越大,代表越相关,即图像越接近。)合并信息。
    光流(optical flow)基础概念以及典型算法_第3张图片

  • 放大部分:通过反卷积进行升维,各层反卷积运算的输入包括三个部分,第一部分包含层语义信息,第二部分包含低层局部信息,第三部分由前一层卷积的输出的光流上采样得到。

  • 论文中作者使用欧式距离来定义 L o s s Loss Loss,称这种误差为 E P E ( E n d − P o i n t − E r r o r ) EPE(End-Point-Error) EPE(EndPointError)

2.FlowNet2.0

论文地址:https://arxiv.org/abs/1612.01925

  • 主要优化策略:网络的堆叠
    光流(optical flow)基础概念以及典型算法_第4张图片

  • 后续FlowNet的输入不仅仅是两张图片( I m a g e 1 Image1 Image1 I m a g e 2 Image2 Image2),还包括前一个网络输入的光流估计Flow,和一张Warped图,再加一张亮度误差(Brightness Error)。其中Warped图为将估计的光流作用在 I m a g e 2 Image2 Image2上,即为使用估计的每个像素偏移,偏移 I m a g e 2 Image2 Image2的每一个像素,使其与 I m a g e 1 Image1 Image1对齐。虽然作用了光流偏移,由于光流估计的不够准确,Warped图和 I m a g e 1 Image1 Image1依然存在一定的偏差, I m a g e 1 Image1 Image1的亮度减去Warped图的亮度,即可得到亮度误差(BrightnessError)图。


总结

  • Lucas-Kanade对于稀疏光流是一种经典且有效的算法。
  • 而对于稠密光流的估计,传统方法需要在精度和速度上需要进行权衡,而FlowNet2可以取得更好的精度和估计结果。(当时FlowNet2成为了光流估计领域的SOTA)
  • 目前,光流估计当然也靠上了cv界的顶流 T r a n s f o r m e r Transformer Transformer F l o w F o r m e r ( A T r a n s f o r m e r A r c h i t e c t u r e f o r O p t i c a l F l o w ) FlowFormer(A Transformer Architecture for Optical Flow) FlowFormerATransformerArchitectureforOpticalFlow成为了目前的SOTA。
  • 吐槽:CV太卷了

你可能感兴趣的:(计算机视觉)