时空高效的二值图像二元逻辑运算方法

文档序号:9327776阅读:491来源:国知局
时空高效的二值图像二元逻辑运算方法
【技术领域】
[0001] 本发明涉及图像处理、图像压缩、工业检测、农业生产与管理、交通、公共安全等应 用领域,具体是一种时间和空间性能高效的二值图像二元逻辑运算方法。
【背景技术】
[0002] 二值图像的逻辑运算是一种十分常见的图像操作,被广泛用于图像处理、图像压 缩以及工农业生产检测、交通与公共安全检测等广泛领域的对象识别和图像理解任务之 中。例如在图像处理中,可以利用二值图像构成不同的图像掩膜,然后通过这些掩膜的操作 来控制不同的感兴趣区域;或者结合二值图像区域的骨架,通过每个骨架点不同程度的膨 胀之后求并来重构原区域;等等。
[0003] -般情况下,二值图像的逻辑运算可通过逐像素进行同样的逻辑操作来完成,实 现十分简单,速度快,空间性能也可接受。但是,如果需要进行的逻辑运算次数很多,参与的 图像数量大,且每幅图像本身的尺寸也很大时,上述方法从时间和空间性能上而言便都存 在问题。例如现有的多种二值图像区域骨架去毛刺的方法,对于简化区域骨架结构,准确提 取区域拓扑特征而言具有重要意义,而这些方法中往往涉及不同骨架片段的多次重构及重 构后的二值图像的逻辑运算。此时,单纯地采用逐像素操作的方法,便会使得去毛刺过程变 得十分耗时,而且空间开销庞大。此外,很多二值图像往往采用类似游程编码的方法进行了 压缩,如果能够在不进行解压的情况下完成有关逻辑运算,也将带来时间和空间性能上的 好处。
[0004] 因此,有必要找到一种改进的二值图像二元逻辑运算的方法,能够达到速度更快、 空间开销更节约的效果,从而使得涉及大量大尺寸二值图像的多次逻辑运算得以高效完 成。

【发明内容】

