Homography和Lucas Kanade有什么区别?

时间:2017-02-20 16:46:29

标签: python-2.7 computer-vision homography opticalflow

我正在使用光流跟踪某些功能我是一个初学者,并且无法遵循这些步骤

  1. 匹配好的功能以跟踪
  2. 对他们进行Lucas-Kanade算法
  3. 查找第1帧和当前帧之间的单应性
  4. 进行相机校准
  5. 分解单应性地图
  6. 现在我不理解的是单应性部分,因为你找到了这些特征并使用Lucas-Kanade跟踪它们,现在单应性用于计算相机运动(两个图像之间的旋转和平移)。但这不是Lucas-Kanade的作用吗?或卢卡斯 - 卡纳德只是跟踪他们和单应性进行计算?我很难理解它们之间的区别,提前谢谢。

2 个答案:

答案 0 :(得分:2)

Lucas-Kanade是一种计算光流的算法,即从一个图像到下一个图像的像素的明显运动。该运动定义了帧对之间的像素对应(“匹配”) - 它表示图像t中的像素(x,y)对应于像素t'中的像素(x',y')。使用这些对应关系(至少4个),您可以估计图像之间的几何变换,特别是单应性。

建议您运行并阅读opencv代码附带的examples

答案 1 :(得分:1)

光学流:检测从一帧到下一帧的运动。这要么是稀疏的(很少跟踪感兴趣的位置,例如在LKDemo.cpp示例中),要么是密集的(每个位置的多个位置(例如,所有像素)一个运动,例如openCV中的Farneback演示)。

不管您是密集流还是稀疏流,光流方法都可能尝试估算不同类型的变换。最常见的转换是翻译。这只是位置与帧之间的偏移。当流量密集且具有高分辨率时,可以将其显示为每帧的向量,也可以将其显示为颜色。

一个不仅限于估计每个位置的翻译。您还可以估算旋转度(例如,一个点如何从一帧到另一帧旋转)或如何倾斜。在仿射光流中,您可以估计每个位置的完整仿射变换(更改平移,旋转,偏斜和比例)。仿射流是一种经典而强大的技术,它被人们误解了很多,而且可能远远少于应有的使用。

仿射变换最经济的方式是使用2x3矩阵:自由度为6,而常规的2 d.f.f平移光流的变化。

离开光流的话题,一个更通用的变换族称为“ Homographies” “投射变换” 。它们需要3x3变换,并且具有8d.o.f。当您以射影变形查看平面时,仿射族不足以描述平面所经历的变形。

通常,根据帧之间的许多匹配点来估计单应性。从这个意义上讲,它使用规则的平移光流的输出(但是通常在引擎盖下使用仿射方法来改善结果)。

所有这些都只是划伤表面...