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

31 篇文章 31 订阅
4 篇文章 0 订阅
该博客详细介绍了使用Halcon进行环形字符OCR识别的过程,包括图像读取、灰度转换、阈值提取、形状变换、极坐标转化、二值化等步骤,最终通过分类器进行识别。总结了环形字符OCR的关键在于摆正字符并进行拉直处理。
摘要由CSDN通过智能技术生成

Halcon程序及其讲解。
个人学习笔记
在这里插入图片描述
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 ()
实现效果
在这里插入图片描述

单步具体讲解:
read_image (Image, ‘D:/shijue/学习笔记/OCR识别/OCR环形字符识别.png’)
//读图
rgb1_to_gray (Image, GrayImage)
//rgb转灰度图。
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’)
//将圆形图像进行极坐标转化。GrayImage:输入的图像。PolarTransImage:输出的图像。Column:最大圆。rad(60):开始点【由于从0度开始,字符段出现断开的现象,所以可以自由选取开始点】。rad(420):结束点【如果我们只需要获取一部分的字符段,则可以控制终止点进行提取】。Radius-50:为最大直径-50像素的区域。Radius1+20:为最小直径+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)
//读取分类器。工业字体。由于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识别和其他状态的字符一样,第一摆正字符。对于环形字符来说,先获取到最大圆,在获取到最小圆,然后对这个区域进行拉直,然后剩下和其他OCR识别的套路是一样的。在遇到特

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值