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

文档序号:12675530阅读:303来源:国知局
基于行程编码的快速区域膨胀算法及装置的制作方法

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



背景技术:

形态学膨胀算法是图像处理领域中常用的预处理算法,主要用于扩大感兴趣区域以达到连接不同区域以便于后续处理的目的。

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

现有基于像素点的操作方法存在速度慢、占用内存大、对感兴趣区域的操作受图像的宽高限制、需访问图像内所有像素点等缺点。也就是说,现有的感兴趣区域膨胀算法耗时长且占用内存多,对处于图像边界的像素点膨胀会受限制。另一方面,针对像素点进行操作的算法通常采用直径较小的结构元,对于膨胀结构元直径超过3个像素甚至几十上百个像素时就需通过多次调用算子实现,其耗时也会成几十上百倍增长。在实际工业应用中往往要求实时对图像进行处理,对算法的耗时要求严格,现有的这种算法难以满足实际应用的需要。



技术实现要素:

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

本发明为解决其技术问题所提供的一种基于行程编码的快速区域膨胀算法,该算法包括:

对图像感兴趣区域进行行程编码;

选取矩形结构元对编码后的感兴趣区域进行膨胀操作;

其中,该膨胀操作表示为矩形结构元镜像后所有像素点相对于其原点的向量对感兴趣区域各行程平移结果的并集。

进一步地,所述膨胀操作具体包括:

求取矩形结构元列方向膨胀向量及行方向膨胀向量;

使用所述列方向膨胀向量对感兴趣区域进行列方向膨胀操作;

使用所述行方向膨胀向量对列方向膨胀操作后的感兴趣区域进行行方向膨胀操作;

对行方向膨胀操作的结果求并集;

其中,列方向膨胀向量包括矩形结构元起始列任一像素、终止列任一像素相对于原点向量的列方向分量;行方向膨胀向量包括矩形结构元各行任一像素相对于原点向量的行方向分量;矩形结构元的原点是该矩形结构元的重心。

进一步地,所述膨胀操作也可以包括:

求取矩形结构元行方向膨胀向量及列方向膨胀向量;

使用所述行方向膨胀向量对感兴趣区域进行行方向膨胀操作;

使用所述列方向膨胀向量对行方向膨胀操作后的感兴趣区域进行列方向膨胀操作;

对列方向膨胀操作的结果求并集;

其中,行方向膨胀向量包括矩形结构元起始行任一像素、终止行任一像素相对于原点向量的行方向分量;列方向膨胀向量包括矩形结构元各列任一像素相对于原点向量的列方向分量;矩形结构元的原点是该矩形结构元的重心。

本发明同时提供一种基于行程编码的快速区域膨胀装置,该装置包括:

第一模块,用于对图像感兴趣区域进行行程编码;

第二模块,用于选取矩形结构元对编码后的感兴趣区域进行膨胀操作,所述膨胀操作表示为矩形结构元镜像后所有像素点相对于其原点的向量对感兴趣区域各行程平移结果的并集。

进一步地,所述第二模块包括:

向量求取单元,用于求取矩形结构元列方向膨胀向量及行方向膨胀向量;

膨胀操作单元,用于使用所述列方向膨胀向量对感兴趣区域进行列方向膨胀操作;使用所述行方向膨胀向量对列方向膨胀操作后的感兴趣区域进行行方向膨胀操作;并对行方向膨胀操作的结果求并集;

其中,列方向膨胀向量包括矩形结构元起始列任一像素、终止列任一像素相对于原点向量的列方向分量;行方向膨胀向量包括矩形结构元各行任一像素相对于原点向量的行方向分量;矩形结构元的原点是该矩形结构元的重心。

进一步地,所述第二模块也可以包括:

向量求取单元,用于求取矩形结构元行方向膨胀向量及列方向膨胀向量;

膨胀操作单元,用于使用所述行方向膨胀向量对感兴趣区域进行行方向膨胀操作;使用所述列方向膨胀向量对行方向膨胀操作后的感兴趣区域进行列方向膨胀操作;对列方向膨胀操作的结果求并集;

其中,行方向膨胀向量包括矩形结构元起始行任一像素、终止行任一像素相对于原点向量的行方向分量;列方向膨胀向量包括矩形结构元各列任一像素相对于原点向量的列方向分量;矩形结构元的原点是该矩形结构元的重心。

本发明的有益效果在于,通过对图像感兴趣区域进行行程编码,将结构元对感兴趣区域的膨胀由针对图像像素点的操作方式转换为针对行程的操作方式,降低了内存占用,提高了运算效率;同时通过选取矩形结构元对图像的感兴趣区域进行膨胀,将膨胀操作表示为矩形结构元镜像后所有像素点相对于其原点的向量对感兴趣区域各行程平移结果的并集,由于矩形结构元自身的形状特点,使得向量对感兴趣区域各行程的平移过程更为简化,进一步缩短耗时,使膨胀的实现更为高效。同时本发明的算法对矩形结构元的大小变化不敏感,无论采用3×3结构元还是100×100结构元对图像区域进行膨胀耗时增加不明显,占用内存在很大程度上得以减少。

