Homography 和 Lucas Kanade 有什么区别?

Homography and Lucas Kanade what is the difference?

我正在使用光流来跟踪一些特征我是初学者并且被要求遵循这些步骤

  1. 匹配好特征进行跟踪
  2. 对它们进行 Lucas-Kanade 算法
  3. 查找第 1 帧和当前帧之间的单应性
  4. 进行相机校准
  5. 分解单应图

现在我不明白的是单应性部分,因为您使用 Lucas-Kanade 找到特征并跟踪它们,现在单应性用于计算相机运动(旋转和平移 - 在两个图像之间)。但这不是 Lucas-Kanade 所做的吗?或者 Lucas-Kanade 只是跟踪它们并且单应性进行计算?我正在努力理解它们之间的区别,在此先感谢。

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

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

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

无论您是密集流还是稀疏流,光流方法都可以尝试估计不同类型的变换。最常见的变换是平移。这只是位置从帧到帧的偏移量。这可以可视化为每帧的向量,或者当流密集且分辨率高时显示为颜色。

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

仿射变换最经济地由 2x3 矩阵给出:与常规的 2 个自由度相比,6 个自由度 d.o.f。常规平移光流。

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

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

所有这些都只是触及表面...