夜间车辆检测中的感兴趣区域

时间:2014-04-08 04:44:33

标签: matlab image-processing computer-vision roi

我正在开发一个在夜景中检测车辆头灯的项目。我正在研究MATLAB的演示。我的问题是我需要找到感兴趣的区域(ROI)以获得低计算要求。我在很多论文中都进行过研究,他们只使用像这样的固定投资回报率,上部被忽略,底部用于后期分析。

enter image description here

但是,如果相机不稳定,我觉得这种方法不合适。我想找到一个更灵活的,在每一帧中交替。我的实验图像显示在这里:

enter image description here enter image description here

如果有人有任何想法,请给我一些建议。

2 个答案:

答案 0 :(得分:2)

我会解决问题并说我们正在寻找头灯 超过一定线而不是说前灯低于某一线,即地平线,

您的图像对停机坪有很高的反射,我们可以利用它来发挥作用。我们知道图像中的最大光量是在反射和前灯周围。因此,我们寻找具有最大光线的行并将其用作我们的地板。然后在这个楼层上方寻找头灯。

这里的想法是我们逐行查看强度的轮廓并找到具有最大值的行。

这只适用于黑暗图像(即夜晚)以及前照灯在停机坪上的反射很大。

它不适用于白天拍摄的图像。

我用Python和OpenCV编写过这个,但我相信你可以把它翻译成你选择的语言。

import matplotlib.pylab as pl
import cv2

# Load the image
im = cv2.imread('headlights_at_night2.jpg')

# Convert to grey.
grey_image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

grey_image

严重平滑图像以遮挡任何局部峰或谷 我们正试图平滑前灯和反射,以便有一个很好的高峰。理想情况下,前灯和反射会合并到一个区域

grey_image = cv2.blur(grey_image, (15,15))

grey_blurred

逐行求出强度

intensity_profile = []
for r in range(0, grey_image.shape[0]):
    intensity_profile.append(pl.sum(grey_image[r,:]))

平滑轮廓并将其转换为numpy数组,以便于处理数据

window = 10
weights = pl.repeat(1.0, window)/window
profile = pl.convolve(pl.asarray(intensity_profile), weights, 'same')

查找配置文件的最大值。这表示前灯的y坐标和反射区域。左侧的热图显示了分布情况。右图显示了每行的总强度值。

我们可以清楚地看到强度的总和具有峰值.y坐标是371并且由热图中的红点和图中的红色虚线表示。

max_value = profile.max()
max_value_location = pl.where(profile==max_value)[0]
horizon =  max_value_location

最右边的图中的蓝色曲线代表变量profile

我们找到最大值的行是我们的楼层。然后我们知道前灯高于那条线。我们也知道图像的大部分上部将是天空的,因此是黑暗的。

我在下面显示结果。 我知道两幅图像中的线几乎都在相同的坐标上,但我认为这只是一个巧合。

final1 final2

答案 1 :(得分:0)

您可以尝试下采样图像。