CN105046632A - 时空高效的二值图像二元逻辑运算方法 - Google Patents
时空高效的二值图像二元逻辑运算方法 Download PDFInfo
- Publication number
- CN105046632A CN105046632A CN201510364790.6A CN201510364790A CN105046632A CN 105046632 A CN105046632 A CN 105046632A CN 201510364790 A CN201510364790 A CN 201510364790A CN 105046632 A CN105046632 A CN 105046632A
- Authority
- CN
- China
- Prior art keywords
- col
- pivot
- swimming
- empty
- distance
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 230000009182 swimming Effects 0.000 claims description 124
- 238000010276 construction Methods 0.000 claims description 12
- 201000007094 prostatitis Diseases 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 12
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000012271 agricultural production Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000009776 industrial production Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 208000034630 Calculi Diseases 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
- 208000008281 urolithiasis Diseases 0.000 description 1
Landscapes
- Image Processing (AREA)
Abstract
本发明公开了一种基于游程编码的、时空高效的二值图像基本二元逻辑运算方法,能用更少的空间和时间开销完成二值图像的或、与、异或和逻辑差等四种基本逻辑运算及其组合。参与运算的二值图像经游程编码被表达为等价的游程树结构;定义了两个游程间的多种位置关系,并按不同的位置关系确定了相应的游程操作规则,可等价地完成游程对应二值图像的基本逻辑运算;将复杂逻辑运算分解为若干基本二元逻辑运算,并应用相应的游程操作规则得到运算结果二值图像的游程树;最后由游程树重建出结果二值图像。本发明通过游程编码,压缩了表示二值图像的空间开销,并将多个串行的像素逻辑操作压缩为一个简单的游程操作,从而显著减少了方法的空间和时间开销。
Description
技术领域
本发明涉及图像处理、图像压缩、工业检测、农业生产与管理、交通、公共安全等应用领域,具体是一种时间和空间性能高效的二值图像二元逻辑运算方法。
背景技术
二值图像的逻辑运算是一种十分常见的图像操作,被广泛用于图像处理、图像压缩以及工农业生产检测、交通与公共安全检测等广泛领域的对象识别和图像理解任务之中。例如在图像处理中,可以利用二值图像构成不同的图像掩膜,然后通过这些掩膜的操作来控制不同的感兴趣区域;或者结合二值图像区域的骨架,通过每个骨架点不同程度的膨胀之后求并来重构原区域;等等。
一般情况下,二值图像的逻辑运算可通过逐像素进行同样的逻辑操作来完成,实现十分简单,速度快,空间性能也可接受。但是,如果需要进行的逻辑运算次数很多,参与的图像数量大,且每幅图像本身的尺寸也很大时,上述方法从时间和空间性能上而言便都存在问题。例如现有的多种二值图像区域骨架去毛刺的方法,对于简化区域骨架结构,准确提取区域拓扑特征而言具有重要意义,而这些方法中往往涉及不同骨架片段的多次重构及重构后的二值图像的逻辑运算。此时,单纯地采用逐像素操作的方法,便会使得去毛刺过程变得十分耗时,而且空间开销庞大。此外,很多二值图像往往采用类似游程编码的方法进行了压缩,如果能够在不进行解压的情况下完成有关逻辑运算,也将带来时间和空间性能上的好处。
因此,有必要找到一种改进的二值图像二元逻辑运算的方法,能够达到速度更快、空间开销更节约的效果,从而使得涉及大量大尺寸二值图像的多次逻辑运算得以高效完成。
发明内容
本发明所要解决的技术问题是针对大量大尺寸二值图像,提供一种能够快速完成多次二值图像逻辑运算的方法。
为解决上述技术问题,本发明提出的解决方案为:利用游程来压缩地表示参与运算的二值图像及结果图像,利用游程之间的操作来等价地替代二值图像之间的逻辑运算,从而实现空间开销更节约、执行速度更快的时空高效二值图像逻辑操作。具体包括以下步骤:
i.以逐行或逐列的方式扫描参与运算的二值图像,这些二值图像应具有相同的高度H和宽度W;在本发明中,按逐列扫描的方式进行说明如下:对一幅二值图像,由左至右扫描它的各列;对第i列,由上至下扫描各个像素点;如果第i列中不存在逻辑值为1的点(白色点),则继续扫描下一列;否则,找出该列中所有的白色点构成的游程(即由若干个连续的白色点构成的白色线段)run,run为游程结构体,包括Start、End和IsEmpty等三个字段,每个游程的Start字段设为该游程起始像素的行号(图像最顶部一行的行号为0),End字段设为该游程终止像素的行号+1,IsEmpty设为FALSE;将第i列中的所有游程按从上至小(即按游程的Start字段的值由小至大)的顺序加入列表Li中,称列表Li为游程列表;将列号i和该列的游程列表Li组织为列结构体col,包括Index和RunList等两个字段,其中Index=i,RunList=Li;当图像扫描完毕后,将所有存在白色点的列的列结构体按从左至右(即列号从小至大)的顺序加入列表F中,称列表F为该幅二值图像对应的游程树;
ii.给定两个游程rA和rB,定义两个游程之间的关系如下:
若rA.IsEmpty=TRUE,则rA>SrB;
否则若rB.IsEmpty=TRUE,则rA<SrB;
否则若rA.End<rB.Start,则rA<SrB;
否则若rA.End=rB.Start,则rA<ArB;
否则若rA.Start<rB.Start且rA.End<rB.End,则rA<OrB;
否则若rA.Start<rB.Start且rA.End=rB.End,则rA≤BrB;
否则若rA.Start<rB.Start且rA.End>rB.End,则
否则若rA.Start=rB.Start且rA.End<rB.End,则rA≤TrB;
否则若rA.Start=rB.Start且rA.End=rB.End,则rA=rB;
否则若rA.Start=rB.Start且rA.End>rB.End,则rA≥TrB;
否则若rA.End<rB.End,则
否则若rA.End=rB.End,则rA≥BrB;
否则若rA.Start<rB.End且rA.End>rB.End,则rA>OrB;
否则若rA.Start=rB.End,则rA>ArB;
否则rA>SrB;
iii.将需要进行的二值图像逻辑操作转换为一系列二值图像的基本二元运算(与运算AND、或运算OR、异或运算XOR以及逻辑差运算EXL);对于二值图像IA和IB,其逻辑运算的结果是一幅相同大小的二值图像IR,其中每个像素点处的值由IA和IB相应位置上的像素点值的逻辑运算所决定;对与运算AND,有IR=IAANDIB,其中
IR(i,j)=IA(i,j)ANDIB(i,j);
对或运算OR,有IR=IAORIB,其中
IR(i,j)=IA(i,j)ORIB(i,j);
对异或运算XOR,有IR=IAXORIB,其中
IR(i,j)=IA(i,j)XORIB(i,j)
=[IA(i,j)ANDIB(i,j)]ORNOT[IA(i,j)ORIB(i,j)];
对逻辑差运算EXL,有IR=IAEXLIB,其中
IR(i,j)=IA(i,j)EXLIB(i,j)=IA(i,j)ANDNOTIB(i,j);
各式中i、j的取值范围为0≤i<H,0≤j<W;
iv.在各幅二值图像的游程树结构上,完成各个基本的二元逻辑运算,得到运算结果游程树,并根据结果游程树重构出H×W大小的结果二值图像。
所述的第iv步中二值图像的或运算方法(方法A),其具体步骤如下:
(A.1)令FA和FB分别为进行或运算的二值图像IA和IB对应的游程树;初始化一个空的游程树结构FR作为FA和FB的或运算的结果;令colA和colB分别为FA和FB的当前列的列结构体,置colA为FA中的首列,置colB为FB中的首列;
(A.2)若colA和colB均非空,则至(A.3),否则至(A.14);
(A.3)若colA.Index<colB.Index,至(A.4),否则至(A.5);
(A.4)将colA加入FR中;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;至(A.2);
(A.5)若colA.Index>colB.Index,至(A.6),否则至(A.7);
(A.6)将colB加入FR中;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至(A.2);
(A.7)初始化一个空的游程列表LR,令LA=colA.RunList,LB=colB.RunList;令rA为LA中的首个游程,rB为LB中的首个游程;置主操作数标志pivot=A;置游程运算结果r为空;
(A.8)若rA.IsEmpty=FALSE或rB.IsEmpty=FALSE,至(A.9),否则至(A.12);
(A.9)按如下方式分情况处理:
若rA<SrB,则置r=rA,pivot=B;
若rA<ArB,则置r为空,rB.Start=rA.Start,pivot=B;
若rA<OrB,则置r为空,rB.Start=rA.Start,pivot=B;
若rA≤BrB,则置r=rA,pivot=NONE;
若则置r为空,pivot=A;
若rA≤TrB,则置r为空,pivot=B;
若rA=rB,则置r=rA,pivot=NONE;
若rA≥TrB,则置r为空,pivot=A;
若则置r为空,pivot=B;
若rA≥BrB,则置r=rB,pivot=NONE;
若rA>OrB,则置r为空,rA.Start=rB.Start,pivot=A;
若rA>ArB,则置r为空,rA.Start=rB.Start,pivot=A;
若rA>SrB,则置r=rB,pivot=A;
(A.10)若r不为空,则将r加入LR;
(A.11)读入新操作数,至(A.8);
(A.12)若pivot=A且rA.IsEmpty=FALSE,则将rA加入LR;否则若pivot=B且rB.IsEmpty=FALSE,则将rB加入LR;
(A.13)产生结构体colR,置colR.Index=colA.Index,colR.RunList=LR,将colR加入FR;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至(A.2);
(A.14)若colA不为空,则将FA中剩余各列加入FR;否则若colB不为空,则将FB中剩余各列加入FR。
所述的第iv步中二值图像的与运算方法(方法B),其具体步骤如下:
(B.1)令FA和FB分别为进行与运算的二值图像IA和IB对应的游程树;初始化一个空的游程树结构FR作为FA和FB的与运算的结果;令colA和colB分别为FA和FB的当前列的列结构体,置colA为FA中的首列,置colB为FB中的首列;
(B.2)若colA和colB均非空,则至(B.3),否则结束;
(B.3)若colA.Index<colB.Index,至(B.4),否则至(B.5);
(B.4)若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;至(B.2);
(B.5)若colA.Index>colB.Index,至(B.6),否则至(B.7);
(B.6)若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至(B.2);
(B.7)初始化一个空的游程列表LR,令LA=colA.RunList,LB=colB.RunList;令rA为LA中的首个游程,rB为LB中的首个游程;置主操作数标志pivot=A;置游程运算结果r为空;
(B.8)若rA.IsEmpty=FALSE或rB.IsEmpty=FALSE,至(B.9),否则至(B.12);
(B.9)按如下方式分情况处理:
若rA<SrB,则置r为空,pivot=B;
若rA<ArB,则置r为空,pivot=B;
若rA<OrB,则置r.Start=rB.Start,r.End=rA.End,rB.Start=rA.End,pivot=B;
若rA≤BrB,则置r=rB,pivot=NONE;
若则置r=rB,rA.Start=rB.End,pivot=A;
若rA≤TrB,则置r=rA,rB.Start=rA.End,pivot=B;
若rA=rB,则置r=rA,pivot=NONE;
若rA≥TrB,则置r=rB,rA.Start=rB.End,pivot=A;
若则置r=rA,rB.Start=rA.End,pivot=B;
若rA≥BrB,则置r=rA,pivot=NONE;
若rA>OrB,则置r.Start=rA.Start,r.End=rB.End,rA.Start=rB.End,pivot=A;
若rA>ArB,则置r为空,pivot=A;
若rA>SrB,则置r为空,pivot=A;
(B.10)若r不为空,则将r加入LR;
(B.11)读入新操作数,至(B.8);
(B.12)产生结构体colR,置colR.Index=colA.Index,colR.RunList=LR,将colR加入FR;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至(B.2)。
所述的第iv步中二值图像的异或运算方法(方法C),其具体步骤如下:
(C.1)令FA和FB分别为进行异或运算的二值图像IA和IB对应的游程树;初始化一个空的游程树结构FR作为FA和FB的异或运算的结果;令colA和colB分别为FA和FB的当前列的列结构体,置colA为FA中的首列,置colB为FB中的首列;
(C.2)若colA和colB均非空,则至(C.3),否则至(C.14);
(C.3)若colA.Index<colB.Index,至(C.4),否则至(C.5);
(C.4)将colA加入FR中;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;至(C.2);
(C.5)若colA.Index>colB.Index,至(C.6),否则至(C.7);
(C.6)将colB加入FR中;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至(C.2);
(C.7)初始化一个空的游程列表LR,令LA=colA.RunList,LB=colB.RunList;令rA为LA中的首个游程,rB为LB中的首个游程;置主操作数标志pivot=A;置游程运算结果r为空;
(C.8)若rA.IsEmpty=FALSE或rB.IsEmpty=FALSE,至(C.9),否则至(C.12);
(C.9)按如下方式分情况处理:
若rA<SrB,则置r=rA,pivot=B;
若rA<ArB,则置r为空,rB.Start=rA.Start,pivot=B;
若rA<OrB,则置r.Start=rA.Start,r.End=rB.Start,rB.Start=rA.End,pivot=B;
若rA≤BrB,则置r.Start=rA.Start,r.End=rB.Start,pivot=NONE;
若则置r.Start=rA.Start,r.End=rB.Start,rA.Start=rB.End,pivot=A;
若rA≤TrB,则置r为空,rB.Start=rA.End,pivot=B;
若rA=rB,则置r为空,pivot=NONE;
若rA≥TrB,则置r为空,rA.Start=rB.End,pivot=A;
若则置r.Start=rB.Start,r.End=rA.Start,rB.Start=rA.End,pivot=B;
若rA≥BrB,则置r.Start=rB.Start,r.End=rA.Start,pivot=NONE;
若rA>OrB,则置r.Start=rB.Start,r.End=rA.Start,rA.Start=rB.End,pivot=A;
若rA>ArB,则置r为空,rA.Start=rB.Start,pivot=A;
若rA>SrB,则置r=rB,pivot=A;
(C.10)若r不为空,则将r加入LR;
(C.11)读入新操作数,至(C.8);
(C.12)若pivot=A且rA.IsEmpty=FALSE,则将rA加入LR;否则若pivot=B且rB.IsEmpty=FALSE,则将rB加入LR;
(C.13)产生结构体colR,置colR.Index=colA.Index,colR.RunList=LR,将colR加入FR;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至(C.2);
(C.14)若colA不为空,则将FA中剩余各列加入FR;否则若colB不为空,则将FB中剩余各列加入FR。
所述的第iv步中二值图像的逻辑差运算方法(方法D),其具体步骤如下:
(D.1)令FA和FB分别为进行逻辑差运算的二值图像IA和IB对应的游程树;初始化一个空的游程树结构FR作为FA和FB的逻辑差运算的结果;令colA和colB分别为FA和FB的当前列的列结构体,置colA为FA中的首列,置colB为FB中的首列;
(D.2)若colA和colB均非空,则至(D.3),否则至(D.14);
(D.3)若colA.Index<colB.Index,至(D.4),否则至(D.5);
(D.4)将colA加入FR中;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;至(D.2);
(D.5)若colA.Index>colB.Index,至(D.6),否则至(D.7);
(D.6)若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至(D.2);
(D.7)初始化一个空的游程列表LR,令LA=colA.RunList,LB=colB.RunList;令rA为LA中的首个游程,rB为LB中的首个游程;置主操作数标志pivot=A;置游程运算结果r为空;
(D.8)若rA.IsEmpty=FALSE或rB.IsEmpty=FALSE,至(D.9),否则至(D.12);
(D.9)按如下方式分情况处理:
若rA<SrB,则置r=rA,pivot=B;
若rA<ArB,则置r=rA,pivot=B;
若rA<OrB,则置r.Start=rA.Start,r.End=rB.Start,rB.Start=rA.End,pivot=B;
若rA≤BrB,则置r.Start=rA.Start,r.End=rB.Start,pivot=NONE;
若则置r.Start=rA.Start,r.End=rB.Start,rA.Start=rB.End,pivot=A;
若rA≤TrB,则置r为空,rB.Start=rA.End,pivot=B;
若rA=rB,则置r为空,pivot=NONE;
若rA≥TrB,则置r为空,rA.Start=rB.End,pivot=A;
若则置r为空,rB.Start=rA.End,pivot=B;
若rA≥BrB,则置r为空,pivot=NONE;
若rA>OrB,则置r为空,rA.Start=rB.End,pivot=A;
若rA>ArB,则置r为空,pivot=A;
若rA>SrB,则置r为空,pivot=A;
(D.10)若r不为空,则将r加入LR;
(D.11)读入新操作数,至(D.8);
(D.12)若pivot=A且rA.IsEmpty=FALSE,则将rA加入LR;
(D.13)产生结构体colR,置colR.Index=colA.Index,colR.RunList=LR,将colR加入FR;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至(D.2);
(D.14)若colA不为空,则将FA中剩余各列加入FR。
所述的第(A.11)、(B.11)、(C.11)、(D.11)步中的新操作数读取方法(方法E),其具体步骤如下:
(E.1)若pivot=A,至(E.2);否则至(E.3);
(E.2)若LB中所有游程已被遍历完成,则置rB.IsEmpty=TRUE后返回;否则置rB为LB中的下一个游程后返回;
(E.3)若pivot=B,至(E.4);否则至(E.5);
(E.4)若LA中所有游程已被遍历完成,则置rA.IsEmpty=TRUE后返回;否则置rA为LA中的下一个游程后返回;
(E.5)若LA中所有游程已被遍历完成,则置rA.IsEmpty=TRUE;否则置rA为LA中的下一个游程;
(E.6)若LB中所有游程已被遍历完成,则置rB.IsEmpty=TRUE;否则置rB为LB中的下一个游程;
(E.7)置pivot=A。
综上所述,本发明所提供的方法,能够通过游程压缩方式,在减少二值图像存储的空间开销的同时,通过两个游程的简单运算替代大量图像像素点的串行逻辑操作,从而加快运算速度,能够使大量大尺寸二值图像的多次逻辑运算得到高效地执行。
附图说明
图1为本发明中所提方法的总体流程框图;
图2为所述二值图像游程的定义示意图;
图3为所述二值图像游程树的数据结构示意图;
图4为针对图2给出的示例二值图像游程树的结构示意图;
图5为所述两个游程之间的关系的定义示意图;
图6为所述的实现或运算的游程操作原理示意图;
图7为所述的实现与运算的游程操作原理示意图;
图8为所述的实现异或运算的游程操作原理示意图;
图9为所述的显示逻辑差运算的游程操作原理示意图。
具体实施方式
以下将结合附图和具体实施例对本发明做进一步详细说明。
本发明所提方法的总体流程框图如图1所示。
本发明中所称的游程,是指二值图像的一行或一列中连续的逻辑值为1的点构成的线段,下面均以列为例进行说明。对于给定列而言,其中的游程可通过游程的起点下标Start和终点下标End来加以描述。如图2所示便是游程起点下标和终点下标的定义示意图。为了图例清晰起见,在附图中,逻辑值为1的点均以深色给出。
将存在逻辑值为1的点的列的列号以及按由上至下的顺序排列得到的游程列表结合,便构成了本发明中所称的列结构;本发明中所称的游程树结构,便是由二值图像中具有逻辑值为1的点的各列的列结构,按列号由小至大排列得到的列表。如图3所示便是所述的列结构与游程树结构的数据结构示意图。如图4所示则是针对图2中的示例给出的具体的示例游程树。
为了能够通过游程的操作来完成不同的二值图像间的逻辑运算,在本发明的步骤ii中定义了一系列的、两个游程之间的关系运算,这些关系运算的定义示意图如图5所示。
如图6、图7、图8和图9所示分别为在本发明的步骤(A.9)、(B.9)、(C.9)和(D.9)中所述的,能够分别实现二值图像的或运算、与运算、异或运算和逻辑差运算的游程操作的原理示意图。
在实施例中,利用C++实现了本发明所提方法,以及通过逐像素逻辑操作实现的二值图像的或运算、与运算、异或运算和逻辑差运算,并在2576×1932的图像上进行了实验。参与运算的图像均为包含人工建筑的自然场景,在经过阈值分割后,利用半径为3像素的圆盘状结构元素,对分割后的二值图像进行了数学形态学开运算和闭运算,以去除过于细小的噪声性区域和孔洞;然后在处理后的二值图像上分别进行所述的或运算、与运算、异或运算和逻辑差运算。为了能够更为准确地估计两种方法的运行速度,上述四种逻辑运算均进行了100遍。进行实验的计算机的软硬件环境为:Dual-CoreE52002.50GHzCPU;2GBRAM;MicrosoftWindowsXPSP3。本发明所提方法的总运行时间为0.515s,而逐像素操作方法的总运行时间为6.891s。可见本发明所提方法将所涉的二值图像基本的二元逻辑运算的速度提高了1个数量级。此外,由于采用了游程编码,游程树所需的空间也明显少于原始的二值图像。如果需要处理的图像并非自然场景图像,而是更为单一和规则的对象,如工业生产流水线上的单个规则形状的工件,则相应的游程数量往往更少,从而带来更高的空间压缩率和更快的运算速度。
Claims (6)
1.一种基于游程的、时空高效的二值图像二元逻辑运算方法;本发明所提出的方法包括以下步骤:
i.以逐行或逐列的方式扫描参与运算的二值图像,这些二值图像应具有相同的高度H和宽度W;在本发明中,按逐列扫描的方式进行说明如下:对一幅二值图像,由左至右扫描它的各列;对第i列,由上至下扫描各个像素点;如果第i列中不存在逻辑值为1的点(白色点),则继续扫描下一列;否则,找出该列中所有的白色点构成的游程(即由若干个连续的白色点构成的白色线段)run,run为游程结构体,包括Start、End和IsEmpty等三个字段,每个游程的Start字段设为该游程起始像素的行号(图像最顶部一行的行号为0),End字段设为该游程终止像素的行号+1,IsEmpty设为FALSE;将第i列中的所有游程按从上至小(即按游程的Start字段的值由小至大)的顺序加入列表Li中,称列表Li为游程列表;将列号i和该列的游程列表Li组织为列结构体col,包括Index和RunList等两个字段,其中Index=i,RunList=Li;当图像扫描完毕后,将所有存在白色点的列的列结构体按从左至右(即列号从小至大)的顺序加入列表F中,称列表F为该幅二值图像对应的游程树;
ii.给定两个游程rA和rB,定义两个游程之间的关系如下:若rA.IsEmpty=TRUE,则rA>SrB;否则若rB.IsEmpty=TRUE,则rA<SrB;否则若rA.End<rB.Start,则rA<SrB;否则若rA.End=rB.Start,则rA<ArB;否则若rA.Start<rB.Start且rA.End<rB.End,则rA<OrB;否则若rA.Start<rB.Start且rA.End=rB.End,则rA≤BrB;否则若rA.Start<rB.Start且rA.End>rB.End,则否则若rA.Start=rB.Start且rA.End<rB.End,则rA≤TrB;否则若rA.Start=rB.Start且rA.End=rB.End,则rA=rB;否则若rA.Start=rB.Start且rA.End>rB.End,则rA≥TrB;否则若rA.End<rB.End,则否则若rA.End=rB.End,则rA≥BrB;否则若rA.Start<rB.End且rA.End>rB.End,则rA>OrB;否则若rA.Start=rB.End,则rA>ArB;否则rA>SrB;
iii.将需要进行的二值图像逻辑操作转换为一系列二值图像的基本二元运算(与运算AND、或运算OR、异或运算XOR以及逻辑差运算EXL);对于二值图像IA和IB,其逻辑运算的结果是一幅相同大小的二值图像IR,其中每个像素点处的值由IA和IB相应位置上的像素点值的逻辑运算所决定;对与运算AND,有IR=IAANDIB,其中
IR(i,j)=IA(i,j)ANDIB(i,j);
对或运算OR,有IR=IAORIB,其中
IR(i,j)=IA(i,j)ORIB(i,j);
对异或运算XOR,有IR=IAXORIB,其中
IR(i,j)=IA(i,j)XORIB(i,j)
=[IA(i,j)ANDIB(i,j)]ORNOT[IA(i,j)ORIB(i,j)];
对逻辑差运算EXL,有IR=IAEXLIB,其中
IR(i,j)=IA(i,j)EXLIB(i,j)=IA(i,j)ANDNOTIB(i,j);
各式中i、j的取值范围为0≤i<H,0≤j<W;
iv.在各幅二值图像的游程树结构上,完成各个基本的二元逻辑运算,得到运算结果游程树,并根据结果游程树重构出H×W大小的结果二值图像。
2.根据权利要求1所述的第iv步中基于二值图像游程树的或运算(OR)方法,其特征在于如下步骤:
a.令FA和FB分别为进行或运算的二值图像IA和IB对应的游程树;初始化一个空的游程树结构FR作为FA和FB的或运算的结果;令colA和colB分别为FA和FB的当前列的列结构体,置colA为FA中的首列,置colB为FB中的首列;
b.若colA和colB均非空,则至c,否则至n;
c.若colA.Index<colB.Index,至d,否则至e;
d.将colA加入FR中;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;至b;
e.若colA.Index>colB.Index,至f,否则至g;
f.将colB加入FR中;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至b;
g.初始化一个空的游程列表LR,令LA=colA.RunList,LB=colB.RunList;令rA为LA中的首个游程,rB为LB中的首个游程;置主操作数标志pivot=A;置游程运算结果r为空;
h.若rA.IsEmpty=FALSE或rB.IsEmpty=FALSE,至i,否则至l;
i.若rA<SrB,则置r=rA,pivot=B;若rA<ArB,则置r为空,rB.Start=rA.Start,pivot=B;若rA<OrB,则置r为空,rB.Start=rA.Start,pivot=B;若rA≤BrB,则置r=rA,pivot=NONE;若则置r为空,pivot=A;若rA≤TrB,则置r为空,pivot=B;若rA=rB,则置r=rA,pivot=NONE;若rA≥TrB,则置r为空,pivot=A;若则置r为空,pivot=B;若rA≥BrB,则置r=rB,pivot=NONE;若rA>OrB,则置r为空,rA.Start=rB.Start,pivot=A;若rA>ArB,则置r为空,rA.Start=rB.Start,pivot=A;若rA>SrB,则置r=rB,pivot=A;
j.若r不为空,则将r加入LR;
k.读入新操作数,至h;
l.若pivot=A且rA.IsEmpty=FALSE,则将rA加入LR;否则若pivot=B且rB.IsEmpty=FALSE,则将rB加入LR;
m.产生结构体colR,置colR.Index=colA.Index,colR.RunList=LR,将colR加入FR;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至b;
n.若colA不为空,则将FA中剩余各列加入FR;否则若colB不为空,则将FB中剩余各列加入FR。
3.根据权利要求1所述的第iv步中基于二值图像游程树的与运算(AND)方法,其特征在于如下步骤:
a.令FA和FB分别为进行与运算的二值图像IA和IB对应的游程树;初始化一个空的游程树结构FR作为FA和FB的与运算的结果;令colA和colB分别为FA和FB的当前列的列结构体,置colA为FA中的首列,置colB为FB中的首列;
b.若colA和colB均非空,则至c,否则结束;
c.若colA.Index<colB.Index,至d,否则至e;
d.若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;至b;
e.若colA.Index>colB.Index,至f,否则至g;
f.若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至b;
g.初始化一个空的游程列表LR,令LA=colA.RunList,LB=colB.RunList;令rA为LA中的首个游程,rB为LB中的首个游程;置主操作数标志pivot=A;置游程运算结果r为空;
h.若rA.IsEmpty=FALSE或rB.IsEmpty=FALSE,至i,否则至l;
i.若rA<SrB,则置r为空,pivot=B;若rA<ArB,则置r为空,pivot=B;若rA<OrB,则置r.Start=rB.Start,r.End=rA.End,rB.Start=rA.End,pivot=B;若rA≤BrB,则置r=rB,pivot=NONE;若则置r=rB,rA.Start=rB.End,pivot=A;若rA≤TrB,则置r=rA,rB.Start=rA.End,pivot=B;若rA=rB,则置r=rA,pivot=NONE;若rA≥TrB,则置r=rB,rA.Start=rB.End,pivot=A;若则置r=rA,rB.Start=rA.End,pivot=B;若rA≥BrB,则置r=rA,pivot=NONE;若rA>OrB,则置r.Start=rA.Start,r.End=rB.End,rA.Start=rB.End,pivot=A;若rA>ArB,则置r为空,pivot=A;若rA>SrB,则置r为空,pivot=A;
j.若r不为空,则将r加入LR;
k.读入新操作数,至h;
l.产生结构体colR,置colR.Index=colA.Index,colR.RunList=LR,将colR加入FR;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至b。
4.根据权利要求1所述的第iv步中基于二值图像游程树的异或运算(XOR)方法,其特征在于如下步骤:
a.令FA和FB分别为进行异或运算的二值图像IA和IB对应的游程树;初始化一个空的游程树结构FR作为FA和FB的异或运算的结果;令colA和colB分别为FA和FB的当前列的列结构体,置colA为FA中的首列,置colB为FB中的首列;
b.若colA和colB均非空,则至c,否则至n;
c.若colA.Index<colB.Index,至d,否则至e;
d.将colA加入FR中;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;至b;
e.若colA.Index>colB.Index,至f,否则至g;
f.将colB加入FR中;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至b;
g.初始化一个空的游程列表LR,令LA=colA.RunList,LB=colB.RunList;令rA为LA中的首个游程,rB为LB中的首个游程;置主操作数标志pivot=A;置游程运算结果r为空;
h.若rA.IsEmpty=FALSE或rB.IsEmpty=FALSE,至i,否则至l;
i.若rA<SrB,则置r=rA,pivot=B;若rA<ArB,则置r为空,rB.Start=rA.Start,pivot=B;若rA<OrB,则置r.Start=rA.Start,r.End=rB.Start,rB.Start=rA.End,pivot=B;若rA≤BrB,则置r.Start=rA.Start,r.End=rB.Start,pivot=NONE;若则置r.Start=rA.Start,r.End=rB.Start,rA.Start=rB.End,pivot=A;若rA≤TrB,则置r为空,rB.Start=rA.End,pivot=B;若rA=rB,则置r为空,pivot=NONE;若rA≥TrB,则置r为空,rA.Start=rB.End,pivot=A;若则置r.Start=rB.Start,r.End=rA.Start,rB.Start=rA.End,pivot=B;若rA≥BrB,则置r.Start=rB.Start,r.End=rA.Start,pivot=NONE;若rA>OrB,则置r.Start=rB.Start,r.End=rA.Start,rA.Start=rB.End,pivot=A;若rA>ArB,则置r为空,rA.Start=rB.Start,pivot=A;若rA>SrB,则置r=rB,pivot=A;
j.若r不为空,则将r加入LR;
k.读入新操作数,至h;
l.若pivot=A且rA.IsEmpty=FALSE,则将rA加入LR;否则若pivot=B且rB.IsEmpty=FALSE,则将rB加入LR;
m.产生结构体colR,置colR.Index=colA.Index,colR.RunList=LR,将colR加入FR;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至b;
n.若colA不为空,则将FA中剩余各列加入FR;否则若colB不为空,则将FB中剩余各列加入FR。
5.根据权利要求1所述的第iv步中基于二值图像游程树的逻辑差运算(EXL)方法,其特征在于如下步骤:
a.令FA和FB分别为进行逻辑差运算的二值图像IA和IB对应的游程树;初始化一个空的游程树结构FR作为FA和FB的逻辑差运算的结果;令colA和colB分别为FA和FB的当前列的列结构体,置colA为FA中的首列,置colB为FB中的首列;
b.若colA和colB均非空,则至c,否则至n;
c.若colA.Index<colB.Index,至d,否则至e;
d.将colA加入FR中;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;至b;
e.若colA.Index>colB.Index,至f,否则至g;
f.若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至b;
g.初始化一个空的游程列表LR,令LA=colA.RunList,LB=colB.RunList;令rA为LA中的首个游程,rB为LB中的首个游程;置主操作数标志pivot=A;置游程运算结果r为空;
h.若rA.IsEmpty=FALSE或rB.IsEmpty=FALSE,至i,否则至l;
i.若rA<SrB,则置r=rA,pivot=B;若rA<ArB,则置r=rA,pivot=B;若rA<OrB,则置r.Start=rA.Start,r.End=rB.Start,rB.Start=rA.End,pivot=B;若rA≤BrB,则置r.Start=rA.Start,r.End=rB.Start,pivot=NONE;若则置r.Start=rA.Start,r.End=rB.Start,rA.Start=rB.End,pivot=A;若rA≤TrB,则置r为空,rB.Start=rA.End,pivot=B;若rA=rB,则置r为空,pivot=NONE;若rA≥TrB,则置r为空,rA.Start=rB.End,pivot=A;若则置r为空,rB.Start=rA.End,pivot=B;若rA≥BrB,则置r为空,pivot=NONE;若rA>OrB,则置r为空,rA.Start=rB.End,pivot=A;若rA>ArB,则置r为空,pivot=A;若rA>SrB,则置r为空,pivot=A;
j.若r不为空,则将r加入LR;
k.读入新操作数,至h;
l.若pivot=A且rA.IsEmpty=FALSE,则将rA加入LR;
m.产生结构体colR,置colR.Index=colA.Index,colR.RunList=LR,将colR加入FR;若colA已经是FA的最后一列,则置colA为空,否则置colA为FA中的下一列;若colB已经是FB的最后一列,则置colB为空,否则置colB为FB中的下一列;至b;
n.若colA不为空,则将FA中剩余各列加入FR。
6.根据权利要求2、权利要求3、权利要求4、权利要求5所述的第k步中新操作数的读取方法,其特征在于如下步骤:
a.若pivot=A,至b;否则至c;
b.若LB中所有游程已被遍历完成,则置rB.IsEmpty=TRUE后返回;否则置rB为LB中的下一个游程后返回;
c.若pivot=B,至d;否则至e;
d.若LA中所有游程已被遍历完成,则置rA.IsEmpty=TRUE后返回;否则置rA为LA中的下一个游程后返回;
e.若LA中所有游程已被遍历完成,则置rA.IsEmpty=TRUE;否则置rA为LA中的下一个游程;
f.若LB中所有游程已被遍历完成,则置rB.IsEmpty=TRUE;否则置rB为LB中的下一个游程;
g.置pivot=A。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510364790.6A CN105046632B (zh) | 2015-06-29 | 2015-06-29 | 时空高效的二值图像二元逻辑运算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510364790.6A CN105046632B (zh) | 2015-06-29 | 2015-06-29 | 时空高效的二值图像二元逻辑运算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105046632A true CN105046632A (zh) | 2015-11-11 |
CN105046632B CN105046632B (zh) | 2018-09-25 |
Family
ID=54453153
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510364790.6A Expired - Fee Related CN105046632B (zh) | 2015-06-29 | 2015-06-29 | 时空高效的二值图像二元逻辑运算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105046632B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105608713A (zh) * | 2016-01-04 | 2016-05-25 | 湖南大学 | 一种基于四叉树的二值图像编码与高效逻辑运算方法 |
CN106604033A (zh) * | 2017-02-24 | 2017-04-26 | 湖南大学 | 图像编码与逻辑运算方法及装置 |
CN106600655A (zh) * | 2016-11-15 | 2017-04-26 | 昂纳自动化技术(深圳)有限公司 | 基于行程编码的任意结构元的快速区域腐蚀算法及装置 |
CN106898029A (zh) * | 2017-02-24 | 2017-06-27 | 湖南大学 | 二值图像重构方法及装置 |
CN110677156A (zh) * | 2019-09-19 | 2020-01-10 | 南京国电南自电网自动化有限公司 | 电力系统保护装置中黑白点阵数据的压缩算法及解压方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5267330A (en) * | 1984-06-19 | 1993-11-30 | Canon Kabushiki Kaisha | Image processing apparatus |
EP0431961B1 (en) * | 1989-12-08 | 1998-08-12 | Xerox Corporation | Image reduction/enlargement technique |
CN101990681A (zh) * | 2008-02-01 | 2011-03-23 | 新泽西理工学院 | 利用游程直方图修改和逻辑运算进行可逆二进制图像数据隐藏的系统和方法 |
CN102446342A (zh) * | 2011-08-30 | 2012-05-09 | 西安交通大学 | 可重构二值运算器、可重构二值图像处理系统及其实现基本形态学算法的方法 |
CN104637066A (zh) * | 2015-03-12 | 2015-05-20 | 湖南大学 | 基于序贯细化的二值图像快速骨架提取方法 |
-
2015
- 2015-06-29 CN CN201510364790.6A patent/CN105046632B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5267330A (en) * | 1984-06-19 | 1993-11-30 | Canon Kabushiki Kaisha | Image processing apparatus |
EP0431961B1 (en) * | 1989-12-08 | 1998-08-12 | Xerox Corporation | Image reduction/enlargement technique |
CN101990681A (zh) * | 2008-02-01 | 2011-03-23 | 新泽西理工学院 | 利用游程直方图修改和逻辑运算进行可逆二进制图像数据隐藏的系统和方法 |
CN102446342A (zh) * | 2011-08-30 | 2012-05-09 | 西安交通大学 | 可重构二值运算器、可重构二值图像处理系统及其实现基本形态学算法的方法 |
CN104637066A (zh) * | 2015-03-12 | 2015-05-20 | 湖南大学 | 基于序贯细化的二值图像快速骨架提取方法 |
Non-Patent Citations (5)
Title |
---|
FIKRET ERCAL等: "A systolic algorithm to process compressed binary images", 《PROCEEDING OF 1999 IPPS/SPDP》 * |
IRAKLIS M. SPILIOTIS等: "Fast algorithms for basic processing and analysis operations on block-represented binary images", 《PATTERN RECOGNITION LETTERS》 * |
TOMAS SUK等: "Decomposition of binary images-A survey and comparison", 《PATTERN RECOGNITION》 * |
伍鹏: "基于NAM的图像集合运算算法及其实验研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
吕关锋等: "利用OBDD编码的快速二值图算法", 《计算机科学与探索》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105608713A (zh) * | 2016-01-04 | 2016-05-25 | 湖南大学 | 一种基于四叉树的二值图像编码与高效逻辑运算方法 |
CN105608713B (zh) * | 2016-01-04 | 2018-11-16 | 湖南大学 | 一种基于四叉树的二值图像编码与高效逻辑运算方法 |
CN106600655A (zh) * | 2016-11-15 | 2017-04-26 | 昂纳自动化技术(深圳)有限公司 | 基于行程编码的任意结构元的快速区域腐蚀算法及装置 |
CN106604033A (zh) * | 2017-02-24 | 2017-04-26 | 湖南大学 | 图像编码与逻辑运算方法及装置 |
CN106898029A (zh) * | 2017-02-24 | 2017-06-27 | 湖南大学 | 二值图像重构方法及装置 |
CN106898029B (zh) * | 2017-02-24 | 2019-08-09 | 湖南大学 | 二值图像重构方法及装置 |
CN106604033B (zh) * | 2017-02-24 | 2019-09-17 | 湖南大学 | 图像编码与逻辑运算方法及装置 |
CN110677156A (zh) * | 2019-09-19 | 2020-01-10 | 南京国电南自电网自动化有限公司 | 电力系统保护装置中黑白点阵数据的压缩算法及解压方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105046632B (zh) | 2018-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105046632A (zh) | 时空高效的二值图像二元逻辑运算方法 | |
CN110197182A (zh) | 基于上下文信息和注意力机制的遥感影像语义分割方法 | |
Smith et al. | Classification of archaeological ceramic fragments using texture and color descriptors | |
CN111476835B (zh) | 多视角图像一致性的无监督深度预测方法、系统、装置 | |
CN113962878B (zh) | 一种低能见度图像去雾模型方法 | |
CN109979008A (zh) | 一种基于属性的点云条带划分方法 | |
CN110175506B (zh) | 基于并行降维卷积神经网络的行人重识别方法及装置 | |
CN102982544A (zh) | 多前景目标图像交互式分割方法 | |
CN110598673A (zh) | 基于残差网络的遥感图像道路提取方法 | |
CN115311555A (zh) | 一种基于批风格混合的遥感影像建筑物提取模型泛化方法 | |
CN105608713B (zh) | 一种基于四叉树的二值图像编码与高效逻辑运算方法 | |
CN112907603B (zh) | 一种基于Unet和分水岭算法的细胞实例分割方法 | |
CN106558033A (zh) | 基于形态学膨胀腐蚀算法的二值图像处理方法 | |
CN103235947A (zh) | 一种手写体数字识别方法及装置 | |
CN104637066A (zh) | 基于序贯细化的二值图像快速骨架提取方法 | |
CN115578602A (zh) | 一种基于改进YOLOv7的自然树种识别方法 | |
CN104331883B (zh) | 一种基于非对称逆布局模型的图像边界提取方法 | |
CN104021395B (zh) | 一种基于高阶偏最小二乘法的目标跟踪算法 | |
CN117789028A (zh) | 一种基于大核卷积与方向条带卷积的遥感影像道路提取方法、系统、设备及介质 | |
CN105512663A (zh) | 一种基于全局与局部对比度的显著性检测方法 | |
CN101742088B (zh) | 非局部均值空域时变视频滤波方法 | |
CN111047654A (zh) | 一种基于色彩信息的高清高速视频背景建模方法 | |
CN104599229A (zh) | 一种岩土体材料快速矢量化方法 | |
CN114638845A (zh) | 一种基于双阈值的量子图像分割方法、装置及存储介质 | |
Niu et al. | Lightweight and accurate single image super-resolution with channel segregation network |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180925 |
|
CF01 | Termination of patent right due to non-payment of annual fee |