背景
- 项目要求,需要检测人行道斑马线,所以寻找相关检线算法,此文记录
方案
方案1: Hough检直线
- 参考road_lane_line_detection
- 步骤:
- 过滤颜色(github教程中图片是车辆道路线,分为黄,白,所以只过滤留下黄白就行);cv.inrange()造掩膜,cv.bitwise_and()去淹膜外背景。
- 图片灰度化
- 高斯模糊(平滑):中心点的像素值为周围点像素值的加权平均,权值按照中心点为远点,其他点按照正太曲线上的位置分配权重
- Canny算子进行边缘提取:
- 高斯滤波图像去噪
- 计算图像中每个像素的梯度(使用Sobel算子)
- 非极大值抑制,对每一个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的,是的话就保留。
- 滞后阈值(双阈值),确定哪些边界是真正的边界。设置一高一低两个阈值,梯度大于高阈值的被认为是真的边界,低于低阈值的则被抛弃,在高阈值和低阈值之间的则看起是否与真的边界相连。
- 掩膜选取感兴趣的区域
- 在检测到边缘并掩膜后的图片上Hough检测直线并画线
- 图片加权(initial_img α + img β + λ, img为加上线后的图片,只有线有颜色,其他全为0,initial_img为原始图片)
> - tips:
- draw_line中他因为场景需要(高速隔离道,就是一个梯形),把线分成了左右两组;所以想找人行道斑马线的时候,需要把draw_line改一下
- 而且他的region_of_interest为梯度形状的
扩充参考:
检测结果
- 官方检测图片
- 跑斑马线的效果并不好,只能检查出几条线,调整了:
- min_line_length = 10 -> 200
- draw_lines -> draw_lines_1(画出所有的直线)
- filter_colors里面白色的阈值从200->185
- 斑马线原图
- 检测图片