自动驾驶-使用支持向量机对车辆检测追踪

本文介绍了自动驾驶中使用支持向量机进行车辆检测和追踪的方法,包括特征提取(颜色和形状),使用支持向量机训练模型,滑动窗口分类,以及热图定位和追踪车辆的技术细节。
摘要由CSDN通过智能技术生成

当汽车行驶在马路上时,司机无时无刻不在关注周围动态,定位和跟踪周围的其他车辆和行人,估算自己和其他车辆的相对位置,确保自己和其他车辆和行人保持安全距离。 无人驾驶车辆通过摄像头和雷达传感器感知周围车辆和行人。本章介绍用摄像头识别和追踪道路上的其他车辆的方法,是对udacity自动驾驶课程车辆检测项目的总结。

本章介绍的使用摄像头识别和追踪车辆的方法分为以下几步:

  1. 特征提取;
  2. 使用支持向量机训练模型
  3. 使用滑动窗口分类局部图像
  4. 采用热图方法定位和追踪车辆

1. 特征提取

1.1 颜色特征提取

无论采取哪种机器学习模型,首先要确定的是训练目标所具有的特征,比如我们通过人眼要想在道路上判断一个物体是不是车辆,需要的特征是通过其颜色和形状来判断是不是和我们对车辆认知经验相符。摄像头也采用颜色和形状特征来识别车辆。

颜色特征包括色彩空间特征和色彩分布特征。色彩空间特征就是直接将图片转换为需要的色彩空间格式,例如RGB, HSV,YUV等,然后将三维的像素矩阵转换为一维的向量,每个像素代表一个特征;色彩分布特征是将每个颜色通道分为n个区间,统计像素值在每个区间内的总数,将每个颜色通道的统计值组成一个向量就是色彩分布特征。
下图为将一个RGB格式的图片每个颜色通道分为32个区间,每一区间的统计值,代码中的返回值hist_features就是色彩分布特征。

def color_hist(img, nbins=32, bins_range=(1, 256)):
    # Compute the histogram of the RGB channels separately
    rhist = np.histogram(img[:,:,1], bins=nbins, range=bins_range)
    ghist = np.histogram(img[:,:,2], bins=nbins, range=bins_range)
    bhist = np.histogram(img[:,:,3], bins=nbins, range=bins_range)
    # Generating bin centers
    bin_edges = rhist[1]
    bin_centers = (bin_edges[1:]  + bin_edges[0:len(bin_edges)-1])/2
    # Concatenate the histograms into a single feature vector
    hist_features = np.concatenate((rhist[0], ghist[0], bhist[0]))
    # Return the individual histograms, bin_centers and feature vector
    return rhist, ghist, bhist, bin_centers, hist_features

在这里插入图片描述

1.2 形状特征提取

对形状特征的提取是通过统计方向梯度直方图得到的,为了得到车辆的形状我们对图像的每个像素求梯度,但我们并不直接使用每个像素的梯度值组成特征而是将图像以较小的分辨力切割,例如将一个64x64像素的图像切割为若干8x8的方块称为一个cell,方向分为n等份,统计8x8方块内的64个梯度在n个方向中的分布,注意: 统计分布时并不是采用一点一票的方式计算某一方向包含的梯度个数,还要考虑每个梯度的幅度。
在这里插入图片描述
skimage 库有内建函数hog(),可以查看文档了解该函数的参数意义。下面为使用hog()函数抽取方向特征的源码

def get_hog_features(img, orient, pix_per_cell, cell_per_block, 
                        vis=False, feature_vec=True):
    # Call with two outputs if vis==True
    if vis == True:
        features, hog_image = hog(img, orientations=orient, 
                                  pixels_per_cell=(pix_per_cell, pix_per_cell),
                                  cells_per_block=(cell_per_block, cell_per_block), 
                                  transform_sqrt=True, 
                                  visualise=vis, feature_vector=feature_vec)
        return features, hog_image
    # Otherwise call with one output
    else:      
        features = hog(img, orientations=orient, 
                       pixels_per_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值