隶属于:
C:\Users\Public\Documents\MVTec\HALCON-23.05-Progress\examples\hdevelop\OCR\Segmentation
此例,主要是用text_line_orientation获取字符角度,并转正之后,用segment_characters分割字符,用select_characters筛选字符。
算子说明:
KIMI
1、text_line_orientation
在Halcon中,text_line_orientation是一个用于确定文本行或段落方向的算子。以下是其功能和参数的详细说明:
功能
text_line_orientation用于计算单个文本行或段落相对于水平图像轴的方向。通过计算文本行的旋转角度,可以对图像进行旋转或仿射变换,使文本行水平化,从而简化OCR应用中的字符分割。
参数
输入参数:
Region:指定文本行所在的图像区域,可以是一个矩形区域或整个图像。该区域仅用于减少工作面积。
Image:输入图像。
CharHeight:指定文本行的大约高度。
OrientationFrom:文本行的最小旋转角度。
OrientationTo:文本行的最大旋转角度。
输出参数:
OrientationAngle:计算得到的文本行旋转角度。
使用示例
以下是一个简单的使用示例:
hdev复制
read_image(Image, ‘letters’)
text_line_orientation(Image, Image, 50, rad(-80), rad(80), OrientationAngle)
rotate_image(Image, ImageRotate, -OrientationAngle/rad(180)*180, ‘constant’)
在该示例中,text_line_orientation计算了文本行的旋转角度,并通过rotate_image将图像旋转到水平方向。
注意事项
如果要确定单个文本行的方向,OrientationFrom和OrientationTo的范围应为-pi/4到pi/4。
参数Region仅用于限制工作区域,文本行由text_line_orientation算子本身分割。
搜索区域可以通过OrientationFrom和OrientationTo限制,这也会对算子的运行时间产生影响。
2、segment_characters
在Halcon中,segment_characters 是一个用于从图像中分割出单个字符的算子。它通常用于光学字符识别(OCR)任务中,将文本行中的字符逐一提取出来,以便后续进行字符识别。以下是关于 segment_characters 算子的详细说明:
功能
segment_characters 的主要功能是从给定的文本行图像中分割出单个字符。它通过分析字符的连通性、形状和间距,将字符从文本行中分离出来,为后续的字符识别做准备。
参数
输入参数
Image:
类型:单通道图像(灰度图或二值图)
描述:包含文本行的输入图像。
Region:
类型:区域
描述:指定文本行所在的区域。如果文本行已经在图像中被定位,可以通过区域来限定分割的范围。
CharHeight:
类型:整数
描述:文本行中字符的大致高度。这个参数用于帮助算子更好地识别字符的大小。
CharWidth:
类型:整数
描述:文本行中字符的大致宽度。这个参数用于帮助算子更好地识别字符的大小。
MinContrast:
类型:整数
描述:字符与背景之间的最小对比度。这个参数用于过滤掉对比度过低的区域,避免误分割。
MinCharArea:
类型:整数
描述:字符的最小面积。这个参数用于过滤掉面积过小的区域,避免误分割。
MaxCharArea:
类型:整数
描述:字符的最大面积。这个参数用于过滤掉面积过大的区域,避免误分割。
MinCharWidth:
类型:整数
描述:字符的最小宽度。这个参数用于过滤掉宽度过小的区域,避免误分割。
MaxCharWidth:
类型:整数
描述:字符的最大宽度。这个参数用于过滤掉宽度过大的区域,避免误分割。
MinCharHeight:
类型:整数
描述:字符的最小高度。这个参数用于过滤掉高度过小的区域,避免误分割。
MaxCharHeight:
类型:整数
描述:字符的最大高度。这个参数用于过滤掉高度过大的区域,避免误分割。
MinCharRatio:
类型:实数
描述:字符的最小宽高比。这个参数用于过滤掉宽高比异常的区域,避免误分割。
MaxCharRatio:
类型:实数
描述:字符的最大宽高比。这个参数用于过滤掉宽高比异常的区域,避免误分割。
MinCharOccupation:
类型:实数
描述:字符的最小填充率(前景像素占字符区域的比例)。这个参数用于过滤掉填充率过低的区域,避免误分割。
MaxCharOccupation:
类型:实数
描述:字符的最大填充率(前景像素占字符区域的比例)。这个参数用于过滤掉填充率过高的区域,避免误分割。
MinCharRoundness:
类型:实数
描述:字符的最小圆度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharRoundness:
类型:实数
描述:字符的最大圆度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharCompactness:
类型:实数
描述:字符的最小紧凑度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharCompactness:
类型:实数
描述:字符的最大紧凑度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharElongation:
类型:实数
描述:字符的最小延伸率(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharElongation:
类型:实数
描述:字符的最大延伸率(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharSolidity:
类型:实数
描述:字符的最小实心度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharSolidity:
类型:实数
描述:字符的最大实心度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharConvexity:
类型:实数
描述:字符的最小凸性(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharConvexity:
类型:实数
描述:字符的最大凸性(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharEulerNumber:
类型:整数
描述:字符的最小欧拉数(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharEulerNumber:
类型:整数
描述:字符的最大欧拉数(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharHoleNumber:
类型:整数
描述:字符的最小孔洞数(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharHoleNumber:
类型:整数
描述:字符的最大孔洞数(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharBranchNumber:
类型:整数
描述:字符的最小分支数(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharBranchNumber:
类型:整数
描述:字符的最大分支数(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharPerimeter:
类型:整数
描述:字符的最小周长。这个参数用于过滤掉周长过小的区域,避免误分割。
MaxCharPerimeter:
类型:整数
描述:字符的最大周长。这个参数用于过滤掉周长过大的区域,避免误分割。
MinCharAspect:
类型:实数
描述:字符的最小纵横比(宽度与高度的比值)。这个参数用于过滤掉纵横比异常的区域,避免误分割。
MaxCharAspect:
类型:实数
描述:字符的最大纵横比(宽度与高度的比值)。这个参数用于过滤掉纵横比异常的区域,避免误分割。
MinCharRectangularity:
类型:实数
描述:字符的最小矩形度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharRectangularity:
类型:实数
描述:字符的最大矩形度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharCircularity:
类型:实数
描述:字符的最小圆形度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharCircularity:
类型:实数
描述:字符的最大圆形度(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharConvexityDefect:
类型:实数
描述:字符的最小凸性缺陷(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MaxCharConvexityDefect:
类型:实数
描述:字符的最大凸性缺陷(形状因子)。这个参数用于过滤掉形状异常的区域,避免误分割。
MinCharSolidityDefect:
类型:实数
描述
3、select_characters
在Halcon中,select_characters 算子用于从给定的文本行区域中选择字符。它通常用于OCR(光学字符识别)任务中,对分割后的字符进行筛选和优化,以便后续进行字符识别。以下是关于 select_characters 算子的详细说明:
功能
select_characters 算子的主要功能是从文本行区域中选择字符,同时可以根据多种参数对字符进行筛选和优化。它可以处理字符的碎片化问题,连接分割的字符碎片,并过滤掉不符合条件的区域。
参数
输入参数
Region (input_object):
类型:区域数组
描述:包含文本行的区域,通常是通过 segment_characters 算子分割得到的字符区域。
DotPrint (input_control):
类型:字符串
描述:是否检测点阵打印字符。
默认值:‘false’
可选值:‘false’, ‘true’
CharWidth (input_control):
类型:整数数组
描述:字符的宽度。
默认值:25
限制:CharWidth >= 1
CharHeight (input_control):
类型:整数数组
描述:字符的高度。
默认值:25
限制:CharHeight >= 1
FragmentDistance (input_control):
类型:字符串
描述:字符碎片之间的距离。
默认值:‘medium’
可选值:‘narrow’, ‘medium’, ‘wide’
ConnectFragments (input_control):
类型:字符串
描述:是否连接字符碎片。
默认值:‘false’
可选值:‘false’, ‘true’
ClutterSizeMax (input_control):
类型:整数
描述:最大杂乱区域的大小。
默认值:0
限制:0 <= ClutterSizeMax
StopAfter (input_control):
类型:字符串
描述:在哪个步骤停止执行。
默认值:‘completion’
可选值:‘completion’, ‘step1_select_candidates’, ‘step2_partition_characters’, ‘step3_connect_fragments’, ‘step4_select_characters’
输出参数
RegionCharacters (output_object):
类型:区域数组
描述:筛选后的字符区域。
示例代码
以下是一个使用 select_characters 算子的示例代码:
hdev复制
for Index := 1 to 5 by 1
read_image (Image, ‘dot_print_rotated/dot_print_rotated_’+Index$‘02d’)
text_line_orientation (Image, Image, 50, rad(-30), rad(30), OrientationAngle)
rotate_image (Image, ImageRotate, deg(-OrientationAngle), ‘constant’)
segment_characters (ImageRotate, ImageRotate, ImageForeground,
RegionForeground, ‘local_auto_shape’, ‘false’, ‘false’, ‘medium’,
25, 25, 0, 10, UsedThreshold)
select_characters (RegionForeground, RegionCharacters, ‘true’, ‘ultra_light’,
[60,1,100], [60,1,100], ‘false’, ‘false’, ‘none’, ‘true’, ‘wide’, ‘true’, 0,
‘completion’)
endfor
参数说明
FragmentDistance:影响字符碎片的连接。如果连接过多,可以设置为 ‘narrow’ 或 ‘medium’;如果需要连接更多碎片,可以设置为 ‘medium’ 或 ‘wide’。
ConnectFragments:如果提取的符号是碎片化的(即一个符号被分割成多个区域),可以将此参数设置为 ‘true’。
ClutterSizeMax:如果提取的字符包含杂乱的小区域,可以增加此值;如果符号的部分缺失,可以减小此值。
StopAfter:如果算子没有产生预期结果,可以使用此参数在特定步骤停止执行,并查看中间结果。
通过合理设置这些参数,select_characters 算子可以有效地优化字符分割的结果,提高OCR识别的准确性和效率。
读图
图转正
前景图
segment_characters (ImageRotate, ImageRotate, ImageForeground, RegionForeground,
‘local_auto_shape’, ‘false’, ‘true’, ‘medium’, 25, 25, 0, 10, UsedThreshold)
分割字符
segment_characters — 在给定图像区域内分割字符。
select_characters (RegionForeground, RegionCharacters, 'true', 'ultra_light',\
60, 60, 'false', 'false', 'none', 'true', 'wide', 'true', 0, 'completion')
筛选字符
dev_update_window ('off')
dev_update_var ('off')
dev_update_pc ('off')
dev_close_window ()
dev_open_window (0, 0, 500, 480, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_colored (12)
dev_set_draw ('margin')
for J := 1 to 5 by 1
read_image (Image, 'dot_print_rotated/dot_print_rotated_' + J$'02d')
text_line_orientation (Image, Image, 50, rad(-30), rad(30), OrientationAngle)
rotate_image (Image, ImageRotate, -OrientationAngle / rad(180) * 180, 'constant')
segment_characters (ImageRotate, ImageRotate, ImageForeground, RegionForeground, \
'local_auto_shape', 'false', 'true', 'medium', 25, 25, 0, 10, UsedThreshold)
select_characters (RegionForeground, RegionCharacters, 'true', 'ultra_light',\
60, 60, 'false', 'false', 'none', 'true', 'wide', 'true', 0, 'completion')
dev_clear_window ()
dev_display (ImageRotate)
dev_display (RegionCharacters)
if (J < 5)
disp_continue_message (WindowHandle, 'black', 'true')
endif
stop ()
endfor