项目:找到道路上的道路线

  • 设立问题 

人脑能够自动处理接收到的各种信息,其中最主要的就是眼睛看到的。

所以如果要训练一辆自动驾驶车,需要设置各种传感器/摄像头来获取周围的信息。

所以第一步,就是要教电脑找到道路线。如果有一张道路图的话,可以通过寻找图片上的颜色块,位置,方向和形状来确定道路线在哪。

  • 颜色选择

先从最简单的颜色开始。RGB图像的话是由3个色道(红绿蓝)的图片叠加的,并且用0-255来表示亮度值,0表示全暗,255表示全亮,所以白色就是[255, 255, 255]。

  • 代码案例

写Python的话首先就是import matplotlib中的pyplot和image,以及numpy。

然后用imread函数读图,并且获取type(), .shape,可以从.shape返回值中知道x,y的大小。

注意:在Python中对数组或者变量进行操作的时候不要用赋值号(a=b),这样对a操作b也会受影响,要用np.copy()。[一般元素赋值是一样的,对于复杂子项的元素的操作比如list就会不一样]

接下来设定RGB的阈值,把图片中低于阈值的像素块设置成0(黑色) ,最后用plt.imshow()和plt.show()显示图片。

所以我们可以通过上述脚本将道路图的颜色过滤得只剩道路线。聪明的你可以发现,当设置RGB的值都为200的时候就可以得到一个不错的结果了。但是图中除了道路线外一些其他白色的物体也包括在内了。

  • 区域覆盖

于是在这里我们假设摄像头会装在车上朝前的固定位置,所以道路线一定会出现在屏幕下三角区域,也就是我们平常看见道路线的区域。这是最简化的例子,以后会用四边形,理论上几边形都是可以的。

这里三角形的话要确定左底,右底和上顶三个值。在图像处理中(x=0, y=0)是图片的左上角。

用[A, B] = np.polyfit((x1,y1),(x2,y2),1)来设置y=Ax+B这条线的方法设置三角形的三边,用XX, YY = np.meshgrid(np.arrange(0, xsize),np.arrange(0, ysize))表示出所有的像素区,之后用三边当作选择区域的阈值筛选出想要的像素点并且标红。

  • 找到所有颜色的线

只要将两个算法的产出合并,就能得到想要的结果了。当然,这样还不够,因为线有不同的颜色,就算是同一个颜色的线在不同光线条件下的颜色也不一样,所以下一步的目标是用计算机视觉的方法找到所有颜色的线。

  • 计算机视觉

工具:Python + OpenCV (Open-Source Computer Vision)

  • Feature 1:Canning Edge Detection

首先把图像转化为灰度图像,然后计算每个像素点的梯度,将梯度的强度用亮度表示出来,就能描出物体的边缘线(形状)。

第一步,导入OpenCV,import cv2;第二步,转为灰度图,gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY);第三步,画出来看看,plt.imshow(gray, cmpa='gray');第四步,过滤掉梯度在阈值外的像素,只要剩下的像素和强梯度边连接就被保存下来,edges = cv2.Canny(gray, low_threshold, high_threshold)

由于灰度图片的每个像素有8位,那么每个像素有0-255的256种可能性,所以梯度值大约就是几十几百的样子,阈值也是。

以及在cv2.Canny函数中自动包含了高斯平滑处理,去除噪点和看起来不大对的梯度值,但是参数不可调(5*5)。可以用cv2.GaussianBlur(gray, (kernal_size, kernal_size), 0)中的kernel_size来调节处理的范围,应该取奇数。

  • Feature 2:Hough Transformation

霍夫变换是将影像空间中的曲线(包括直线)变换到参数空间中,通过检测参数空间中的极值点,确定出该曲线的描述参数,从而提取影像中的规则曲线。

 lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]), min_line_length, max_line_gap)

所以这里要首先要做的是先创造一张和原图一样大的空白图片,然后在之前做了边缘检测的图上做霍夫变换处理,得到一堆线之后将它们在空白图中画出来,然后可以把它们加颜色加粗和之前边缘检测结果图叠加。最后再叠加上想检测线的区域就好了,之前用的三角形,接下来可以用cv2.fillPoly()写出任意多边形。

猜你喜欢

转载自www.cnblogs.com/legend-waitforit-dary/p/13382938.html