基于阈值的车道标记

本文介绍如何在视频中找到并标记车道线,包括应用梯度阈值、Sobel算子、色彩空间(如HLS)进行图像处理,结合透视变换和曲线拟合确定车道线位置和曲率。
摘要由CSDN通过智能技术生成

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

在这篇文章中,我将介绍如何从视频中查找并标记车道。被标记的车道会显示到视频上,并得到当前路面的曲率以及车辆在该车道内的位置。首先我们需要对图像进行相机失真校正,这里就不作详细介绍了。我们的关键任务是识别图片中属于车道的像素,为此我们使用了“颜色阈值”的概念。

梯度阈值

在Canny Edge Detection中,我们采用了整体梯度,这有助于我们检测强度或颜色急剧变化的区域。为此,canny边缘检测使用Sobel算子,该算子近似于在一个方向上获取图像的导数。运算符由一对卷积内核组成。

总梯度的大小由以下公式给出:

而渐变的方向是:

让我们尝试分离出“幅度”和“梯度方向”,而不是采用整体梯度。在某些情况下,这可以提供更大的优势。车道线,如果车道不太弯曲,则与图像中的垂直线更接近。因此,ax方向梯度比ay方向更有意义。采取单独的x、y梯度大小或方向,都有相应的优点。我们可以应用不同的阈值以达到期望的结果。

Sobel X,Y阈值

OpenCV具有sobel函数,可沿x,y方向获取梯度,该函数还可用于使用上述公式创建仅幅度和方向的阈值。完全不需要将图形转换为灰度,就可以提供很好的视觉效果。阈值只是创建二进制图像的一种方法,其中将满足条件的每个像素更改为1,将其他像素设置为0。

import numpy as np
import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import pickle
# Read in an image and grayscale it
image = mpimg.imread('straight_lines1.jpg')
# Define a function that applies Sobel x or y, 
# then takes an absolute value and applies a threshold.
# Note: calling your function with orient='x', thresh_min=5, thresh_max=100


def abs_sobel_thresh(img, orient='x', thresh_min=0, thresh_max=255):
    # Apply the following steps to img
    # 1) Convert to grayscale
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    # 2) Take the derivative in x or y given orient = 'x' or 'y'
    sobel = cv2.Sobel(gray, cv2.CV_64F, orient=='x', orient=='y')
    # 3) Take the absolute value of the derivative or gradient
    abs_sobel = np.absolute(sobel)
    # 4) Scale to 8-bit (0 - 255) then convert to type = np.uint8
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值