Halcon 字符分割的一般方式

OCR识别的关键:字符分割

进行OCR字符识别之前,关键的一步在于图像预处理时,能够将字符很好的切分出来。
一般预处理包括:增强图像的灰度值scale_image()、阈值分割threshold()、区域连通connection()、开运算清除噪点opening_rectangle1()、形状选择select_shape()选择字符区域。

问题:通过以上步骤后,有些字符还是会粘连在一起,无法分割开,该如何操作?

方法一:针对当前粘连的字符,做进一步的腐蚀膨胀操作(opening_rectangle1())
缺陷:字符粘连区域细小时可操作性强,粘连区域较大时,腐蚀的同时也会使原字符区域受到影响,造成无法识别。

方法二:针对当前粘连的字符,做区域分割操作
1.计算当前粘连的字符区域的宽度
2.根据单个字符的最大宽度,估算出当前粘连的字符区域内包含多少个字符
3.根据包含的字符个数N,将粘连的字符区域等分成N个小区域。假设每个小区域内包含一个字符

缺陷:字符区域不是等间距分布,因此等间距去分割字符区域时,可能会造成区域内有字符部分区域的干扰。

部分操作如下:

sort_region (SelectedRegions2, SortedRegions1, 'character', 'true', 'row')
count_obj(  SortedRegions1,Count)
* 单个字符最大宽度
maxWidth:=135
* postion
rowResult :=[]
colResult:=[]
* result
classResult:=[]
read_ocr_class_mlp ('Pharma.omc', OCRHandle)
for index:=1 to Count by 1
    select_obj (SortedRegions1, ObjectSelected, index)
    *reduce_domain (ImageReduced4, ObjectSelected, ImageReduced)
    * 选择的Sigma值越大,将提取的区域越少
    *auto_threshold (ImageReduced, Regions1,2)
    *connection (Regions1, ConnectedRegions9)
    select_shape (ObjectSelected, SelectedRegions7, 'height', 'and', 100, 220)
    select_shape (SelectedRegions7, SelectedRegions1, 'area', 'and',2000, 27000)
    smallest_rectangle1 (SelectedRegions1, Row12, Column12, Row22, Column22)
    width :=Column22-Column12
    if (|width|==1 and   width>=maxWidth)
        * 计算粘连的字符个数
        num := width*1.0/maxWidth
        if(num-1>=0)
            count :=int(num+1)
        else
             count :=int(num)
        endif
        for index2 :=1 to count by 1
            gen_rectangle1 (Rectangle2, Row12, Column12+(index2-1)*width/count, Row22, Column12+index2*width/count)
            reduce_domain (SelectedRegions7, Rectangle2, ImageReduced2)
            connection (ImageReduced2, ConnectedRegions10)
            select_shape (ConnectedRegions10, SelectedRegions, 'height', 'and', 100, 185)
            do_ocr_multi_class_mlp (SelectedRegions, ImageEquHisto1, OCRHandle, Class2, Confidence2) 
            rowResult :=[rowResult,Row12]
            colResult :=[colResult,Column12+(index2-1)*width/2]
            classResult :=[classResult,Class2]
        endfor
    else
        do_ocr_multi_class_mlp (SelectedRegions1, ImageEquHisto1, OCRHandle, Class2, Confidence2) 
        rowResult :=[rowResult,Row12]
        colResult :=[colResult,Column12]
         classResult :=[classResult,Class2]
    endif
       
endfor

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Halcon字符投影分割是一种基于投影法的字符分割方法。首先需要将字符转化为二值图像,并进行二值化处理,然后根据字符的特点,提取垂直方向的投影信息。通过统计每一列中像素点的密度,从而可以得到字符在垂直方向上的投影特征。接着,通过阈值判断将字符的垂直投影划分为多个区域,并利用区域之间的空隙进行字符分割字符投影分割法能够适应多种字符分割需求,并且具有较高的准确率和稳定性。但仍然存在着一些问题,如对字符倾斜、噪声等情况的处理不够完善。随着深度学习技术的发展,越来越多的研究者开始探索基于深度学习的字符识别和分割方法,这可能会成为未来字符识别技术的发展趋势。 ### 回答2: Halcon是一款强大的机器视觉软件,拥有丰富的图像处理和分析功能。其中,字符投影分割是一种常用的字符图像处理方法,它利用字符在水平或垂直方向上的投影信息来对字符图像进行分割字符投影分割的原理是将字符图像按照水平或垂直方向进行投影,然后根据投影信息进行字符的划分,其中,水平投影可以获取字符在横向上的像素密度分布情况,垂直投影可以获取字符在纵向上的像素密度分布情况。通过分析字符在某一方向上的像素密度分布情况,可以识别出字符的边缘信息,进而完成字符分割。 在Halcon中,可以利用gen_region_contours或gen_contours方法来获取字符的轮廓信息。然后,分别对字符图像的水平和垂直方向进行投影,可以使用gen_rectangle1或shape\_trans方法来实现。投影信息可以由行投影和列投影两个矩阵表示。通过计算矩阵中的极值点或者峰值,可以精确地获取字符的边缘位置,实现字符分割。在使用字符投影分割方法时,需要对字符的字体大小和字体类型进行一定的调整。 总之,字符投影分割方法是一种简单而有效的字符图像处理方法,适用于各种语言字符的识别和分割。在使用Halcon进行字符处理时,可以通过调整字符字体大小和类型、优化字符轮廓等方式来提高字符识别和分割的准确性。 ### 回答3: Halcon字符投影分割是一种常用的图像处理技术,可以用于将图像中的字符或者数字进行分割。该技术的基本思想是利用字符或数字在水平方向和垂直方向上的显著性差异,获取其特征值,并据此进行字符或数字的分割。 具体实现时,通过将图像进行二值化处理,将字符和背景分离。然后,利用水平方向和垂直方向的投影运算,得到字符在该方向上的像素值分布情况。通过对投影曲线进行峰谷分析,可以获取到字符的起始点和终止点,从而确定字符的边界,实现字符分割。同时,为了保证分割的准确性和稳定性,一般会采用滤波等降噪技术,以及形态学操作,去除噪点和不必要的细节。 该技术的优点在于处理速度快、可靠性高,在OCR、自动识别等领域有广泛应用。但是,该技术也存在一些缺点,如无法识别非线性字符、对光照等干扰较为敏感。因此,在实际应用中需要综合考虑不同情况下的实际效果,并结合其他技术进行补充和完善,以实现更加高效可靠的字符分割

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值