本次案例来自书本《机器视觉技术基础》,第一次跟着案例编写
主要步骤如下:
代码如下所示:
*读取车辆照片
read_image(Car,'audi2')
dev_clear_window()
get_image_size(Car, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Car)
*图片预处理
*选取车牌区域
gen_rectangle1(Rectangle, 276, 177, 344, 586)
reduce_domain(Car, Rectangle, CarReduced)
*选取数字区域
threshold(CarReduced, Region, 0, 75)
reduce_domain(CarReduced, Region, NumReduced)
*进行BLOB分析
regiongrowing(NumReduced, Regions, 1, 1, 14, 600)
connection(Regions, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
*对区域进行排序
sort_region(SelectedRegions, SortedRegions, 'first_point', 'true', 'row')
*读取HALCON自带的OCR分类器
read_ocr_class_mlp('Industrial_0-9A-Z_NoRej.omc',OCRHandle)
*用OCR分类器对字符进行分类
do_ocr_multi_class_mlp(SortedRegions, NumReduced, OCRHandle, Class, Confidence)
*显示信息
area_center(SortedRegions, Area, Row, Column)
for i:=0 to 6 by 1
disp_message(WindowHandle, Class[i], 'window', 250, Column[i], 'black', 'true')
endfor
车辆图片:
显示结果:
总结:
了解车牌识别(字符识别)的一些基本步骤;
对于本次案例使用的算子更加熟悉:
regiongrowing算子,区域生长法,区域分割常用的一种,在图像上选取“种子”像素或者区域,以其为生长点,从领域像素开始搜寻,比较种子区域像素与领域像素的相似性,将相同或者相似性质的像素合并到种子像素所在区域内,持续以上操作,直到没有满足条件的像素为止。
regiongrowing(Image : Regions : RasterHeight, RasterWidth, Tolerance, MinSize : )
RasterHeight, RasterWidth:矩形区域的宽和高(测试像素之间的垂直距离和水平距离),一般使用奇数。
Tolerance:灰度差值的分割标准,指当像素点的灰度与种子区域的灰度值在该范围内时,则将它们合并为同一区域。
MinSize:区域输出的最小像素。
read_ocr_class_mlp( : : FileName : OCRHandle):读取HALCON自带的OCR分类器
do_ocr_multi_class_mlp(Character, Image : : OCRHandle : Class, Confidence) 用OCR分类器对字符进行分类
后期目标:结合C#,利用C#制作一个简单界面