我正在进行一个名为ATCS(自动交通控制器系统)的项目,它将根据红绿灯前的车辆数量修改红绿灯持续时间。
我使用openCV和backgroundsubactorMOG来检测车辆,它在车辆移动时成功运行,但当红色信号灯打开时,所有车辆都是不可计数的。当然,这会使我的软件无法工作。
到目前为止,我知道背景减法器MOG是最好的解决方案,因为该系统可以在温度、光强等的许多变化中工作。它将比较当前帧和前一帧,以便将运动对象检测为前景(CMIIW)。那么,因为红绿灯亮着,迫使司机停车,所以行驶中的车辆停了下来,情况如何?它还会被检测为前景对象吗?
所以我想问一个最合适的算法来做这件事。当车辆移动时,以及当车辆因为红色信号而停止移动时,如何计算车辆的数量——它仍然检测到车辆。
谢谢:)
如何更新您的背景?由于照明条件(云、白天、晚上、黄昏、天气)的变化,您无法将其保持为统计数据,但是,如果您仍然知道背景的外观,即如果汽车不在,则仍然可以检测到停下来的汽车的存在。若你们在图片中有一个区域并没有汽车通过,你们可以用它来了解照明条件是否在变化。
你对车辆的视角是什么?将Viola Jones探测器与KLT跟踪器相结合,有可能获得更好、更通用的结果。
如果背景减法对您有效(正如您所说),我会尝试添加另一个背景模型。然后,您可以执行两次背景减法,一次用于前一个图像(适用于所有移动对象),另一次用于long term background model
,它将检测所有停止的车辆(以及移动的车辆),但对于不同的照明条件可能会有一些缺点。
您可以查看ViBe
或Gaussian-Mixture-Models
来创建这些背景模型。
另一种方法是引入一些跟踪机制,正如Antonio已经提到的那样。一旦通过背景减法检测到车辆(图像中只会出现移动物体),您就会开始跟踪,即使没有再次检测到它们(因为它们不会移动),您也会知道它们在那里。所以你需要一种不是"检测追踪"而是其他方法的追踪方法。我推荐卡尔曼滤波器或粒子滤波,或者均值偏移跟踪。
EDIT:一种常用于车辆检测的方法类似于背景减法技术,即Local Binary Patterns (LBP)
我建议将潜在SVM检测器与"汽车"one_answers"公共汽车"模型一起使用来检测车辆,然后对您获得的边界框应用简单的跟踪。
潜在SVM检测器:http://docs.opencv.org/modules/objdetect/doc/latent_svm.html