您正在寻找的是“光流”。搜索这些术语将会产生大量结果。
在 OpenCV 中,有一个名为 calcOpticalFlowFarneback() 的函数(在视频模块中)可以完成您想要的操作。
C API 仍然有 Horn & Schunck (1981) 的经典论文“确定光流”的实现。
你也可以看看我所做的这项工作,以及一些代码(但要小心,opencl 内存代码中仍然存在一些神秘的错误。我将在今年晚些时候发布一个更正的版本。):http://lts2www.epfl.ch/people/dangelo/opticalflow 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。
在密集族中,由于每个像素的运动几乎是自由的,因此它可以处理尺度变化。但请记住,这些算法在大运动/尺度变化的情况下可能会失败,因为它们通常依赖于线性化(运动和图像变化的泰勒展开)。此外,在变分方法中,每个像素都对整体结果有贡献。因此,一张图像中不可见的部分可能会使算法偏离实际解决方案。
无论如何,采用诸如从粗到精的实现等技术来绕过这些限制,并且这些问题通常只会产生很小的影响。残酷的光照变化或大的遮挡/未遮挡区域也可以通过某些算法明确处理,例如这张纸 http://dl.acm.org/citation.cfm?id=1969036沿着光流场计算“创新”的稀疏图像。