分享

人工智能|车牌定位简介

 算法与编程之美 2020-08-08

问题描述

1.当拍摄一张包含车牌信息的照片时,往往还含有一些不必要的信息,这些信息在人眼中很容易被过滤,但是对于电脑来说,分辨出非有用信息是非常困难的,所以需要为电脑设计一些方法,帮助它去除无用信息,也就是提取需要的车牌区域。

解决方案

2.1 方法原理

提取车牌区域的原理是先将图片中车牌区域的轮廓表示出来,再去除一些不必要的区域,然后将轮廓连通的区域进行填充,最后利用车牌的面积、长宽比例的特点,将车牌区域在原图中划分出来

2.2 步骤

2.2.1图像预处理

图像预处理主要是对图像灰度化和二值化,灰度化图像后更有利于不必要信息的去除,在选择灰度化方法时,可以采用电视工业标准,二值化后的图像则有利于Canny算法的轮廓提取。

2.2.2提取轮廓边缘

边缘的提取主要是采用Canny算法,将图像区域中边缘点提取出来,Canny算法的图像增强步骤中有几种专门的算子,对于车牌区域的提取,一般选用soble算子。

2.2.3去除部分轮廓

去除部分轮廓的原理是先通过闭操作将图像的轮廓进行填充,再通过开操作将图像中的不满足车牌区域特点的轮廓过滤掉,部分Python代码如下: 

#进行闭运算

kernel = np.ones((5, 15), np.uint8)#设置结构元素

    closingimg = cv.morphologyEx(DT, cv.MORPH_CLOSE, kernel)

    cv.imshow('closingimg', closingimg)

    cv.waitKey(0)

    cv.destroyAllWindows()

    # 进行开运算

    opening_img1=cv.morphologyEx(closingimg,cv.MORPH_OPEN, kernel)

    cv.imshow('opening_img', opening_img)

    cv.waitKey(0)

    cv.destroyAllWindows()

    # 再次进行开运算

    Kerne2 = np.ones((25, 5), np.uint8)#设置新的结构元素

    opening_img2=cv.morphologyEx(opening_img1,cv.MORPH_OPEN, kerne2)

    cv.imshow('opening_img2', opening_img2)

    cv.waitKey(0)

    cv.destroyAllWindows()

上述部分代码是运用闭操作和开操作的python代码,由于图像预处理和Canny算法提取图像轮廓之前已经有讲解,这里就省略了那一部分得大量代码。实验结果如下:

    

2.2.3.1 原始车牌图像 

图2.2.3.2 去除一些区域的轮廓图

2.2.4 提取车牌部分轮廓

提取车牌轮廓可以根据车牌得长宽比例和面积特点,将图像中的车牌部分标准出来,需要对得到的图像进行寻找、绘制轮廓的操作,这个步骤可以使用cv2findContoursdrawContours函数来完成;最后通过绘制的轮廓在原图中相应位置上进行车牌区域提取。

结语

3.本方法适合用于正面拍摄的车牌图片,可以有效的将车牌区域提取出来,需要注意的是,一些图片的效果可能会不理想,这跟图片拍摄的环境和角度都有关系,同时,结构元素的选取也可以变动,这也造成了提取效果的不同,所以对于车牌提取的算法还需要不断的进行优化。

END

实习编辑   |   王文星

责       编   |   饶龙江

 where2go 团队


微信号:算法与编程之美          

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多