我正在开发一个在夜间探测车辆前灯的项目。我正在MATLAB上做一个演示。我的问题是,我需要找到感兴趣的区域(ROI)来获得低的计算需求。我在很多论文中都做过研究,他们只是使用这样一个固定的ROI,上面的部分被忽略了,下面的部分后来被用来分析。

但是,如果相机不稳定,我认为这种方法是不合适的。我想找一个更灵活的,在每一帧交替。我的实验图像如下所示:


如果有人知道,请给我一些建议。
发布于 2014-04-12 05:07:57
我会把问题转过来,说我们是在寻找某一条线以上的大灯,而不是说大灯在某条线以下,即地平线以下,
你的图像在停机坪上有很高的反射率,我们可以利用这一点。我们知道图像中的最大光量在反射光和前照灯周围的某个地方。因此,我们寻找最亮的那一排,并以此作为我们的地板。那就在这层上面找前灯。
这里的想法是,我们在逐行的基础上查看强度的轮廓,并找到具有最大值的行。
这将只适用于黑暗的图像(即夜间),而且车头灯在停机坪上的反射很大。
它不能与白天拍摄的图像一起工作。
我用写了这篇文章,但是我相信你可以把它翻译成你所选择的语言。
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 = cv2.blur(grey_image, (15,15))

强度逐行之和
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坐标。左边的热图显示了分布情况。右边的图表显示每一行的总强度值。
我们可以清楚地看到,强度之和的peak.The y坐标是371,用热图中的一个红色点和图中的一条红色虚线表示。
max_value = profile.max()
max_value_location = pl.where(profile==max_value)[0]
horizon = max_value_location

最右边的蓝色曲线表示变量profile。
我们找到最大值的那一行是我们的地板。然后我们知道车头灯在那条线上。我们也知道图像的上部大部分是天空,因此是黑暗的。
我在下面显示结果。我知道这两幅图像中的线都在几乎相同的坐标上,但我认为这只是一个巧合。


发布于 2014-04-10 02:14:12
您可以尝试对图像进行下采样。
https://stackoverflow.com/questions/22927731
复制相似问题