基于超人视觉启蒙视频——halcon基础2:车牌识别
本文是基于超人视觉Halcon启蒙视频所作,此篇是基础的车牌识别,主要是根据以下步骤演示:
1. 采集图像(read_image);
2. 预处理(1.拉开对比度,2.去噪,3.几何变换,4.抠图(ROI));
3. 分割(形态学方法);
4. 创建分类器(read_ocr_class_mlp);
5. 识别车牌(do_ocr_multi_class_mlp);
以下将按步骤进行详细讲解。
首先,可以在路上随意拍一张车牌照片用来做处理的图像,以下为本次例子图片:
1.采集图像(read_image):
2. 预处理之车牌定位:
首先我们要做一个判断,因为车牌的方向是斜的,所以我们做的第一步预处理应该是车牌定位,然后通过几何变换转正,得到转正后的车牌为后面的ocr识别做基础。
这里的预处理使用的手法是拆通道,通过decompose3的算子我们可以用颜色检测的方法获得RGB三个通道的图片,为了二值化能方便分割,运用trans_from_rgb把RGB分别转成灰度的hsv三个图像,很显然S通道能得到一个较好分割的图像。
在图像窗口显示S通道的图像,并对他做二值化分割:
如图所示,能较好分割出车牌。
二值化后发现图像仍存在挺多的噪点,所以我们可以根据情况用开运算的算子opening_rectangle1来去噪。
我们可以来看一下去噪前后的对比图:
去除了大部分噪点后,我们可以使用特征筛选出车牌,不过在特征筛选前我们应该**断开连通域(connection)**否则无法筛选。
筛选得到区域:
得到区域后将区域连成一个,用fill_up填满中间的孔洞,再拟合成矩形。
3.几何转换:需要开始求解仿射变换之旋转矩阵,这里要注意是转到180度还是0度,需要注意你求解角度时的极轴方向。
得到Phi1=2.96774,根据原理可以得出它的极轴方向是在第二象限内,接近180°。
接下来就是几何变换了,用area_center求出面积和中心点,以中心点为固定点转正。vector_angle_to_rigid需要用到前面的角度,我们是知道Phi1=2.96774,所以式子中的倒数第二个参数为转正后的角度,应为接近的水平的角度,即180°,且这里的角度单位为弧度,需要转换单位即为rad(180)。接着用affine_trans_image,把照片转正,这个算子的第一个参数填的是我们的车牌图的变量。然后才转正我们分割处理的区域,显示转正后的图片,车牌就被抠出来了。
得到如图结果:
4.得到车牌后,直接再次预处理,如图:
5.识别车牌字符
这里使用现有的神经网络分类器用read_ocr_class_mlp,在这里我使用的字体是Industrial0-9A-Z(这种字体是针对亮背景下的暗字体),因为现在的字体是亮字体暗背景,所以需要在车牌预处理前加反转的算子invert_image,将暗亮反转。
接下来就是读取分类器和识别显示在图像窗口的左上角,在这里要注意do_ocr_multi_class_mlp的第二个参数变量要填写反转后的变量**(ImageInvert)**,否则会识别错。
最后得到车牌识别的结果: