ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

halcon实现车牌识别

2020-02-27 21:41:31  阅读:608  来源: 互联网

标签:分割 识别 图像 halcon ocr 算子 trans 车牌


通过halcon实现车牌识别,大致分为读取图像、车牌定位、角度修正、分割、识别显示几部分。
选取一张我们要识别的车牌照片
一、读取照片
打开halcon,在菜单栏文件选型中读取图像,或者直接写read_image算子导入图像。

二、定位车牌
1.颜色空间转换
利用decompose3算子和trans_from_rgb算子,将图像转为hsv颜色空间图像,选取车牌部分最明显的一张。此例子中选择的是ImageResualt2,

2.阈值分割
通过阈值分割大致选出包含车牌区域。

用connection算子将图像分割成不同的连通域。

通过形态学方法,特征选择等进一步确定车牌所在位置。
在特征选择时,首选通过面积(area)来定位车牌,如果通过面积不能确定,可以增加宽度,长度等特征进行筛选。另外在特征直方图中,每一个峰值即代表一个特征区域。

如果选出的车牌区域不是一个完整的连通域,而是几个相邻的连通域,可以使用union算子将他们连成一个连通域进行定位。

将连通域用算子shape_trans转换成一个矩形区域。

该区域即是车牌所在区域。
三、角度修正
由于识别字符采用的是halcon内部的训练集,所以需要将倾斜的字符转正。
首先通过orientation_region算子获得该矩形区域的倾斜角度,然后将图像修正。
对矩形区域的旋转要先找到矩形的中心,然后通过算子vector_angle_to_rigid构建仿射变换模板,其算子使用方法为

vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)

参数描述

我们需要注意的参数是angle1和angle2,angle1是输入图像的角度,angle2是输出图像的角度,为了方便我们的理解和运算,我们输入的角度设置为phi(上一步求得),如果phi为正数角度转为rad(180),如果phi为负数角度转为rad(0).
而phi的正负是由于参考坐标的不同而引起的,在此我们不进行深入理解。
然后使用生成的模型,用算子将原图像和矩形区域都进行仿射变换。
变换后的图像
矩形区域
四、分割
使用reduce_domain算子对图像进行分割,将车牌分离出来。
车牌区域
然后对图像进行转灰度图。
灰度车牌
阈值分割
阈值分割
连通域分割
连通域分割
多种特征联合选择,一般使用面积,宽度,高度
特征选择
特征选择
选择的区域
对区域进行排序,按照character进行排序
五、识别显示
利用算子read_ocr_class_mlp选择ocr模型,Industrial_0-9A-Z_NoRej.omc
利用算子do_ocr_multi_class_mlp进行识别
显示结果
最终结果
以下为代码

*读入图像
read_image (Chepai, '/chepai1.jpg')
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

*定位
decompose3 (Chepai, Image1, Image2, Image3)
trans_from_rgb (Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')
threshold (ImageResult2, Regions, 85, 255)
opening_rectangle1 (Regions, RegionOpening, 3, 3)
fill_up (RegionOpening, RegionFillUp)
connection (RegionFillUp, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions2, 'area', 'and', 7546.3, 10000)

union1 (SelectedRegions2, RegionUnion)
shape_trans (RegionUnion, RegionTrans, 'rectangle2')

*角度修正
orientation_region (RegionTrans, Phi)
area_center (RegionTrans, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
affine_trans_image (Chepai, ImageAffineTrans, HomMat2D, 'constant', 'false')
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')

*分割
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)
rgb1_to_gray (ImageReduced, GrayImage)
threshold (GrayImage, Regions1, 193, 249)
connection (Regions1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions, ['area','column','column2'], 'and', [20.83,243.06,125.46], [434.72,500,500])

sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'column')
invert_image (GrayImage, ImageInvert)

*识别
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
disp_message (WindowHandle, Class, 'window', 0, 0, 'blue', 'true')
亦人亦仙  发布了1 篇原创文章 · 获赞 0 · 访问量 20 私信 关注

标签:分割,识别,图像,halcon,ocr,算子,trans,车牌
来源: https://blog.csdn.net/zhang1306121905/article/details/104544113

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有