您正在寻找的是“光流”。搜索这些术语将为您带来大量结果。
在 OpenCV 中,有一个名为 calcOpticalFlowFarneback() 的函数(在视频模块中)可以满足您的需求。C API 仍然有一个由 Horn & Schunck (1981) 称为“确定光流”的经典论文的实现。
你也可以看看我做的这个工作,以及一些代码(但要小心,opencl内存代码中仍然存在一些神秘的错误。我将在今年晚些时候发布一个更正的版本。):http:/ /lts2www.epfl.ch/people/dangelo/opticalflow
除了 OpenCV 的光流(和我的 ;-)之外,您还可以在 itk.org 上查看 ITK,了解完整的图像配准链(主要针对医学成像)。
还有很多光流代码(matlab、C/C++...)可以通过google找到,例如cs.brown.edu/~dqsun/research/software.html、gpu4vision等
-- 编辑:关于光流 --
光流分为两类算法:密集算法和其他算法。密集算法为每个像素提供一个运动向量,非密集算法为每个跟踪特征提供一个向量。
稠密家族的例子包括 Horn-Schunck 和 Farneback(与 opencv 保持一致),以及更普遍地任何可以最小化整个图像上的某些成本函数的算法(各种 TV-L1 流等)。
非密集家族的一个例子是 KLT,在 opencv 中称为 Lucas-Kanade。
在密集族中,由于每个像素的运动几乎是自由的,它可以处理尺度变化。但是请记住,这些算法在大运动/尺度变化的情况下可能会失败,因为它们通常依赖于线性化(运动和图像变化的泰勒展开)。此外,在变分方法中,每个像素都对整体结果有贡献。因此,一张图像中不可见的部分可能会使算法偏离实际解决方案。
无论如何,使用诸如从粗到细的实现之类的技术来绕过这些限制,而这些问题通常只有很小的影响。一些算法也可以明确处理残酷的光照变化或大的遮挡/未遮挡区域,例如,参见本文,该论文计算了光流场旁边的“创新”稀疏图像。