1、Canny边缘检测
Canny边缘检测算法可以分为以下5个步骤:
- 应用高斯滤波来平滑图像,目的是去除噪声
- 找寻图像的强度梯度(intensity gradients)
- 应用非最大抑制(non-maximum suppression)技术来消除边误检(本来不是但检测出来是)
- 应用双阈值的方法来决定可能的(潜在的)边界
- 利用滞后技术来跟踪边界
通过图像像素变化的梯度来确定这个点是否是边缘
双阈值
一般的边缘检测算法用一个阀值来滤除噪声或颜色变化引起的小的梯度值,而保留大的梯度值。Canny算法应用双阀值,即一个高阀值和一个低阀值来区分边缘像素。如果边缘像素点梯度值大于高阀值,则被认为是强边缘点。如果边缘梯度值小于高阀值,大于低阀值,则标记为弱边缘点。小于低阀值的点则被抑制掉。
如果弱边缘点与强边缘线相连,则我们认为该点是边缘,如C点,否则不是边缘,如B点。
2、去除非车道线的边缘信息(过滤无关信息)
3、霍夫变换(获取所有线段)
把圆或直线从直角坐标系映射到极坐标系,通过极坐标寻找直线
4、离群值过滤
5、最小二乘拟合
代码
import cv2
import numpy as np
# 得到灰度图
img = cv2.imread("images/2.png", cv2.IMREAD_GRAYSCALE)
# Canny边缘检测
edge_img = cv2.Canny(img, 50, 100)
# ROI_mask感兴趣区域检测
mask = np.zeros_like(edge_img)
roi_mask = cv2.fillPoly(mask, np.array([[[439, 290], [588, 283], [130, 510], [