基于行程编码的任意结构元的快速区域膨胀算法及装置的制作方法

文档序号:12064737阅读:369来源:国知局
基于行程编码的任意结构元的快速区域膨胀算法及装置的制作方法

本发明涉及图像处理,尤其涉及到感兴趣区域膨胀的实现。



背景技术:

形态学膨胀算法是图像处理领域中常用的预处理算法,主要用于扩大感兴趣区域以达到连接不同区域与便于后续处理等。目前已有的感兴趣区域膨胀算法中,主要特征为针对的是像素点进行操作。针对像素点操作的方法可分为两种:1)每个像素点采用八位表示,即像素值可取0到255;2)每个像素点采用1位表示,即像素值为0与1。这两种像素表示方法在进行膨胀操作时原理基本一致,数学表达式为:表示用结构元B对感兴趣区域A进行膨胀,表达式意思是结构元(为结构元B关于其原点的镜像)在感兴趣区域A所在的图像内平移,结构元与感兴趣区域A交集不为零的所有位置的集合即为膨胀所得结果。其中,方法1)比方法2)慢,因为计算机对一位的访问与计算的速度要快于八位;另外,方法1)的内存占用量是方法2)的八倍。

现有的这种针对像素点的操作方法存在速度慢、占用内存大、对感兴趣区域的操作受图像的宽高限制、需访问图像内所有像素点等缺点。也就是说,现有的感兴趣区域膨胀算法耗时长且占用内存多,对处于图像边界的像素点膨胀会受限制。另一方面,在实际工业应用中往往要求实时对图像进行处理,对算法的耗时要求严格,现有的这种算法难以满足实际应用的需要。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述缺陷,提出一种基于行程编码的任意结构元的快速区域膨胀算法,能够有效地降低内存占用,并缩短耗时。

本发明解决其技术问题所采用的技术方案是:提供一种基于行程编码的任意结构元的快速区域膨胀算法,包括:对输入图像进行行程编码;以及用行程编码的结构元对编码后的感兴趣区域进行膨胀。

在一些实施例中,所述的对输入图像进行行程编码,具体包括:图像分割获得感兴趣区域;以及对感兴趣区域行程编码。

在一些实施例中,所述的用结构元对编码后的感兴趣区域进行膨胀,包括:将采用结构元膨胀感兴趣区域表示为结构元所有行程相对于其原点的向量对感兴趣区域的平移结果的并集。

在一些实施例中,所述的选择结构元对编码后的感兴趣区域进行膨胀,具体包括:求结构元的单个行程对感兴趣区域的膨胀结果;直至得到该结构元所有行程对感兴趣区域的膨胀结果;对所有的膨胀结果求并集。

在一些实施例中,所述的结构元的原点是指结构元的重心。

本发明解决其技术问题所采用的技术方案还是:提供一种基于行程编码的任意结构元的快速区域膨胀装置,包括:第一模块,用于对输入图像进行行程编码;以及第二模块,用于用行程编码的结构元对编码后的感兴趣区域进行膨胀。

在一些实施例中,所述的第一模块实现的功能具体包括:图像分割获得感兴趣区域;以及对感兴趣区域行程编码。

在一些实施例中,所述的第二模块实现的功能包括:将采用结构元膨胀感兴趣区域表示为结构元所有行程相对于其原点的向量对感兴趣区域的平移结果的并集。

在一些实施例中,所述的第二模块具体实现的功能包括:求结构元的单个行程对感兴趣区域的膨胀结果;直至得到该结构元所有行程对感兴趣区域的膨胀结果;对所有的膨胀结果求并集。

本发明的有益效果在于,通过对图像进行行程编码,并采用行程编码的结构元对图像的感兴趣区域进行膨胀,能够有效地降低内存占用,并缩短耗时。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1为本发明的行程编码的示意图。

图2为本发明的行程编码的流程图。

图3为本发明的结构元的示意图。

图4为本发明算法的流程示意图。

图5为本发明对感兴趣区域进行膨胀步骤的流程示意图。

图6为图3所示结构元中行程作用示意图。

图7为采用本发明算法用图3所示的结构元进行膨胀的结果示意图。

图8为本发明装置的示意性框图。

具体实施方式

现结合附图,对本发明的较佳实施例作详细说明。

