halcon机器视觉玩转车牌识别

*1采集图像 
read_image (Image, 'C:/Users/Administrator/Desktop/车牌.jpg') 
dev_close_window () 
dev_open_window (0, 0, 512, 512, 'black', WindowHandle) 
dev_display (Image) 
*2预处理之车牌定位,一般定位有两种,一个是blob像素团块定位,一个是模板匹配定位,然后几何变换转正 
 decompose3 (Image, Red, Green, Blue) 
 trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv') 
*注意这里的颜色通道转换是为了方便图像分割,也就是车牌定位,这里用的比较通用简单的blob,在实际项目中需要考虑光照等的影响进行微调优化 
 *这里的二值化是进行一个blob车牌定位
 
 threshold (Saturation, Regions, 182, 255) 
*注意我这里的开运算,此算子是根据具体情况从大脑闪现,也就是哲学里的我本没有招数,我的招数取决对方出招,因为看到有小噪声点,所以马上联想开运算 
*注意去掉像素马上想到开运算和腐蚀,增加像素用闭运算和膨胀。具体区别可以看我发的链接,里面我阐述了。
 
opening_rectangle1 (Regions, RegionOpening, 6,6) 
*接下来的思路是需要获得整个这个区域,所以联想到shape_trans,因为是有角度的矩形所以用rectangle2 
shape_trans (RegionOpening, RegionTrans, 'rectangle2') 
*接下来求这个区域的角度和中心点,便于仿射变换转正 
orientation_region (RegionTrans, Phi) 
area_center (RegionTrans, Area, Row, Column) 
*开始求解仿射变换之旋转矩阵,这里要注意是转到180度还是0度,需要注意你求解角度时的极轴方向,具体可以看链接视频 
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D) 
*将图像和区域都做这个旋转变换,然后抠图,再进行图像分割 
affine_trans_image (Image, ImageAffinTrans, HomMat2D, 'constant', 'false') 
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor') 
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced) 
*3下面就要进行图像分割了,也就是字符分割,分割出感兴趣地带,上面都是在做定位和几何变换而已,注意这个思路套路 
rgb1_to_gray (ImageReduced, GrayImage) 
*注意这里翻转图像灰度值是因为我们后面用的是halcon自带的字库,而halcon自带字库是白底黑字的 

invert_image (GrayImage, ImageInvert) 
threshold (GrayImage, Regions1, 92, 135) 
*这里三兄弟开始联合,用法是随机应变,就像水一样,本身无形,遇到容器就是容器形状 
opening_rectangle1 (Regions1, RegionOpening1, 3,3) 
*注意一定要砍成不同连通域才可以用特征选择,这是halcon内部机制,是规定,并非客观。也就是必须调用connection 
connection (RegionOpening1, ConnectedRegions) 
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 546.74, 2000) 
*字符就被提取了,注意这里我暂时不是识别汉字,要识别汉字也是可以的,可以看视频链接 
*进行字符排序方便识别后观察,因为人都是习惯从左到右
 
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column') 
*4识别显示,注意这里识别用的halcon自带字库,同时带NoRej的表示非拒绝,识别要求不严格 
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle) 
*注意ocr套路,一般可以多个区域一起识别,也可以单个区域识别,注意上面的工作就是为了得到这个区域 
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence) 
dev_display (Image) 
disp_message (WindowHandle,Class, 'image', 371, 264, 'red', 'false')

  • halcon机器视觉玩转车牌识别_第1张图片
  • 图片:车牌.jpg

    halcon机器视觉玩转车牌识别_第2张图片

你可能感兴趣的:(Machine,Learning)