halcon机器视觉之玩转车牌识别-超人视觉罗超

halcon机器视觉之玩转车牌识别-超人视觉罗超_第1张图片     本人超人视觉-罗超: 大家好,直接上干货。本人将从哲学和技术结合的全新视角来理解,我的整个学习视觉的思想套路都是从哲学世界观来展示,下面我将逐步从我的第一篇博客开始给大家展示。首先我们要对一个机器视觉系统有一个完整的认识,一个完整的机器视觉系统是由光源、成像系统、图像捕捉系统(CCD/CMOS)、AD转换系统、图像处理和决策模块、控制系统。其中的图像处理和决策模块分为四个处理步骤:采集-》预处理-》图像分割-》特征提取及识别显示、通讯。我们的视觉处理借助于halcon平台。那么预处理中一般瞄准四个目的(1.灰度对比度上的改变,对应算子如scale_image、emaphsize、gray_开头的灰度形态学、equ_hiso_image。2去噪,对应的有均值滤波(mean_image),中值滤波(median_image),高斯滤波(gauss_image).3.几何变换(仿射变换、投影变换。极坐标变换)4.抠图(手画或者blob逼近)),那么对于图像分割指这里一般是三兄弟联合(这三个兄弟是二值化、形态学和特征选择,这三个经常配合shape_trans、intersection、difference等)。接下来我就以任意角度拍一个车牌在基于halcon平台下快速识别,注意这里只是识别,如果交付给客户还需要加上UI编程和业务逻辑。如果用别的平台套路一样,切记思维是解决项目的灵魂,代码本身是客观存在,静态的。下面上车牌识别代码,随意拍一张都可以。大家如果对我的这种哲学和技术融合思想感兴趣的朋友欢迎下载http://pan.baidu.com/share/link?shareid=3266393619&uk=2369503810。也可以进我的qq群577303448,或者加我个人qq1269131923对于机器视觉实战项目有着更多这种思想的展示。

*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机器视觉之玩转车牌识别-超人视觉罗超_第2张图片
 更多的大家可以关注视频链接

http://pan.baidu.com/share/link?shareid=3266393619&uk=2369503810

视觉技术是人类对客观物质的反映而已,所以思维意识反应非常重要,直接决定你的认识高度,不过您必须结合天时地利,所以您必须结合具体环境实操,实践结合理论才可以





  


你可能感兴趣的:(机器视觉,互联网,编程语言)