【光流】——数据格式解析,flowwarp可视化

光流

1. 数据格式

光流数据不好标注,至少还没有看到有关光流标注的方法。一般的,光流表示相邻两帧图像中,同一个像素点的移动,前向光流是t -> t+1 的,所以对光流进行可视化时,物体的轮廓和t时刻是一致的。后向光流一般定义的是:t - > t-1。

开源的光流数据有很多格式,不过一般都会提供数据解析的例子,按例子进行读取解析就行。光流的数据为:HxWx2,H,W分别表示图像的高度和宽度,2表示在x,y方向上的移动像素数。同时,这里的移动是以当前点为基点移动的。

这里对sintel数据集中一张图片进行可视化。
第一张图是0.5 x img1 + 0.5 x img2。
第二张图是光流可视化效果。
【光流】——数据格式解析,flowwarp可视化_第1张图片

2. flow warp

拿到一个开源的光流数据集如何检查数据的正确性呢?如何将光流和图片一起联合起来进行直观的可视化?

flow warp就是根据光流对图片进行采样。这里我们采用cv2.remap进行实现。

code:
【光流】——数据格式解析,flowwarp可视化_第2张图片

步骤:

  • 根据h, w 生成基准点矩阵,注意grid 是一个 HxWx2的矩阵,最后一个维度2,表示[x, y]方向的位移。以下是对grid部分值的打印。
    【光流】——数据格式解析,flowwarp可视化_第3张图片
  • grid + flow,得到warp需要的光流。
  • 最后用opencv的remap进行采样,得到warp后的图像。
  • 这里warp的图像是img1,还是img2呢? 应该用img2来warp,因为new_flow是在img2中像素点的位置。所以整个warp是从img2根据前向光流warp到img1的过程。

可视化:
第一张图是img1
第二张图是img2 warp得到的 img1
【光流】——数据格式解析,flowwarp可视化_第4张图片

为什么warp得到的img1有重影呢?
因为:new_flow = grid + flow,grid是基点矩阵,flow为 [0, 0]时,remap时,就会采集原来的点。flow不为0时,会根据 new_flow 进行采样。

你可能感兴趣的:(光流,深度学习,光流)