附图说明

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

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

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

图3为本发明的矩形结构元示意图;

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

图5为本发明列方向膨胀向量对感兴趣区域膨胀作用示意图;

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

具体实施方式

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

本发明提出一种基于行程编码的快速区域膨胀算法,其对图像进行行程编码,所有操作均针对编码后的图像。虽然没有针对像素点操作的膨胀算法直观,但是其速度与内存占用却优于针对像素点操作的算法,而且脱离了图像例如:宽、高,与区域形状的限制。本发明算法适用的技术领域包括,但不限于:图像处理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为本发明矩形结构元的示意图,O点为矩形结构元的原点,本实施例选取矩形结构元的重心作为其原点。膨胀算法采用的是将矩形结构元的像素点相对于其原点镜像后的结果。设矩形结构元为B,镜像后的结果为结构元感兴趣区域为A。直观理解膨胀指的是在整个图像区域内平移结构元所有包含于感兴趣区域A的结构元原点位置组成的集合即为膨胀结果,数学表达式为第一公式:若感兴趣区域A所在图像含有m个像素点,矩形结构元B含n个像素点,则算法的复杂度为O(mn)。

本发明在此做了一次巧妙的变换:采用矩形结构元B膨胀感兴趣区域A还可表示为结构元所有像素点相对于其原点的向量对感兴趣区域A的平移结果的并集。数学表达式为第二公式:其中,向量如图3中的箭头所示。感兴趣区域A经过行程编码后,可表示为结构元所有像素点相对于其原点的向量对感兴趣区域A各行程的平移结果的并集。由于矩形结构元的原点为其重心,因此B的镜像为矩形结构元本身,因此本实施例中采用矩形结构元B膨胀感兴趣区域A实际可以表示为矩形结构元B所有像素点相对于其原点的向量对感兴趣区域A各行程的平移结果的并集。

矩形结构元B中任一像素点相对于其原点的向量均可分解为中任一列方向分量与任一行方向分量的集合。由于向量存在重合,如向量与重合了部分,它们共同作用的结果与最大向量单独作用的结果相同,若将矩形结构元B视为行程编码结构,则对于其任一行程而言,只需计算该行程起始点与终止点像素相对于其原点的向量对感兴趣区域A平移结果的并集即可。而矩形结构元自身特定的形状决定,其每一行程的起始列cb、终止列ce分别相同,如图3中的向量及分别相同,因此无论矩形结构元大小,在列方向只需一次计算矩形结构元B对感兴趣区域A的平移,得到A’,即针对感兴趣区域A的行程,可以同时改变一次其cb、ce的值(如图3中的向量等十个向量共35个像素点只需一次计算)。最后膨胀结果则为所有行方向分量对区域A’平移的并集。

因此,图3中与的作用进一步合并的结果就是,矩形结构元对感兴趣区域列方向的膨胀只需计算对cb的左移与对ce的右移即可,row保持不变;矩形结构元对感兴趣区域行方向的膨胀中,与虽然不能合并,但只需对row进行改变,最终可以以最少的计算量实现膨胀。与采用任意形状结构元对感兴趣区域进行膨胀的通用算法及针对像素点的算法相比,本发明对感兴趣区域一个行程列方向平移的计算量由1.5个像素点计算量减少为1个(只改变了cb与ce值,无需改变row的值,单像素点的平移需改变坐标R与C的值),且行方向平移计算量由1.5个像素点计算量减少为0.5个(只改变row的值)。

假设矩形结构元B与感兴趣区域A均为方形,矩形结构元B边长为L个像素,感兴趣区域A边长为N个像素,则基于像素点的膨胀算法复杂度为O(L2N2),采用任意形状结构元对感兴趣区域进行膨胀的通用算法复杂度为O(3LN),而本发明算法复杂度为O((1+0.5L)N)。假设L为3,本发明算法的速度将是采用任意形状结构元对感兴趣区域进行膨胀通用算法的3.6倍,是基于像素点膨胀算法的3.6N倍;若L为10,本发明算法速度将是采用任意形状结构元对感兴趣区域进行膨胀通用算法的5倍,是基于像素点膨胀算法的16.7N倍。可见,本发明采用矩形结构元对感兴趣区域进行膨胀的算法复杂度得到降低,时间消耗大大减少,在结构元及感兴趣区域较大的情况下尤为突出。

参见图4,本发明算法具体包括以下步骤:

