您的位置:首页 > 其它

Halcon实战之车牌识别

2018-03-01 09:53 1776 查看
车牌识别是生活中随处可见的应用,目前已经相当成熟。而今天我们讨论的是比较单一的应用场景,即静态场景,仅供学习参考。
给出一张车牌图片,当然你可以拿起你的手机对着一辆车随意拍一张。



图片选择的是稍微有所倾斜的一张,这样便于我们对矫正定位有更清晰的认识。
车牌识别的套路也不复杂,可能根据应用场景不同,需要加上一些特殊的处理。一般分三步走:
1.定位:明确目标对象
2.校正:角度位置上的处理,将图像或者区域摆正
3.识别:ocr字符识别
我们重点关注图像校正,一般采用仿射变换处理。需要求出单位矩阵,缩放矩阵,旋转矩阵,平移矩阵等其中一种或多种,然后将及其作用于区域或者图像。
仿射变换步骤:*求角度
orientation_region (RegionTrans, Phi)
*求区域面积,旋转坐标
area_center (RegionTrans, Area, Row, Column)
*求旋转矩阵--仿射变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
*旋转区域,旋转图像
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'false')
affine_trans_image (Decliningcarno, ImageAffinTrans, HomMat2D, 'constant', 'false')
*截取区域 图像Image相对于Region区域的图像
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced)我们先将一幅rgb三通道图像转换为3幅单通道图像,然后rgb空间转hsv空间,再对H分量作灰度分析提取 ,得到如下图



开运算去椒盐噪点



再进行形态学处理,仿射变换,最后利用halcon自带的一些mlp文件进行识别,read_ocr_class_mlp



完整代码及详细讲解如下:dev_close_window ( )
dev_open_window_fit_size (0, 0, 640, 480, -1, -1, WindowHandle)

read_image (Decliningcarno, 'E:/SVN/Gavin/Learn/HalconHelp/photos/decliningCarNo.png')
*将一幅rgb三通道图像转换为3幅单通道图像
decompose3 (Decliningcarno, Red, Green, Blue)

*rgb空间转hsv空间
trans_from_rgb (Red, Green, Blue, ImageResult_H, ImageResult_S, ImageResult_V, 'hsv')
*对H分量作灰度分析提取
threshold (ImageResult_S, Regions, 223, 255)
*开运算去椒盐噪点
opening_rectangle1 (Regions, RegionOpening, 2, 2)
*填充孔洞
fill_up (RegionOpening, RegionFillUp)
*断成不同的连通域
connection (RegionFillUp, ConnectedRegions)
*特征选择
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 7096.33, 9199)
*形状转换 使用凸性或外接矩形都可以
shape_trans (SelectedRegions, RegionTrans, 'rectangle2')
*求角度
orientation_region (RegionTrans, Phi)
*求区域面积,旋转坐标
area_center (RegionTrans, Area, Row, Column)
*求旋转矩阵--仿射变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
*旋转区域,旋转图像
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'false')
affine_trans_image (Decliningcarno, ImageAffinTrans, HomMat2D, 'constant', 'false')
*截取区域 图像Image相对于Region区域的图像
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced)
*图像取反,由于识别用到训练字库都是暗字体
invert_image (ImageReduced, ImageInvert)
*转灰度图像
rgb1_to_gray (ImageReduced, GrayImage)
*灰度处理
threshold (GrayImage, Regions1, 123, 194)
connection (Regions1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 172.99, 448)
sort_region (SelectedRegions1, SortedRegions, 'character', 'true', 'column')
*读取
read_ocr_class_mlp ('Industrial_0-9A-Z.omc', OCRHandle)
*
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
disp_message (WindowHandle, Class, 'window', 150, 150, 'black', 'true')

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息