图像算法-二值图像 目标标记 连通区域

本文详细介绍了二值图像处理中的一种目标标记方法,通过创建标记矩阵、建立映射表和优化标记,实现连通区域的目标标记。通过三个实例展示算法步骤,便于理解和应用。
摘要由CSDN通过智能技术生成

OCR处理主要包括图像分割,目标标记,目标识别三步。今天主要详细介绍一种基于连通区域的的目标标记方法,将给出算法步骤,并举例进行说明。

算法步骤

假设当前图像矩阵为F, 标记矩阵为L,(i,j)为图像中任意一点的坐标,LabelNum为当前标记数。

一 创建标记矩阵

对图像按行遍历,当出现目标点,即 F ( i , j − 1 ) = 0 , F ( i , j ) = 1 F(i,j-1)=0, F(i,j)=1 F(i,j1)=0,F(i,j)=1时:
则以 ( i , j ) (i, j) (i,j)为起点,继续向右遍历,当满足以下条件时结束遍历:
1)出现背景点: F ( i , k ) = 1 , F ( i , k + 1 ) = 0 F(i,k)=1, F(i,k+1)=0 F(i,k)=1,F(i,k+1)=0
2)行尾: F ( i , k ) = 1 , k + 1 = I m a g e W i d t h F(i,k)=1, k+1=ImageWidth F(i,k)=1,k+1=ImageWidth

对于当前第 i i i行得到的连通区域 { ( i , y ) ∣ y ∈ ( j , k ) } \{(i,y)| y \in (j, k)\} { (i,y)y(j,k)},其所对应的上一行的连通区域为 { ( i − 1 , y ) ∣ y ∈ ( j − 1 , k + 1 ) } \{(i-1,y)| y \in (j-1, k+1)\} { (i1,y)y(j1,k+1)},对 { ( i − 1 , y ) ∣ y ∈ ( j − 1 , k + 1 ) } \{(i-1,y)| y \in (j-1, k+1)\} { (i1,y)y(j1,k+1)}进行遍历:
1)如果当前行为图像的第一行:$i=0 $ ;
2)如果当前行为目标的起始行: F ( i − 1 , y ) = 0 , y ∈ ( j − 1 , k + 1 ) F(i-1, y)=0, y \in(j-1, k+1) F(i1,y)=0,y(j1,k+1)
则将当前标记数加1( L a b e l N u m + + LabelNum++ LabelNum++),对 { ( i , y ) ∣ y ∈ ( j , k ) } \{(i,y)| y \in (j, k)\} { (i,y)y(j,k)}进行标记,并记录第i行与上一行连通区域的标记数,记为 [ L a b e l N u m , L a b e l N u m ] [LabelNum, LabelNum] [LabelNum,LabelNum]
3)如果第i行为目标的中间行,则找到 { ( i − 1 , y ) ∣ y ∈ ( j − 1 , k + 1 ) } \{(i-1,y)| y \in (j-1, k+1)\} { (i1,y)y(j1,k+1)}内的所有连通区域,以第一个连通区域的标记数对 { ( i , y ) ∣ y ∈ ( j , k ) } \{(i,y)| y \in (j, k)\} { (i,y)y(j,k)}进行标记,并记录所有连通区域的的标记数,比如: [ L a b e l N u m , L a b e l N u m ] , [ L a b e l N u m , L a b e l N u m 2 ] , [ L a b e l N u m , L a b e l N u m 3 ] [LabelNum, LabelNum], [LabelNum, LabelNum2], [LabelNum, LabelNum3] [LabelNum,LabelNum],[LabelNum,LabelNum2][LabelNum,LabelNum3]

二 创建标记数映射表

对所有标记数记录进行遍历,假设对于任意一个标记数记录 [ L a b e l N u m c u r , L a b e l N u m l a s t ] [LabelNum_{cur}, LabelNum_{last}] [LabelNumcur,LabelNumlast]
1)如果 L a b e l N u m c u r = L a b e l N u m l a s t LabelNum_{cur} = LabelNum_{last} LabelNumcur=LabelNumlast,则 M a p [ L a b e l N u m c u r ] = L a b e l N u m c u r Map[LabelNum_{cur}] = LabelNum_{cur} Map[LabelNumcur]=LabelNumcur
2)如果 L a b e l N u m c u r ≠ L a b e l N u m l a s t LabelNum_{cur} \neq LabelNum_{last} LabelNumcur̸=LabelNumlast,则 M a p [ L a b e l N u m c u r ] = L a b e l N u m l a s t Map[LabelNum_{cur}] = LabelNum_{last} Map[LabelNumcur]=LabelNumlast,或者 M a p [ L a b e l N u m l a s t ] = L a b e l N u m c u r Map[LabelNum_{last}] = LabelNum_{cur} Map[LabelNumlast

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值