该方法是某个文章中看到的,有点忘了是那一篇了,看的太多也太久了。
Step1、把采集到的RGB图像转换为HSI图像。
HSI模型能反映人对色彩的感知和鉴别能力,非常适合基于色彩的图像的相似比较,故采用HSI模型。假设HSI颜色模型各分量为H、S、I ,RGB 彩色模型的各个分量为 R, G ,B ,则 RGB 转换 HSI 的公式为:
其中H 表示色调,如红色、绿色、蓝色等,色调的取值范围为 [0 , 360],其对应颜色轮的角度。S表示饱和度,其意义是颜色的鲜艳度,可以用百分比来表示,从0%到完全饱和100%。 I表示亮度,是指颜色的明亮程度,通常用百分比表示,从黑0%到白100%。
通过式把 RGB 彩色图像转换为 HSI 彩色模型的图像,HSI 彩色模型的图像,左侧为 RGB 彩色图像。从 HSI 颜色的图像中可以看出,高亮部分为车牌的蓝色区域。
Step2、提取 HSI 图像中的 H、S 分量。
(1)利用 H 分量进行图像颜色分割。由于蓝色的 H 分量值为 240 º,并且图像可能受到噪声污染,所以蓝色的 H 分量值有一定的波动。经过实验可得到蓝色分量 H 的最小值blue_MinH 为 220º,最大值 blue_MaxH 为 245º。假设二值图像为 Bw,Bw 和 HSI 图像具有相同的大小,Bw 中的所有元素都为 0。利用下式把满足蓝色区域条件的设为前景白色,即 Bw = 1;不满足条件的设为背景黑色,即Bw = 0。
(2)利用S分量对图像处理。因为受到天气、光照等条件的影响,非牌照区域也会和牌照区域的色调特征相同,因此可以利用 S 分量去掉饱和度小且满足蓝色色调范围的区域。设饱和度的阈值为 threshS,利用去掉满足蓝色色调条件但非车牌的区域。
Step3、利用车牌的几何特征去除候选区域中的非牌照部分。
由于天气、光线等因素导致采集到的图像受到噪声的干扰,所以即使经过 Step1、Step2 的处理,仍然可能存在多个车牌的候选区域。利用车牌的几何特征可以过滤掉部分不符合条件的候选区域。常用的车牌几何特征有:候选区域的面积、外接矩形的宽度和高度、外接矩形的长宽比,本文采用候选区域的高度。具体做法如下:通过对 Step2 得到的二值图像 Bw 水平投影,得到水平投影图,其中水平投影值是同一行中的像素点的个数。基于车牌区域存在一定的高度的事实,设定车牌高度的最小值为 Height_Min,最大值为 Height_Max,候选区域的高度为 Heigh。当满足 Height_Min ≤ Height ≤ Height_Max 时,从图像中提取出高度为 Height 的候选区域。
Step4、为处理车辆和车牌颜色特征相同的情况,可以通过特征颜色边缘检测去除和车牌颜色特征相同的伪车牌区域。
设图像 K(i,j)= (H(i,j),S(i,j), I(i,j)),其中 H(i,j),S(i,j), I(i,j)分别表示 K(i,j)的 H、S、I 分量。二维数组 K2(i,j)是边缘检测后的图像。采用以 K(i,j)为中心的 3×3窗口检测特定的颜色边缘。
(1)在 HSI 彩色模型中,满足式前两式时判为蓝色;满足式(2.4)则为白色。
(2)获取蓝白边缘图像。判断蓝白边缘的条件为:(a)K(i-1,j-1)、K(i,j-1)、K(i+1,j-1)都为蓝色像素点,K(i-1,j+1)、K(i,j+1)、K(i+1,j+1)均为白色像素点;(b)K(i-1,j-1)、K(i,j-1)、K(i+1,j-1)都为白色像素点,K(i-1,j+1)、K(i,j+1)、K(i+1,j+1)均为蓝色像素点。若满足(a)、(b)中的任意一个条件,则 K(i-1,j)、K(i,j)、K(i+1,j)为蓝白边缘点,令 K2(i-1,j)= K2(i,j) = K2(i+1,j) = 1,并将该窗口中的 K2 其它像素设为 0;若以上条件均不满足,则将该窗口位置的 K2 中的所有像素值置为 0。同时将窗口遍历整幅图像,得到蓝白边缘图。
(3)利用车牌的几何特征去掉不符合条件的候选区域。面积大小的计算定义为:蓝白边缘图像中白色的像素点的总数,即为 white_CountTotal。设车牌区域面积的最小值为 min_Area,最大值为 max_Area。当 min_Area ≤ white_CountTotal 并且 white_CountTotal ≤ max_Area,则认为是车牌区域。
Step5、确定车牌区域的宽度。
经过前面的步骤已得到车牌区域,确切的说应该是车牌的高度,所以还需得到车牌的宽度。本文采用垂直投影的方法确定车牌的宽度。对车牌区域进行垂直投影。垂直投影值定义为图像中同一列为白色像素点的个数,记为vertical_Count,令垂直投影值的阈值为 verticalValue_Thresh。
具体过程如下:
- 首先从图像的最左边扫描图像的垂直投影值,当 vertical_Count ≥verticalValue_Thresh 时,该位置即为车牌区域的起点 wide_Start ;
- 然后继续扫描直到vertical_Count ≤ verticalValue_Thresh 时,此位置则为车牌区域的终点 wide_End;
- 最后得到车牌区域的宽度 wide = wide_End – wide_Start。