在对视频进行光流 (lk) 之后,根据这些数据找到对象并跟踪它们的最佳方法是什么?
这可能听起来很无聊,但我希望能够在物体周围定义一个清晰的轮廓,所以如果它是一个形状怪异的瓶子或能够检测边缘的东西。
在对视频进行光流 (lk) 之后,根据这些数据找到对象并跟踪它们的最佳方法是什么?
这可能听起来很无聊,但我希望能够在物体周围定义一个清晰的轮廓,所以如果它是一个形状怪异的瓶子或能够检测边缘的东西。
我不确定 LK 是不是最好的算法,因为它计算一组稀疏的角状点的运动,并且跟踪通常从密集的光流结果(例如 Farneback 或 Horn Schunck)中表现得更好。在计算流程之后,作为第一步,您可以对其范数进行一些阈值处理(以保留移动部分),并尝试从该结果中提取连接区域。但请注意,如果您没有要跟踪的对象的模型,您的任务将不会轻松。
另一方面,如果您主要对跟踪感兴趣并且可以接受一点交互性,则可以查看 camshift 示例代码,了解如何根据其外观选择和跟踪图像区域。
- - 编辑 - -
如果您的相机是静态的,请改用背景减法。使用 OpenCV 2.4 beta,您必须在视频模块文档中查找类 BackgroundSubtractor 及其子类。
另请注意,光流可以是实时的(或不是很远),具有良好的参数选择,也可以使用 GPU 实现。在 Windows 上,您可以使用来自TU Graz/Gpu4Vision 组的 flowlib 。OpenCV 也有一些 GPU 密集的光流,例如 gpu::BroxOpticalFlow 类。
--- 编辑 2 ---
将单像素检测加入大对象是一项称为连接组件标记的任务。有一个快速算法,在 OpenCV 中实现。所以这给了你一个管道,它是:
但是我们将不得不停在这里,因为我们很快就会远远超出您最初问题的范围;-)
您可以使用 TLD 或 CLM 进行对象跟踪(它松散地基于光流跟踪和模型学习同时进行的思想)。您可以找到以下有用的链接 https://www.gnebehay.com/tld/ https://www.gnebehay.com/cmt/