功能: 快速检测道路上的车道线
THIK:使用栅格限制处理范围,加速计算。程序在有车的地方,还是存在一点误判。(PS:图像有点太理想了,灰度值在190之上的除了道路线、车和天空,几乎没什么噪声。)

  1. 初始化
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    dev_update_window ('off')
    dev_close_window ()
    dev_open_window (0, 0, 768, 575, 'black', WindowID)
    MinSize := 30
    * 使得在创建新图像时,不自动初始化
    get_system ('init_new_image', Information)
    set_system ('init_new_image', 'false')
    * 生成并裁剪栅格区域,用于车道线检测
    gen_grid_region (Grid, MinSize, MinSize, 'lines', 512, 512)
    clip_region (Grid, StreetGrid, 130, 10, 450, 502)
    dev_set_line_width (3)
    dev_set_color ('green')
    read_image (ActualImage, 'autobahn/scene_00')
    dev_display (ActualImage)
    stop ()
    dev_display (StreetGrid)
    stop ()
  2. 使用图像梯度信息,确定车道线周围轮廓区域,裁剪后再提取车道线
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    for i := 0 to 28 by 1
    read_image (ActualImage, 'autobahn/scene_' + (i$'02'))
    reduce_domain (ActualImage, StreetGrid, Mask)
    * 使用sobel滤波计算图像梯度Gradient
    sobel_amp (Mask, Gradient, 'sum_abs', 3)
    * 二值化提取阈值∈(20,255)的区域,然后膨胀
    threshold (Gradient, Points, 20, 255)
    dilation_rectangle1 (Points, RegionDilation, MinSize, MinSize)
    * 裁剪图像。至此车道线周围轮廓区域提取完成。
    reduce_domain (ActualImage, RegionDilation, StripGray)
    * 再二值化提取车道线(高亮区域)
    threshold (StripGray, Strip, 190, 255)
    fill_up (Strip, RegionFillUp)
    dev_display (ActualImage)
    dev_display (RegionFillUp)
    endfor