本发明提出一种基于行程编码的任意结构元的快速区域膨胀算法,其对图像进行行程编码,并采用行程编码的结构元对图像的感兴趣区域进行膨胀。虽然没有针对像素点操作的膨胀算法直观,但是其速度与内存占用却优于针对像素点操作的算法,而且脱离了图像,例如:宽、高,与区域形状的限制。本发明算法适用的技术领域包括,但不限于:图像处理Blob分析时扩展感兴趣区域;与腐蚀算法组合成开闭操作及求区域几何特征参数等。

本发明算法大致包括:对输入图像进行行程编码;以及用行程编码的结构元对编码后的感兴趣区域进行膨胀。

关于对输入图像进行行程编码。不同灰度值的像素点组合在一起构成了图像,由于像素点灰度值的不同使得图像呈现出不同的图案,图像处理中常需要对图像进行分割以获得感兴趣的区域。现有算法中感兴趣区域通常直接用像素点表示,例如:开源库OpenCV的ROI,像素点表示感兴趣区域存在的一个弊端是内存占用大。以8位深度的灰度图来说,若一片感兴趣区域含30万个像素点,则其内存占用量MemoryUsage=300000bytes,约为292KB,若采用行程编码方式,内存占用量可能低至3KB,二者相差近100倍,可见行程编码图像对减少程序资源的占用是有效的。

行程编码可分为行行程与列行程两种,行行程结构包含行程所在行号Row、行程起始列Cb与行程终止列Ce;列行程包含行程所在列号Col、行程起始行Rb与行程终止行Re。

本发明的行程编码是基于行行程实现的。感兴趣区域的每一行中连续像素点组成的一段区域称为一个行程。唯一标示一个行程需提供行号,起始列与终止列。一个行程内包含的像素的点数没有限制。若一个行程的每个分量用两个字节表示,则一个行程占6个字节。每一片感兴趣区域由有限个行程组成。每一行也可能包含若干个行程。参见图1,图1为本发明的行程编码的示意图。作为一个例举,图1示出了一个像素101,两个行程103、105以及感兴趣区域107。

参见图2,图2为本发明的行程编码的流程图。感兴趣区域的行程编码过程具体包括以下步骤:

S201、图像分割获得感兴趣区域。即,通过阈值分割等图像分割方法获得感兴趣区域。

S202、申请内存。即,在计算设备中开辟一片内存用以保存行程。

S203、对感兴趣区域行程编码。即,从感兴趣区域最小行最小列像素点开始依次取行号Row、起始列Cb与终止列Ce,获得第一个行程并保存在开辟的内存中;逐行逐列将整个感兴趣区域编码为行程表示。

S204、判断前述步骤S202开辟的内存是否足够,够的话,转步骤S206,不够的话,转步骤S205。

S205、重新申请内存则需重新开辟一片大内存并将原有数据复制至此段内存中,释放原有内存。

S206、编码完成结束编码。

经过上述步骤后,感兴趣区域被编码为行程表示方式,并且所有行程按照行顺序依次保存,每行的所有行程又严格按照列顺序保存。

关于用行程编码的结构元对编码后的感兴趣区域进行膨胀。参见图3,图3为本发明的结构元的示意图。结构元选取时需定义结构元的原点301,膨胀算法采用的是将此结构元的像素点相对于原点301镜像后的结果。设结构元为B,镜像后的结果为感兴趣区域为A。直观理解膨胀指的是在整个图像区域内平移结构元所有结构元原点(即结构元的重心)位置包含于感兴趣区域A组成的集合即为膨胀结果,数学表达式为第一公式:若感兴趣区域A所在图像含有m个像素点,结构元B含n个像素点,则算法的复杂度为Ο(mn)。

本发明在此巧妙地做一次变换:采用结构元B膨胀感兴趣区域A还可表示为结构元所有像素点相对于其原点的向量对感兴趣区域A的平移结果的并集,数学表达式为第二公式:其中,向量如图3中的箭头所示。

若将像素点用行程替代,每个行程302的所有像素点平移向量可分解为一个行向量与两个列向量的集合。因为每一行中的向量存在重合,如向量与重合了部分,它们共同作用的结果与最大向量单独作用的结果相同,因此对于某一行程302而言,只需计算行程302的起始点与终止点向量对感兴趣区域A平移的并集即可。由此可知,不管某一行程含有多少个像素点,它最终只需计算两个像素点对膨胀算法的影响,因此第二公式相较于第一公式的算法复杂度得到降低,在结构元B较大的情况尤为突出。

