Hyperlpr专题

Hyperlpr车牌颜色判断

HyperLPR是 智云视图(http://www.zeusee.com)开源的一个使用深度学习针对对中文车牌识别的实现,HyperLPR可以识别多种中文车牌包括白牌,新能源车牌,使馆车牌,教练车牌,武警车牌等。
Github地址:https://github.com/zeusees/HyperLPR

本文主要介绍Hyperlpr的车牌颜色判断部分,车牌颜色判断主要在车牌检测部分完成之后,对车牌颜色进行分类,现在主要的车牌颜色包括:蓝牌,黄牌,绿牌(新能源车牌),黑牌以及白牌。

我们在这里使用的方法大概思路是K-Means聚类之后,提取主成分颜色,判断主成分颜色空间所属的颜色分类,进而实现颜色判别。整体思路非常简单,下面我们一步一步来描述:

K-Means聚类

K-means是一种聚类算法,主要的目的在于将N组数据划分到K个类别,属于无监督学习算法的一种,我们通常将所分类别的中心称为聚类中心。
在这里,我们的输入数据是一副已经定位好的车牌图像,如下图所示:

假设这是一幅128*96的图片,那么这里我们的数据相当于128*96组RGB值,我们将这些RGB值进行K-means聚类划分成两个颜色类别:

image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
image = image.reshape((image.shape[0] * image.shape[1], 3))
clt = KMeans(n_clusters=2)
clt.fit(image)

颜色划分

接着,如果我们将聚类划分的颜色用可视化的方式展示,就是如下图所示:


从图中我们已经可以很清晰的看到车牌被聚类为以蓝色为主颜色,和另外一种从属的附属色。接下来,我们只需要提取出主成分色彩,进行颜色判别即可。

颜色判别

比如我们聚类出的主成分颜色值为:(39.76983095 108.94668401 214.63849155),我们需要判别这个颜色所属的颜色空间,这里有人可能会想到用分类器,其实没有那么复杂的必要,只需要通过规则性判别即可。

在RGB颜色空间中,我们按照如下规则划分黄色,蓝色,绿色,白色以及黑色:
我们用g表示绿色颜色值,b表示蓝色颜色值,r表示红色颜色值:

如果:
g-r >= 13并且 g-b>=13,那么这个时候,我们把颜色划归为绿色
b-r >= 13并且b-g>=13,那么这个时候,我们把颜色划归为蓝色
r-b > 70 并且 g-b >70 ,那么这个时候,我们把颜色划归为黄色
如果r,g,b的值均大于200,那么这个时候,我们把颜色划归为黑色
如果r,g,b的值均小于50,那么这个时候,我们把颜色划归为白色
如果上述条件都不满足,那么这个时候我们认为是非法颜色。

那么如果聚类生成的主成分色彩被我们认为是非法颜色的话,我们会将附属色作为判别标准重新判断。聚类生成的两种颜色均被判断为非法色的话,此时,车牌颜色判别输出判别失败。

在Hyperlpr中,我们用这种方法对大量车牌进行了颜色测试,其中不乏



这样的异常数据,在测试中,均表现良好。

欢迎大家批评和指正。

你可能感兴趣的:(车牌识别,深度学习,车牌识别,开源)