《自动驾驶:感知原理与实践》4.1节主要介绍了图像预处理与特征提取的核心技术,这是视觉感知的基础环节。
一、图像预处理
1. 图像去噪
- 高斯滤波:平滑图像,去除高频噪声
- 中值滤波:有效去除椒盐噪声
- 双边滤波:在平滑的同时保留边缘信息
2. 图像增强
- 直方图均衡化:增强图像对比度
- 伽马校正:调整图像亮度
- 对比度拉伸:扩展像素值范围
3. 几何变换
- 图像缩放:双线性插值、双三次插值
- 图像旋转:保持图像内容不变形
- 仿射变换:校正相机畸变
二、特征提取
1. 传统特征提取方法
边缘特征:
- Canny边缘检测:多阶段边缘检测算法
- Sobel算子:计算图像梯度
- Laplacian算子:检测二阶导数
角点特征:
- Harris角点检测:基于图像灰度变化
- FAST角点检测:快速角点检测算法
- Shi-Tomasi角点检测:改进的角点检测
局部特征描述子:
- SIFT(尺度不变特征变换):对尺度、旋转、光照变化具有不变性
- SURF(加速稳健特征):SIFT的加速版本
- ORB(定向FAST和旋转BRIEF):结合FAST角点和BRIEF描述子,速度快
2. 深度学习特征提取
卷积神经网络(CNN):
- 自动学习图像的多层次特征表示
- 浅层网络提取边缘、纹理等低级特征
- 深层网络提取语义、类别等高级特征
预训练模型:
- VGG:深度网络,特征表达能力强
- ResNet:残差连接,解决梯度消失问题
- MobileNet:轻量级网络,适合移动端部署
三、特征匹配
1. 特征描述子匹配
- 暴力匹配:计算所有特征点之间的相似度
- FLANN匹配:快速近似最近邻搜索
- RANSAC算法:去除误匹配点
2. 应用场景
- 图像拼接:多张图像拼接成全景图
- 目标跟踪:在视频序列中跟踪目标
- 三维重建:从多视角图像重建三维场景
四、滤波算法典型应用场景
- 城市道路环境
场景特点:高动态范围光照(如城市夜景、隧道入口)、复杂背景(广告牌、建筑物反射)。
预处理需求:
伽马校正:调整车灯与周围环境的亮度比,避免过曝。
双边滤波:在去除广告牌反射噪声的同时,保留车辆轮廓。
直方图均衡化:增强暗部道路标志的可见性。 - 高速公路场景
场景特点:高速行驶导致图像模糊、远距离目标(如前方车辆)细节丢失。
预处理需求:
高斯滤波:消除高速运动引起的模糊噪声。
对比度拉伸:扩展远距离车辆的像素值范围,提升检测距离。
中值滤波:去除因路面反光产生的椒盐噪声。 - 恶劣天气条件
场景特点:雨雾导致图像对比度降低、噪声增加。
预处理需求:
直方图均衡化:恢复被雾气模糊的道路线。
双边滤波:在平滑雨滴噪声的同时,保留行人轮廓。
伽马校正:调整因阴天导致的整体亮度下降。 - 特殊地形与环境
场景特点:隧道内光线骤变、山区道路阴影交错。
预处理需求:
伽马校正:快速适应隧道入口的亮度变化。
中值滤波:去除因电路干扰产生的突发噪声。
对比度拉伸:增强阴影区域的车辆可见性。
五、特征提取代码
- 边缘检测:实现Canny、Sobel、Laplacian三种方法,涵盖多尺度和方向性特征提取
- 角点检测:提供Harris、FAST、Shi-Tomasi三种算法,覆盖快速检测与鲁棒性
- 局部描述子:集成SIFT、SURF、ORB,支持尺度不变性和旋转不变性
- 深度学习模块:通过预训练模型(如VGG、ResNet)提取高级语义特征
import cv2
import numpy as np
# 边缘检测
def canny_edge(image):
return cv2.Canny(image, 50, 150)
def sobel_edge(image):
sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
return np.sqrt(sobelx**2 + sobely**2)
def laplacian_edge(image):
return cv2.Laplacian(image, cv2.CV_64F)
# 角点检测
def harris_corner(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
return dst
def fast_corner(image):
fast = cv2.FastFeatureDetector_create()
kp = fast.detect(image, None)
return cv2.drawKeypoints(image, kp, None, color=(0,255,0))
def shi_tomasi_corner(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
return cv2.drawKeypoints(image, corners, None, color=(0,255,0))
# 局部特征描述子
def sift_descriptor(image):
sift = cv2.SIFT_create()
kp, des = sift.detectAndCompute(image, None)
return kp, des
def surf_descriptor(image):
surf = cv2.xfeatures2d.SURF_create()
kp, des = surf.detectAndCompute(image, None)
return kp, des
def orb_descriptor(image):
orb = cv2.ORB_create()
kp, des = orb.detectAndCompute(image, None)
return kp, des
# 深度学习特征提取
def cnn_feature(image, model):
image = cv2.resize(image, (224, 224))
image = image / 255.0
image = np.expand_dims(image, axis=0)
features = model.predict(image)
return features
六、实际案例
- 特斯拉Autopilot:在雨雾天气中,通过直方图均衡化增强道路标志可见性,同时使用双边滤波去除雨滴噪声,确保车道线检测准确。
- Waymo自动驾驶系统:在高速场景中,结合高斯滤波消除运动模糊,并通过对比度拉伸提升远距离车辆检测距离。
- Mobileye EyeQ芯片:集成硬件加速的预处理模块,实时执行伽马校正和双边滤波,优化夜间驾驶的感知性能。
1819

被折叠的 条评论
为什么被折叠?