[0005] 本发明所要解决的技术问题是针对大量大尺寸二值图像,提供一种能够快速完成 多次二值图像逻辑运算的方法。
[0006] 为解决上述技术问题,本发明提出的解决方案为:利用游程来压缩地表示参与运 算的二值图像及结果图像,利用游程之间的操作来等价地替代二值图像之间的逻辑运算, 从而实现空间开销更节约、执行速度更快的时空高效二值图像逻辑操作。具体包括以下步 骤:
[0007] i.以逐行或逐列的方式扫描参与运算的二值图像,这些二值图像应具有相同的高 度H和宽度W ;在本发明中,按逐列扫描的方式进行说明如下:对一幅二值图像,由左至右 扫描它的各列;对第i列,由上至下扫描各个像素点;如果第i列中不存在逻辑值为1的点 (白色点),则继续扫描下一列;否则,找出该列中所有的白色点构成的游程(即由若干个连 续的白色点构成的白色线段)run,run为游程结构体,包括Start、End和IsEmpty等三个字 段,每个游程的Start字段设为该游程起始像素的行号(图像最顶部一行的行号为0),End 字段设为该游程终止像素的行号+1,IsEmpty设为FALSE ;将第i列中的所有游程按从上至 小(即按游程的Start字段的值由小至大)的顺序加入列表1^中,称列表1^为游程列表; 将列号i和该列的游程列表1^组织为列结构体col,包括Index和RunList等两个字段,其 中Index = i,RunList = Li;当图像扫描完毕后,将所有存在白色点的列的列结构体按从左 至右(即列号从小至大)的顺序加入列表F中,称列表F为该幅二值图像对应的游程树;
[0008] ii.给定两个游程^和r B,定义两个游程之间的关系如下:
[0009] 若 rA. IsEmpty = TRUE,则 rA>s rB;
[0010] 否则若 rB. IsEmpty = TRUE,则 rA〈s rB;
[0011] 否则若 rA. End〈rB. Start,则 rA〈s rB;
[0012] 否则若 rA. End = rB. Start,则 rA〈A rB;
[0013] 否则若 rA. Start〈rB· Start 且 rA. End〈rB. End,则 rA〈。:rB;
[0014] 否则若 rA. Start〈rB· Start 且 rA. End = rB. End,则 rA< B rB;
[0015] 否则若 rA. Start〈rB· Start 且 rA. End>rB. End,则 rA〕厂B;
[0016] 否则若 rA. Start = rB. Start 且 rA. End〈rB. End,则 T rB;
[0017] 否则若 rA. Start = rB. Start 且 rA. End = rB. End,则 rA= r B;
[0018] 否则若 rA. Start = rB. Start 且 rA. End>rB. End,则 rA^ T rB;
[0019] 否则若 rA. End〈rB. End,则 γα c γβ;.
[0020] 否则若 rA. End = rB. End,则 rA彡 B rB;
[0021] 否则若 rA. Start〈rB· End 且;rA. End>rB. End,则 rA>。rB;
[0022] 否则若 rA. Start = rB. End,则 rA>A rB;
[0023] 否则 rA>s rB;
[0024] iii.将需要进行的二值图像逻辑操作转换为一系列二值图像的基本二元运算 (与运算AND、或运算0R、异或运算XOR以及逻辑差运算EXL);对于二值图像IjP I B,其逻 辑运算的结果是一幅相同大小的二值图像IR,其中每个像素点处的值由IjP IB相应位置上 的像素点值的逻辑运算所决定;对与运算AND,有Ir= Ia AND Ib,其中
[0025] IR(i, j) = IA(i, j)AND IB(i, j);
[0026] 对或运算OR,有Ir= Ia OR IB,其中
[0027] IR(i, j) = IA(i, j)〇R IB(i, j);
[0028] 对异或运算XOR,有Ir= Ia XOR Ib,其中
[0029] IR(i, j) = IA(i, j)X0R IB(i, j)
[0030] = [IA(i, j)AND IB(i, j)]0R NOT[IA(i, j)OR IB(i, j)];
[0031] 对逻辑差运算EXL,有Ir= Ia EXL Ib,其中
[0032] IR(i, j) = IA(i, j)EXL IB(i, j) = IA(i, j)AND NOT IB(i, j);
[0033] 各式中i、j的取值范围为0彡i〈H,0彡j〈W ;
[0034] iv.在各幅二值图像的游程树结构上,完成各个基本的二元逻辑运算,得到运算结 果游程树,并根据结果游程树重构出HXW大小的结果二值图像。
[0035] 所述的第iv步中二值图像的或运算方法(方法A),其具体步骤如下:
[0036] (A. 1)令FJP F汾别为进行或运算的二值图像I廊I W应的游程树;初始化一 个空的游程树结构Fr作为F JP F B的或运算的结果;令col JP col B分别为F JP F B的当前 列的列结构体,置colAS F冲的首列,置col B为F B中的首列;
[0037] (A. 2)若 CoIa和 col B均非空,则至(A. 3),否则至(A. 14);
[0038] (A. 3)若 colA. Index〈colB. Index,至(A. 4),否则至(A. 5);
[0039] (A. 4)将colA加入F1^ ;若col A已经是Fa的最后一列,则置col A为空,否则置 c〇lA为Fa中的下一列;至(A. 2);
[0040] (A. 5)若 colA. Index>colB. Index,至(A. 6),否则至(A. 7);
[0041] (A. 6)将colB加入F冲;若col B已经是F B的最后一列,则置col B为空,否则置 col# Fb中的下一列;至(A. 2);
[0042] (A. 7)初始化一个空的游程列表 Lr,令 La= col A. RunList,LB= col Β· RunList ;令 1^为L&中的首个游程,r L 的首个游程;置主操作数标志pivot = A ;置游程运算结 果r为空;
[0043] (A. 8)若 rA. IsEmpty = FALSE 或 rB. IsEmpty = FALSE,至(A. 9),否则至(A. 12);
[0044] (A. 9)按如下方式分情况处理:
[0045] 若 rA〈s rB,则置 r = rA,pivot = B ;
[0046] 若 rA〈A rB,则置 r 为空,rB. Start = rA. Start,pivot = B ;
[0047] 若 rA〈。:rB,则置 r 为空,rB. Start = rA. Start,pivot = B ;
[0048] 若 rA< B rB,则置 r = rA,pivot = NONE ;
[0049] 若Μ] Π?,则置 r 为空,pivot = A ;
[0050] 若 rA< τ rB,则置 r 为空,pivot = B ;
[0051] 若 rA= r B,则置 r = rA,pivot = NONE ;
[0052] 若 rA彡 T rB,则置 r 为空,pivot = A ;
[0053] 若.rA c 7?,则置 r 为空,pivot = B ;
[0054] 若 rA彡 B rB,则置 r = rB,pivot = NONE ;
[0055] 若 rA>。rB,则置 r 为空,rA. Start = rB. Start,pivot = A ;
[0056] 若 rA>A rB,则置 r 为空,rA. Start = rB. Start,pivot = A ;
[0057] 若 rA>s rB,则置 r = rB,pivot = A ;
[0058] (A. 10)若r不为空,则将r加入Lr;
[0059] (A. 11)读入新操作数,至(A. 8);
[0060] (A. 12)若 pivot = A 且;rA. IsEmpty = FALSE,则将 1^加入 L R;否则若 pivot = B 且 rB. IsEmpty = FALSE,则将 rB加入 L R;
[0061] (A. 13)产生结构体 colR,置 colR. Index = colA. Index,colR. RunList = Lr,将 colR加入FR;若col A已经是F A的最后一列,则置col A为空,否则置col &为Fa中的下一列;若col B已经是Fb的最后一列,则置colB为空,否则置CoIbSF b中的下一列;至(A. 2);
[0062] (A. 14)若colA不为空,则将剩余各列加入Fr;否则若col B不为空,则将Fb中 剩余各列加入Fr。
[0063] 所述的第iv步中二值图像的与运算方法(方法B),其具体步骤如下:
[0064] (B. 1)令FJP F B分别为进行与运算的二值图像I廊I B对应的游程树;初始化一 个空的游程树结构Fr作为F JP F B的与运算的结果;令col JP col B分别为F JP F B的当前 列的列结构体,置colA F冲的首列,置col B为F B中的首列;
[0065] (Β· 2)若coIa和col B均非空,则至(Β· 3),否则结束;
[0066] (Β. 3)若 colA. Index〈colB. Index,至(Β. 4),否则至(Β. 5
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1