如何在openCV python中将背景减法与密集光流跟踪相结合

Posted

技术标签:

【中文标题】如何在openCV python中将背景减法与密集光流跟踪相结合【英文标题】:How to combine background subtraction with dense optical flow tracking in openCV python 【发布时间】:2018-02-09 02:01:15 【问题描述】:

我正在使用BackgroundSubtractorGMG 方法和Gunner Farneback 用于密集光流,我希望找到一种将这两种方法结合起来的方法,以提高对运动物体的检测精度。也许只有让光流方法专注于更大的分割图像以减少错误结果/噪声。我尝试将背景减法视频的输出简单地馈送到光流方法,但这不起作用。我读了这个*** link,但我不知道如何使用上述方法。如果这都是基本的,或者存在误解,我深表歉意,因为我对 opencv 和图像处理还很陌生。

【问题讨论】:

【参考方案1】:

使用密集光流方法,背景减去帧将无济于事,但可以使用稀疏光流。

密集光流:

Gunner Farneback 的光流方法通过使用当前帧和先前帧来跟踪帧中的所有像素(坐标)。因此称为稠密光流。

因此,您只需通过用于跟踪的帧即可。因此,如果您通过背景减去帧(黑色和白色)。该算法将不起作用,因为所有像素都将具有相同的强度(0 或 255)。并且不会为算法跟踪提供任何好的特征。

因为算法会追踪帧中的所有像素。跟踪过程也很慢。

稀疏光流:

Lucas Kanade 的光流方法使用当前和以前的帧以及良好的特征来跟踪。这样您就必须传递特定的像素才能让算法进行跟踪。因为它只跟踪指定的像素。它被称为稀疏光流。

要找到这些功能,您可以使用不同的方法。其中一些正在 goodFeaturesToTrack、Harris corners等。您可以通过以下方式使用背景减法找到这些特征。

第 1 步: 使用 MOG 或 GMG 进行背景减法

第 2 步:使用减去背景的帧查找轮廓。

第 3 步: 将您刚刚找到的轮廓点或找到的轮廓的中心像素或轮廓内的所有点(以有利者为准)传递给 Lucas Kanade 方法(稀疏光流)以及灰度帧,而不是减去背景的帧。

由于背景减帧只能用于寻找特征。

希望这会有所帮助!

【讨论】:

很高兴为您提供帮助:)

以上是关于如何在openCV python中将背景减法与密集光流跟踪相结合的主要内容,如果未能解决你的问题,请参考以下文章

如何使用背景减法在 OpenCV 中实现tripwire

如何使openCV背景减法KNN算法持续更长时间,跟踪一个没有移动的前景对象

使用Python,OpenCV从静态背景中提取移动前景

有没有办法在opencv c ++中将密集光流转换为稀疏光流?

OpenCV的滚球背景减法算法

结合背景减法和光流