OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别

Halcon程序及其讲解。
个人学习笔记
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第1张图片
read_image (Image, ‘D:/shijue/学习笔记/OCR识别/OCR环形字符识别.png’)
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 0, 222)
shape_trans (Regions, RegionTrans, ‘outer_circle’)
*外接圆
complement (Regions, RegionComplement)
*补集
connection (RegionComplement, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 0, 186779)
smallest_circle (Regions, Row, Column, Radius)
smallest_circle (SelectedRegions, Row1, Column1, Radius1)
*极坐标转化拉直
polar_trans_image_ext (GrayImage, PolarTransImage,Row, Column, rad(60),rad(420), Radius-50,Radius1+20, 1440, 100, ‘bilinear’)
mirror_image (PolarTransImage, ImageMirror1, ‘column’)
invert_image (ImageMirror1, ImageInvert)
scale_image (ImageInvert, ImageScaled, 7.08333, -1502)
binary_threshold (ImageScaled, Region, ‘max_separability’, ‘light’, UsedThreshold)
connection (Region, ConnectedRegions1)
dilation_rectangle1 (ConnectedRegions1, RegionDilation, 5, 5)
union1 (RegionDilation, RegionUnion)
connection (RegionUnion, ConnectedRegions2)
select_shape (ConnectedRegions2, SelectedRegions1, ‘area’, ‘and’, 466.35, 2000)
intersection (SelectedRegions1, Region, RegionIntersection)
sort_region (RegionIntersection, SortedRegions, ‘character’, ‘true’, ‘row’)
read_ocr_class_mlp (‘Industrial_0-9A-Z_NoRej.omc’, OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageMirror1, OCRHandle, Class, Confidence)
smallest_rectangle1 (SortedRegions, Row1, Column1, Row2, Column2)
dev_display (ImageMirror1)
dev_get_window (WindowHandle)
disp_message (WindowHandle, Class,‘ImageMirror1’, Row1, Column1, ‘green’, ‘false’)
stop ()
实现效果
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第2张图片

单步具体讲解:
read_image (Image, ‘D:/shijue/学习笔记/OCR识别/OCR环形字符识别.png’)
//读图
rgb1_to_gray (Image, GrayImage)
//rgb转灰度图。
threshold (GrayImage, Regions, 0, 222)
//灰度阀值提取,选择圆圈部分。
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第3张图片

shape_trans (Regions, RegionTrans, ‘outer_circle’)
//将内部区域进行填充,用于求取最大圆的半径和圆心坐标
complement (Regions, RegionComplement)
//对灰度阀值后的图像进行取补集
connection (RegionComplement, ConnectedRegions)
//断开
select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 0, 186779)
//选择最小的圆,用于求内圈圆的半径和圆心
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第4张图片

smallest_circle (Regions, Row, Column, Radius)
//求取最大圆的圆心和半径
smallest_circle (SelectedRegions, Row1, Column1, Radius1)
//求取最小圆的圆心和半径
*极坐标转化拉直
polar_trans_image_ext (GrayImage, PolarTransImage,Row, Column, rad(60),rad(420), Radius-50,Radius1+20, 1440, 100, ‘bilinear’)
//将圆形图像进行极坐标转化。GrayImage:输入的图像。PolarTransImage:输出的图像。Column:最大圆。rad(60):开始点【由于从0度开始,字符段出现断开的现象,所以可以自由选取开始点】。rad(420):结束点【如果我们只需要获取一部分的字符段,则可以控制终止点进行提取】。Radius-50:为最大直径-50像素的区域。Radius1+20:为最小直径+20的区域。【目的是去除除了所需要字符的多余部分】。1440:图像拉直后存放的窗口的长度。100:图像拉直后存放图像窗口的宽度。‘bilinear’:双线性转化。
mirror_image (PolarTransImage, ImageMirror1, ‘column’)
//极坐标转化的图像为逆时针,所以拉直后进行横向镜像翻转。
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第5张图片

invert_image (ImageMirror1, ImageInvert)
//灰度转化,将暗的部分变亮,将亮的部分变暗。方便后面提取字符
scale_image (ImageInvert, ImageScaled, 7.08333, -1502)
//灰度直方图缩放提取,直接提取字符部分,有噪声不影响
binary_threshold (ImageScaled, Region, ‘max_separability’, ‘light’, UsedThreshold)
//快速二值化去除噪声
connection (Region, ConnectedRegions1)
//断开
dilation_rectangle1 (ConnectedRegions1, RegionDilation, 5, 5)
//膨胀形成的样子应该可以看清楚单个字符没有断开的地方
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第6张图片

union1 (RegionDilation, RegionUnion)
//形成一个连通域
connection (RegionUnion, ConnectedRegions2)
//在断开
select_shape (ConnectedRegions2, SelectedRegions1, ‘area’, ‘and’, 466.35, 2000)
//特征选择,去除不需要的部分。一定需要保证单个字符为一个连通域即可
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第7张图片

intersection (SelectedRegions1, Region, RegionIntersection)
//取交集。对单个连通域与拉直二值化翻转后的图像进行取交集
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第8张图片

sort_region (RegionIntersection, SortedRegions, ‘character’, ‘true’, ‘row’)
//排序
read_ocr_class_mlp (‘Industrial_0-9A-Z_NoRej.omc’, OCRHandle)
//读取分类器。工业字体。由于halcon的自带分类器没有&这个字符,所以在没有特殊必须需要的情况,可以跳过&的识别,如果需要,则可以复制一份分类器,自己在原有的基础上使用OCR助手进行添加符号
do_ocr_multi_class_mlp (SortedRegions, ImageMirror1, OCRHandle, Class, Confidence)
//分类器识别
//显示部分
smallest_rectangle1 (SortedRegions, Row1, Column1, Row2, Column2)
dev_display (ImageMirror1)
dev_get_window (WindowHandle)
disp_message (WindowHandle, Class,‘ImageMirror1’, Row1, Column1, ‘green’, ‘false’)
stop ()
OCR识别中级篇,Halcon实战项目讲解四,环形字符OCR识别_第9张图片

总结:对于环形字符而言,OCR识别和其他状态的字符一样,第一摆正字符。对于环形字符来说,先获取到最大圆,在获取到最小圆,然后对这个区域进行拉直,然后剩下和其他OCR识别的套路是一样的。在遇到特

你可能感兴趣的:(视觉行业,halcon,实际项目,计算机视觉,人工智能,图像处理)