Halcon圆环字符提取

 

read_image (Image, 'C:/Users/Administrator/Desktop/2016C37EDAF3C01B296BF999EF78E6CE.png')
* 环形字符提取思路
* 1、提取字符所在的外边圆 字符内边园 大圆-小圆=环形字符区域
* 2、根据环形进行抠图
* 3、进行区域展开矩形
* 4、图像预处理方式 找到字符区域
* 5、开始识别字符
rgb1_to_gray (Image, GrayImage)
* 获取灰度图大小
get_image_size (GrayImage, Width, Height)
* 边缘增强算子:原理原因减去平滑之后的图得到高频的部分 用高频的部分乘以因子得到输出图
emphasize (GrayImage, ImageEmphasize, Width, Height, 1)
threshold (ImageEmphasize, Region, 0, 21)
connection (Region, ConnectedRegions)
* 最大面积进行筛选
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
* 填充区域
fill_up (SelectedRegions, RegionFillUp)
* 通过两次膨胀把外圆和内园摘出来
dilation_circle (RegionFillUp, RegionDilation, 20)
dilation_circle (RegionFillUp, RegionDilatin1, 70)
* 把RegionDilation和RegionDilation1 这两个膨胀区域进行求最小园
smallest_circle (RegionDilation, InnerRow, InnerColumn, InnerRadius)
smallest_circle (RegionDilatin1, OuterRow, OuterColumn, OuterRadius)
* 求两个区域的差异部分 就是环形区域
difference (RegionDilation, RegionDilatin1, RegionDifference)
* 根据环形进行抠图
reduce_domain (ImageEmphasize, RegionDifference, ImageReduced)
* 把环形转成矩形
polar_trans_image_ext (ImageReduced, PolarTransImage, OuterRow, OuterColumn, rad(-30), rad(-120), InnerRadius+16, OuterRadius, Width, Height/8, 'nearest_neighbor')
mirror_image (PolarTransImage, ImageMirror, 'row')
* 提取字符区域
* 灰度值范围平滑
gray_range_rect (ImageMirror, ImageResult, 7, 7)
* 二值化阈值分割
binary_threshold (ImageResult, Region1, 'max_separability', 'light', UsedThreshold)
connection (Region1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'height', 'and', 50, 100)
* 处理粘连部分
union1 (SelectedRegions1, RegionUnion)
* 矩形分割
partition_rectangle (SelectedRegions1, Partitioned, 40, 70)
sort_region (Partitioned, SortedRegions, 'first_point', 'true', 'column')
* 识别字符并且显示 
* 加载分类器
invert_image (ImageResult, ImageInvert)
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
dev_display (Image)
dev_get_window (WindowHandle)
dev_set_color ('pink')
set_display_font (WindowHandle, 20, 'mono', 'true', 'false')// 设置字体大小
set_tposition (WindowHandle, OuterRow, OuterColumn-400)// 设置位置
write_string (WindowHandle, Class)// 显示字符串

Halcon图像处理库中,要提取最外层的圆形轮廓,通常会使用`FindContour`函数结合一些预处理步骤。首先,你需要对图像进行二值化或边缘检测,以便突出显示圆形区域。然后,通过设置适当的参数(如最小和最大轮廓面积阈值),找出所有可能的圆形轮廓。最后,你可以遍历找到的所有轮廓,并计算它们的边界框,选择其中外接矩形最大的那一个作为最外层的圆环。 以下是一个简化的步骤: 1. **预处理**: - 对图像进行灰度处理或色彩转换。 - 应用阈值处理(例如Otsu's thresholding或自适应阈值)以分离前景和背景。 2. **轮廓查找**: ```halcon ImageObject img; ThresholdStruct th_struct; // 创建阈值结构 Threshold(img, th_struct); // 进行阈值处理 Contours contours; // 定义轮廓存储容器 FindContours(img, contours, CONTOUR_APPROX_SIMPLE, THRESH_BINARY); ``` 3. **筛选最外层圆环**: - 计算每个轮廓的外接矩形(bounding box)。 - 根据矩形的大小或形状信息(比如周长、面积)判断哪个是最外层的。 ```halcon CircleObject circle; for (int i = 0; i < contours.GetNumOfObjects(); ++i) { Contour contour = contours[i]; FitCircle(contour, circle); BoundingBox bbox = GetBoundingBox(circle); // 检查并记录面积最大或矩形最接近正圆的轮廓 if (isOutermostCircle(circle, bbox)) { outermost_circle = circle; break; } } ``` 4. **验证和结果保存**: - 使用`outermost_circle`来获取最外层圆环的相关数据,如中心点坐标、半径等。 - 可能还需要进一步的滤波或确认操作,以防误识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值