A.对目标图像进行图像分割,获得感兴趣区域。首先,选取一适当的阈值,然后遍历目标图像中所有像素点,满足阈值要求的则为感兴趣区域像素点,最后将所有感兴趣区域的像素点标记并保存即形成感兴趣区域。

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

C.选取矩形结构元对感兴趣区域进行膨胀操作,其具体膨胀过程如下:

C1.求矩形结构元的列方向膨胀向量如图3中列方向膨胀向量即矩形结构元起始列任一像素、终止列任一像素相对于原点向量的列方向分量;

C2.使用对感兴趣区域A进行列方向膨胀操作,得结果A’,如图5所示。设感兴趣区域A中每一个行程的起始列与终止列分别为cb、ce,A’中的每一个行程的起始列与终止列分别为cb’、ce’,则:

C3.求矩形结构元的行方向膨胀向量如图3中的与行方向膨胀向量包括矩形结构元每一行任一像素相对于原点向量的行方向分量。

C4.使用步骤C3所得的每一个行方向膨胀向量对区域A’进行膨胀操作,如图6所示。设感兴趣区域A中行程的行号为row,A’中行程的行号为row',则:

C5.对上述膨胀操作的结果后求并集即为最终的膨胀结果,如图6所示。

以上步骤C是针对感兴趣区域采用行行程编码的形式所给出的膨胀操作步骤,感兴趣区域亦可采用列行程编码的形式,即以感兴趣区域最小行最小列像素点为第一个行程的起始点,依次按列提取连续的像素点片段为一个行程,直至完成整个感兴趣区域的编码,此时膨胀操作的步骤相应调整,具体如下:

求取矩形结构元行方向膨胀向量及列方向膨胀向量;

使用所述行方向膨胀向量对感兴趣区域进行行方向膨胀操作;

使用所述列方向膨胀向量对行方向膨胀操作后的感兴趣区域进行列方向膨胀操作;

对列方向膨胀操作的结果求并集;

其中,行方向膨胀向量包括矩形结构元起始行任一像素、终止行任一像素相对于原点向量的行方向分量;列方向膨胀向量包括矩形结构元各列任一像素相对于原点向量的列方向分量。

本发明同时提出一种基于行程编码的快速区域膨胀装置,该装置包括:第一模块,用于对图像感兴趣区域进行行程编码;第二模块,用于选取矩形结构元对编码后的感兴趣区域进行膨胀操作,该膨胀操作表示为矩形结构元所有像素点相对于其原点的向量对感兴趣区域各行程平移结果的并集。

其中,第二模块根据对感兴趣区域进行行程编码形式的不同,其结构也有一定差异。当感兴趣区域采用行行程编码的形式时,该第二模块包括:

向量求取单元,用于求取矩形结构元列方向膨胀向量及行方向膨胀向量;

膨胀操作单元,用于使用列方向膨胀向量对感兴趣区域进行列方向膨胀操作;使用行方向膨胀向量对列方向膨胀操作后的感兴趣区域进行行方向膨胀操作;并对行方向膨胀操作的结果求并集;

其中,列方向膨胀向量包括矩形结构元起始列任一像素、终止列任一像素相对于原点向量的列方向分量;行方向膨胀向量包括矩形结构元各行任一像素相对于原点向量的行方向分量。

当感兴趣区域采用列行程编码的形式时,该第二模块包括:

向量求取单元,用于求取矩形结构元行方向膨胀向量及列方向膨胀向量;

膨胀操作单元,用于使用行方向膨胀向量对感兴趣区域进行行方向膨胀操作;使用列方向膨胀向量对行方向膨胀操作后的感兴趣区域进行列方向膨胀操作;对列方向膨胀操作的结果求并集;

其中,行方向膨胀向量包括矩形结构元起始行任一像素、终止行任一像素相对于原点向量的行方向分量;列方向膨胀向量包括矩形结构元各列任一像素相对于原点向量的列方向分量。

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

本发明采用矩形结构元对经行程编码的图像感兴趣区域进行快速膨胀,经行程编码后表示图像的最小单位为行程,每个行程可包含的像素点数无限制,因此感兴趣区域的行程数必然比像素点数目少,与针对像素点进行膨胀的算法相比针对行程进行膨胀则变得更简单,算法复杂度远低于现有针对单个像素点的算法,耗时减少;本发明尤其适合于大矩形结构元对感兴趣区域的膨胀,其耗时不会随矩形结构元的增大而明显增加;感兴趣区域采用行程编码后,算法内存占用少,特别适用于对资源有一定限制的嵌入式平台;另外,采用行程编码后,对感兴趣区域的操作脱离了图像的宽度与高度的限制,直接保存任意形状任意大小的感兴趣区域,无数据冗余,适用性更广。

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

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