此外,由于感兴趣区域A也为行程表示,平移一个行程的计算量相当于平移1.5个像素点计算量。但一个行程可表示成百上千个像素点,因此第一公式所表示的算法复杂度得到进一步降低。以矩形结构元为例,假设:结构元B的行数为RB、列数为CB,共n个像素点;感兴趣区域A的行数为RA、列数为CA,共m个像素点;则第一公式的复杂度为Ο(mn),采用第二公式的复杂度为Ο(3RARB),通常3RARB远小于mn,由此可见,本发明算法复杂度大大降低,时间消耗可以减少很多。

参见图4,图4为本发明算法的流程示意图。本发明算法大致包括以下步骤:S401、对目标图像进行图像分割,获得感兴趣区域。首先,选取一适当的阈值,然后遍历目标图像中所有像素点,满足阈值要求的则为感兴趣区域像素点,最后将所有感兴趣区域的像素点标记并保存即形成感兴趣区域。

S402、对感兴趣区域进行行程编码。以感兴趣区域最小行最小列为第一个行程的起始点,依次提取连续的像素点片段为一个行程,直至完成整个感兴趣区域的编码,编码步骤参见图1与图2。

S403、用结构元对感兴趣区域进行膨胀。本发明算法可根据实际应用的需要,选取任意结构元对感兴趣区域进行膨胀。若选取方形结构元,膨胀结果将变得棱角清晰;若选取圆形结构元,则会使感兴趣区域边角变得圆润。

参见图5,图5为本发明对感兴趣区域进行膨胀步骤的流程示意图。本发明的膨胀过程具体包括:

S501、求结构元的单个行程对感兴趣区域的膨胀结果。具体有,对结构元B的每个行程进行向量分解,求出行方向向量与两个最大列方向向量,如图3所示的一个行向量与两个列向量其中,行向量决定了感兴趣区域A的所有行程的行Row,两个列向量决定了感兴趣区域A的所有行程的起始列Cb与终止列Ce。参见图6,图6为图3所示结构元中行程作用示意图。其中,在背景600下,原始区域的标识为601,列向量使感兴趣区域A左移后区域的标识为603,列向量使感兴趣区域A右移后区域的标识为602,平移后的并集即为单个行程的列方向膨胀结果的标识为604。新的起始列Cb与终止列Ce为如图6中并集部分604所示。结合行向量对感兴趣区域A的作用,即可得到结构元B的单个行程膨胀结果。

上述单个行程膨胀的数学表达式为:

Cb'=Cb+vcl;Ce'=Ce+vcr;Row'=Row+vr。

S502、重复执行上述步骤S501,直至得到结构元B所有行程对感兴趣区域A的膨胀结果。

S503、将步骤S502得到的所有结果求并集,即为最终膨胀结果。参见图7,图7为采用本发明算法用图3所示的结构元进行膨胀的结果示意图。作为一个示例,图7示意出了在背景700下的原始区域701和膨胀后结果702。

参见图8,图8为本发明装置的示意性框图。作为在一种例举,该装置800包括:第一模块801,用于对输入图像进行行程编码;以及第二模块802,用于用行程编码的结构元对编码后的感兴趣区域进行膨胀。

该第一模块801实现的功能具体包括:图像分割获得感兴趣区域;以及对感兴趣区域行程编码。

该第二模块802实现的功能包括:将采用结构元膨胀感兴趣区域表示为结构元所有行程相对于其原点的向量对感兴趣区域的平移结果的并集。具体而言,该第二模块802具体实现的功能包括:求结构元的单个行程对感兴趣区域的膨胀结果;直至得到该结构元所有行程对感兴趣区域的膨胀结果;对所有的膨胀结果求并集。

可以理解的是,上述的两个模块801和802既可以对应于处理器上运行的程序的两个软件模块,也可以对应于专门构建的两个硬件模块。

本发明的有益效果包括:结构元与感兴趣区域采用行程编码后,算法内存占用少,特别适用于对资源有一定限制的嵌入式平台;图像经行程编码后表示图像的最小单位为行程,每个行程可包含的像素点数无限制,因此感兴趣区域的行程数必然比像素点数目少,与遍历像素点的算法相比遍历行程则变得简单,耗时也将减少;另外,采用行程编码后,对感兴趣区域的操作脱离了图像的宽度与高度的限制,直接保存任意形状任意大小的感兴趣区域,无数据冗余,适用性更广。

应当理解的是,以上实施例仅用以说明本发明的技术方案,而非对其限制,对本领域技术人员来说,可以对上述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改和替换,都应属于本发明所附权利要求的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1