首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >夜间车辆检测感兴趣的区域

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

Stack Overflow用户
提问于 2014-04-08 04:44:33
回答 2查看 1.9K关注 0票数 2

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

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

如果有人知道,请给我一些建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-12 05:07:57

我会把问题转过来,说我们是在寻找某一条线以上的大灯,而不是说大灯在某条线以下,即地平线以下,

你的图像在停机坪上有很高的反射率,我们可以利用这一点。我们知道图像中的最大光量在反射光和前照灯周围的某个地方。因此,我们寻找最亮的那一排,并以此作为我们的地板。那就在这层上面找前灯。

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

这将只适用于黑暗的图像(即夜间),而且车头灯在停机坪上的反射很大。

它不能与白天拍摄的图像一起工作。

我用写了这篇文章,但是我相信你可以把它翻译成你所选择的语言。

代码语言:javascript
复制
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)

平滑图像严重遮掩任何地方的高峰或山谷,我们正在试图平滑的前灯和反射,以便有一个美好的高峰。理想情况下,前照灯和反射光会合并成一个区域。

代码语言:javascript
复制
grey_image = cv2.blur(grey_image, (15,15))

强度逐行之和

代码语言:javascript
复制
intensity_profile = []
for r in range(0, grey_image.shape[0]):
    intensity_profile.append(pl.sum(grey_image[r,:]))

平滑配置文件并将其转换为numpy数组,以便于处理数据。

代码语言:javascript
复制
window = 10
weights = pl.repeat(1.0, window)/window
profile = pl.convolve(pl.asarray(intensity_profile), weights, 'same')

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

我们可以清楚地看到,强度之和的peak.The y坐标是371,用热图中的一个红色点和图中的一条红色虚线表示。

代码语言:javascript
复制
max_value = profile.max()
max_value_location = pl.where(profile==max_value)[0]
horizon =  max_value_location

最右边的蓝色曲线表示变量profile

我们找到最大值的那一行是我们的地板。然后我们知道车头灯在那条线上。我们也知道图像的上部大部分是天空,因此是黑暗的。

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

票数 3
EN

Stack Overflow用户

发布于 2014-04-10 02:14:12

您可以尝试对图像进行下采样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22927731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档