通过分析二进制前景图像的白色像素来计算车辆计数所需的想法

Posted

技术标签:

【中文标题】通过分析二进制前景图像的白色像素来计算车辆计数所需的想法【英文标题】:Idea needed about vehicle counting by analysing the white pixels of the binary foreground image 【发布时间】:2012-05-19 01:11:00 【问题描述】:

我对图像处理有点陌生,所以我想问你如何为我的问题找到最佳解决方案,而不是代码帮助。 我想不出一个好主意,所以想征求你的意见。希望你能帮忙。

我正在 OpenCV 下开展一个项目,该项目是关于从视频文件或实时摄像头中计算车辆数量。从事此类项目的其他人通常会跟踪移动的物体,然后对其进行计数,但不是这样,我想用不同的视角工作;要求用户在视频窗口上设置一个 ROI(感兴趣区域)并仅针对该区域工作(出于某些原因,例如不处理整个帧和一些性能提升),如下所示。(顺便说一句,用户可以设置一个以上的 ROI,要求用户通过比例感将 ROI 的高度设置为普通汽车的 2 倍左右)

到目前为止,我已经完成了一些基本的进展,例如背景更新、形态过滤器、阈值化以及将移动对象作为二值图像获取,如下所示。

完成之后,我尝试计算最终阈值前景帧的白色像素,并通过检查总白色像素数来估计它是否是汽车(我通过知道高度通过静态计算设置了下限投资回报率)。为了说明,我画了一个示例图形:

从图中可以看出,很容易计算白色像素并检查它是否按时间绘制曲线并确定是汽车还是噪音之类的东西。

在两辆车同时通过我的投资回报率之前,我非常成功。我的算法通过将它们算作一辆车而崩溃,你可以猜到:/我尝试了不同的方法来解决这个问题,就像长车一样,但我到目前为止还没有得到最佳解决方案。

我的问题是:用这种像素值计数的方法来处理这个任务是不可能的吗?如果可能,您的建议是什么?我希望您以前也遇到过类似的事情并且可以帮助我。

欢迎所有想法,在此先感谢朋友。

【问题讨论】:

高速公路上的汽车检测系统与垂直摄像头配合使用,可以轻松测量每辆车的速度和大小,还可以捕捉拖车等困难的边界情况。 dsp.stackexchange.com 【参考方案1】:

从背景中隔离流量 - 拍摄两张图像,对其中一张运行高通过滤器,将另一张转换为二值图像 - 使用二值图像屏蔽过滤后的图像,您应该能够使用边缘检测来将每辆车的车顶识别为四边形,然后您应该能够计算出它的相对测量值。

然后你有四种情况:

    没有四边形 - 没有汽车 大型四边形 - 卡车 多个小四边形 - 几辆车 单四边形 - 一辆车

【讨论】:

时间不早了,我会在周末为你发布一些链接 - 我认为边缘检测是要走的路 谢谢,这是一个好点,如果可以,我会尝试。 (好的,再次感谢,我会提醒你的:)) 喂,你承诺的点赞还没发,我告诉你我会提醒你的:)【参考方案2】:

回答您的问题“是否可以使用像素计数来做到这一点?” 简短的回答是“不”,因为您引用的原因是:仅对静态图像进行像素计数是不够的。

如果您仅限于像素计数,您可以尝试查看像素计数速度(成功帧之间的像素计数变化),然后您可能挑选出不同的“速度” " 1 辆汽车、2 辆汽车或卡车经过时的形状。

但只是简单的像素计数?不,您还需要形状(几何)信息。

如果您应用任何类型的阈值算法(例如用于背景减法),请不要忘记在光照水平发生变化时更新背景(例如白天和黑夜)。当部分多云且清晰的云影在您的图像上移动时,还要考虑悲伤。

【讨论】:

以上是关于通过分析二进制前景图像的白色像素来计算车辆计数所需的想法的主要内容,如果未能解决你的问题,请参考以下文章

二进制图像上的快速像素计数 - ARM neon 内在函数 - iOS 开发

联合查找2d数组(Java)

图像细化函数(背景为黑色像素值为0,前景为白色像素值255,必须只含有0和255的像素值,即二值化后的图像)

检测白色像素密度低的区域

使用 OpenCV 获取二进制图像中白色像素数量的最快方法

连通区域