估计OpenCV中密集光流的刚度变换

时间:2017-03-23 11:45:08

标签: opencv opticalflow

我正在尝试实施Wand和Adelson(1993)在论文Layered Representation for Motion Analysis中描述的算法,该论文的摘要可以在任何关于计算机视觉的讲座中找到,this one来自于北卡罗来纳大学教堂山分校的CS部门,从幻灯片53开始:

  • 以粗到精的方式计算本地流量
  • 获取一组初始仿射运动假设
    • 将图像划分为块,并通过最小二乘法估计每个块中的仿射运动参数
      • 消除具有高残差的假设
    • 对仿射运动参数执行k均值聚类
      • 合并靠近的群集并保留最大的群集,以获得较小的假设集来描述场景中的所有动作
  • 迭代直到收敛:
    • 将每个像素分配到最佳假设
      • 具有高残留误差的像素仍然未分配
    • 执行区域过滤以强制执行空间约束
    • 重新估算每个地区的仿射动作

由于我使用OpenCV来实现算法,因此只使用内置函数才有意义。最有意义的功能是estimateRigidTransform,来自文档:

  

计算两个2D点集之间的最佳仿射变换。

,输出看起来像这样:

estimateRigidTransformOutput

幻灯片中的仿射模型说明如下:

Affine Model

该模型当然与论文中的描述(以及其他任何地方)一致。

  1. 如果我想尝试将函数的输出映射到给定模型,唯一的解释是a_1和a_4映射到b_1和b_2。 这种直觉是否正确?并且从这一点开始是否有意义a_3 = -a_5?

  2. 知道calcOpticalFlowFarneback的输出是关系之后的流矩阵:

    flowRelationship

    应该使用什么输入形式来从estimateRigidTransform函数中获取正确的结果?如何在估算后计算残差?

  3. 最后,我是否考虑了计算仿射变换的错误函数?

0 个答案:

没有答案