法律状态公告日
法律状态信息
法律状态
2011-03-23
未缴年费专利权终止 IPC(主分类):G06T5/30 授权公告日:20061011 终止日期:20100209 申请日:20040109
专利权的终止
2006-10-11
授权
授权
2005-02-23
实质审查的生效
实质审查的生效
2004-12-22
公开
公开
技术领域:
本发明涉及图像处理技术领域,尤其涉及图像处理中的快速形态学腐蚀、膨胀领域,兼及视频处理用的快速形态学腐蚀、膨胀方法技术。
背景技术:
形态学最初用于地质学和生态学领域,近些年,一些学者提出将其思想用于二值数字图像中,后又发展到灰度图像和视频的处理中。现在,数学形态学已经广泛用于图像降噪、模式识别,人工智能、图像处理以及视频对象的分割等领域,发挥巨大功能。
形态学腐蚀和膨胀是数学形态学的基本运算,这二者构成此后许多运算的基础,如开、闭、重构运算等。然而,形态学是利用区域比较的方法来定义的腐蚀、膨胀运算,其方法复杂度与卷积基本相同。在结构元素运动的过程中,产生了许多重叠区域,重叠区域中的信号点要进行重复多次的比较,浪费了运算时间,效率非常之低。
这一部分的目的是简要回顾形态学基本运算特别是腐蚀、膨胀的定义,并分析其作为方法的低效性。
几个形态学运算的定义
令En代表n维欧氏空间,Γ代表En→E的函数集合。
定义1:令BEn,定义B的转置为:
定义2:令f∈Γ,x∈En,BEn,定义对信号f(x)用点集B进行的腐蚀运算为:
εB(f)(x)=min{f(x+k),k∈B} (2)
称B为结构元素(SE);
定义3:令f∈Γ,x∈En,BEn,定义对信号f(x)用结构元素B进行的膨胀运算为:
定义4:f∈Γ,x∈En,BEn,定义对信号f(x)用结构元素B进行的开、闭运算分别为:
γB(f)=δB(εB(f)) (4)
B(f)=εB(δB(f)) (5)
上述定义的是形态学中的基本运算,很多其他形态学运算是基于这几个基本定义派生而来,这里不再赘述。
从上述定义中可以看出,为求某一个点A的腐蚀值,需要将结构元素的原点放置在A点处,并且在结构元素所覆盖的点中求出最小值,并赋值到A点。图1所示为在静止图像种计算A点腐蚀值时结构元素的位置。对于膨胀运算,应将结构元素的原点放置在该点,并将其转置,再在覆盖区域求最大值赋值到A点。
注意到,对于信号边缘的A点,将结构元素的原点放置在A点并不能保证结构元素所覆盖的其他各点都在信号的有效区域之内。如图2所示:将产生四个落在图像边缘之外的无效点。
对于此种情况,可以有以下几种处理方法:
a.忽略无效点,只在结构元素的有效点中求得最小值并赋值。图2中,有5个数据点将参与比较;
b.无效点置零。对于一般灰度图像的膨胀运算,这种做法的结果同a相同。但是对于灰度图像的腐蚀运算,可能会导致边缘点全部变成黑色,所以可以针对运算特性将无效点置成不同的值(腐蚀运算置为最大灰度值而膨胀运算置为零)以不至于影响边缘象素的连续性;
c.忽略所有边缘点A,这样,图像每进行一次腐蚀、膨胀运算就会比原图像小。
因为产生此边缘效应的象素不多,所以采用其中任何一种处理方法对于整个图像的处理都没有特别重要的影响。在本文中,拟采用第二种方法处理边缘象素。
以上定义的本身给出了一种实现形态学腐蚀、膨胀的方法。但是基于定义的方法具有很大的计算冗余。这可以从图3看出。
图3(a)是结构元素的原点移动到A点时结构元素所覆盖各点的分布情况,A点的腐蚀值应为(a)中浅灰色覆盖各点最小值,(b)图为结构元素向右移动一个象素时各点的分布。B点的腐蚀值为深灰色覆盖各点的最小值。比较(a)、(b)两图可以发现由于结构元素的移动,产生了重叠区域,如(c)图阴影区域所示。在求A、B的腐蚀值的两次比较过程中,重叠区域中的点将重复比较,造成计算冗余。
另外,在进行图像和视频处理中,经常使用的是矩形的结构元素。矩形结构元素操作简单,基本的形态学操作都能完成。针对以上特点,引入滑动窗口的概念,可以快速实现以矩形结构元素进行腐蚀、膨胀的形态学运算。该方法还可以扩展到n维信号的处理中。这种扩展对于视频序列有及其重要的作用,因为视频序列可以看成n=3的信号。另外,也将看到,对于某一类的可结合的类卷积运算(如均值滤波等),利用滑动窗口的思想也可以构造出高效、快速的方法。
发明内容:
本发明的目的在于提供一种基于滑动的矩形结构元素即滑动窗口概念的图像处理用的快速形态学腐蚀、膨胀方法,而且可扩展到三维视频处理,更可扩展到由矩形滑动窗口在信号源上进行的其它可结合的类卷积运算。
本发明的特征在于:
1、我们在矩形结构元素上附加了滑动窗口,它含有以下依次由计算机来执行图像处理的各个步骤:
(1)把将要进行处理的图像文件读取到内存中,存入图像的宽度WI、高度HI、图像的有效区域I,I={(x,y)|0≤x<WI,0≤y<HI},以及图像各点的像素值;
(2)在计算机中进行下列参数的初始化设置:
矩形结构元素的宽度WSE,也代表水平滑动窗口X的宽度,其值用该窗口所覆盖的像素数表示,用X[w](w=0,1,Λ,WSE-1)表示水平滑动窗口序号为w的单元;
矩形结构元素的高度HSE,也代表垂直滑动窗口Y的高度,其值用该窗口所覆盖的像素数表示,用Yi[v](v=0,1,Λ,HSE-1)表示该竖直滑动窗口序号为v的单元;
任选矩形结构元素的原点O,OX为该原点在矩形结构元素中所处位置的横坐标,OY为该原点在矩形结构元素中所处位置的纵坐标;
图像第i列第j行的像素为Pix[i][j],其中Pix是像素的英文符号缩写;
(3)利用矩形结构元素进行腐蚀、膨胀运算操作顺序和滑动窗口初始状态
利用矩形结构元素进行腐蚀运算时,依次将矩形结构元素的原点与图像的每一个像素对齐,扫描整幅图像,扫描顺序可以任意,一般选择从上到下,从左到右的次序,依次处理图像中的各个像素,先选定从左上角进入后,再从上往下扫描,使得结构元素的原点与图像中左上角相应的顶点重合,该点即为要求所需要的腐蚀运算的第一个像素点,此时该矩形结构元素所覆盖的图像中的像素点即为有效像素值,在腐蚀运算中,把落在图像边缘之外的无效点都置为最大灰度值MXG;
膨胀运算与腐蚀运算类似,不同的是要先将矩形结构元素进行转置,然后利用转置后的矩形结构元素扫描图像,而且在膨胀运算中,落在图像边缘之外的无效点都置为最小灰度值MNG;
对于任意的矩形结构元素WSE、HSE、OX、OY,我们在对每个像素进行腐蚀、膨胀运算处理过程中,将结构元素的原点OX、OY与进行处理的像素对齐,同时设置图像的临时坐标系,其原点为当前进行腐蚀、膨胀运算的像素点,可以得到:
所有竖直滑动窗口Yi的初始状态为:
所有水平滑动窗口X的初始状态为:
(4)初始化上述第一个像素其所在的行j的第一个竖直滑动窗口Y,即执行以下公式并对垂直滑动窗口的各Y单元进行数据填充,以记录图像原点附近的局部信息:
同时,Yi(j)[0]中存储的是竖直窗口内所有有效象素的最小值,即
(5)初始化上述第一个像素其所在的行j的第一个水平滑动窗口X,即执行以下公式并对水平滑动窗口的各个X单元进行数据填充,以记录图像原点附近的局部信息:
此时,Xj(i)[0]的值是与第i列到第i+WSE-1列相联的有效竖直滑动窗口的Y[0]值中最小的一个,即:
(6)从该j行第一个像素开始修改像素值;
(7)更新水平滑动窗口:
设水平滑动窗口X处于状态Xj(i),窗口向右移动一个象素并执行更新过程后,则X变为状态Xj(i+1),
此时Xj(i+1)[0]中存储的是结构元素水平移动后的所覆盖窗口中象素的最小灰度值;
(8)修改矩形结构元素向右移动一个像素后,该点像素值;
(9)重复执行(7)~(8),直至该行所有像素都处理完毕;
(10)更新竖直滑动窗口:
设某个竖直滑动窗口Yi处于状态Yi(j),更新之后,变为状态Yi(j+1),按下式进行更新:
(11)重复执行步骤(5)~(10),直到最后一行为止,此时整幅图像处理完毕。
在这一部分,将对利用滑动窗口的方法和基于定义的方法进行比较,给出结果图像以及基于腐蚀、膨胀运算的其他复合运算的实验结果,并阐述本方法的扩展应用。
运行环境为:Pentium III850MHz,1G RAM。
对于快速腐蚀、膨胀运算结果,选取标准8-bit灰度图像,并选用正方形结构元素分别选用如下方法:
a.基于滑动窗口的快速腐蚀运算(FE);
b.基于定义的腐蚀运算(EBD);
c.基于滑动窗口的快速膨胀运算(FD);
d.基于定义的膨胀运算(DBD)。
运算时间结果见表1(原图像:Lena:512×512),比较图线如图10。
表1灰度图像腐蚀、膨胀运算时间(单位:ms)
对于快速开、闭运算结果,比较如下方法:基于滑动窗口腐蚀、膨胀复合而得的开、闭运算(FO,FC)、基于定义的腐蚀、膨胀复合而得的开、闭运算(OBD,CBD)。结果如下:
表2灰度图像开、闭运算时间(单位:ms)
附图说明:
图1:计算A点的腐蚀值。
图2:结构元素覆盖的无效点。
图3:结构元素运动过程中的重叠区域:
(a)结构元素的原点在A点;
(b)结构元素的原点移动到B点;
(c)由于结构元素运动所重叠产生的重叠区域。
图4:竖直滑动窗口的建立:
(a)竖直滑动窗口的低序号单元落在图像外面,周围中的数字是像素值,下同;
(b)竖直滑动窗口完全落在图像内部;
(c)竖直滑动窗口的高序号单元落在图像外面。
图5:水平滑动窗口的建立:
(a)水平滑动窗口的低序号单元落在图像外面;
(b)水平滑动窗口完全落在图像内部;
(c)水平滑动窗口的高序号单元落在图像外面。
图6:本发明所述方法的程序流程框图:
(a)基于滑动窗口方法的图像(或视频)信号处理的流程框图;
(b)基于滑动窗口的快速形态学腐蚀、膨胀方法的流程框图。
图7:窗口的初始化:
(a)WSE=5,HSE=4,OX=3,OY=2的结构元素;
(b)窗口初始化和图像原点腐蚀值的形成。
图8:水平滑动窗口的更新。
图9:竖直滑动窗口的更新。
图10:灰度图像腐蚀、膨胀运算时间比较图。
图11:灰度图像开、闭运算时间比较图。
图12:灰度图像均值滤波运算时间比较图。
图13:运用9×9结构元素进行下述5种运算的实际结果图:
(a)原图像;
(b)腐蚀运算;
(c)膨胀运算;
(d)开运算;
(e)闭运算;
(f)均值滤波运算。
图14:视频序列Foreman(352×288×300)的前15帧腐蚀运算结果(前15帧),结构元素大小:5×5×5。
图15:视频系列腐蚀运算时间比较图。
具体实施方式:
如前所述,在数学形态学中,最普遍应用的是矩形结构元素,并且原点在矩形区域内,即:对于结构元素M满足:O∈M,O是En的原点。这是以下将提出的滑动窗口方法的前提条件。
因为矩形结构元素的构成非常有序,并且移动过程中产生的重叠区域也是矩形,这种特性适合实现滑动窗口方法。
下面将以静止8-bit灰度图像为例,说明滑动窗口的定义、构成和操作。对于三维乃至更高维的信号,很容易将此方法进行扩展。
用以下符号表示图像及结构元素的尺寸和位置。
WI——图像的宽度;
HI——图像的高度;
I——图像的有效区域,即:I={(x,y)|0≤x<WI,0≤y<HI};
WSE——矩形结构元素的宽度;
HSE——矩形结构元素的高度;
OX——结构元素原点在矩形结构元素中所处位置的横坐标;
OY——结构元素原点在矩形结构元素中所处位置的纵坐标;
MXG——最大象素灰度值,对于8-bit灰度图像为255;
MNG——最小象素灰度值,对于8-bit灰度图像为0;
Pix[i][j]——图像第i列第j行的象素。
滑动窗口是附加在图像的行与列上的小缓冲区,每个缓冲区包含若干可存储一个象素值的单元。为用已知结构元素对上述图像进行腐蚀运算,需要在每一列上附加一个HSE个单元的竖直滑动窗口,称为与该列相联的滑动窗口。除了这WI个竖直滑动窗口以外,还需要一个WSE个单元的水平滑动窗口。这个水平滑动窗口在需要的时候与某一行相联。
用与Yi表示与第i(i=0,1,Λ,WI-1)列相联的竖直滑动窗口,令Yi[v](v=0,1,Λ,HSE-1)表示该竖直滑动窗口序号为v的单元;
水平滑动窗口用X表示,用X[w](w=0,1,Λ,WSE-1)表示水平滑动窗口序号为w单元。
将竖直滑动窗口Yi“放置”在第i列上的时候,落在窗口内的竖直方向上连续的有效象素最多有HSE个。窗口各单元所存放的就是由这些象素提供的局部信息。而放置竖直滑动窗口的时候会产生如下三种相对位置关系:
a.有若干低序号单元落在图像外面;
b.窗口完全在图像内部;
c.有若干高序号单元落在图像外面。
图4的(a)、(b)、(c)分别表示了这几种情况(其中HSE=4)。
图4同样给出了竖直滑动窗口各单元的数据的建立过程,如下所述:
记Yi(j)为将竖直滑动窗口Yi放置到第i列,0号单元与第j行对齐的状态,它覆盖了象素Pix[i][j]~Pix[i][j+HSE-1]。(如果象素不在图像内部,用MXG虚拟其灰度值。)
那么:
这样,Yi(j)[0]中存储的是竖直窗口内所有有效象素的最小值。
即:
而Yi(j)[v],v≠0则代表其他局部信息,这些信息将用于更新窗口以获得滑动后的Yi(j)[0]值。
与竖直滑动窗口类似,水平滑动窗口是和某一行相联系的,所不同的是,竖直滑动窗口必须保证每一列私有一个,各列同时使用,而水平窗口是由多行顺序使用,所以只有一个即可。
记Xj(i)表示满足以下条件的X的状态:
a.水平滑动窗口X放置在第j行;
b.其0号单元欲第i列对齐;
c.所有竖直滑动窗口Yx处于状态Yx(j)。
此时X将最多覆盖图像的WSE个水平连续的有效象素。它与图像的相对位置也将出现三种情况,如图5(a)、(b)、(c)所示(WSE=5)。
水平滑动窗口所求的是整个矩形结构元素覆盖区域内象素点的局部信息,这就要利用到上面竖直滑动窗口已经得到的比较结果。所以水平滑动窗口各单元数据并非由象素灰度直接构成,而是从各个竖直滑动窗口中得到的。
在Xj(i)时,X覆盖象素Pix[i][j]~Pix[i+WSE-1][j]。(如果象素不在图像内部,用MXG虚拟其所在列的Y[0]值。)
则:
上式表明,Xj(i)[0]的值是与第i列到第i+WSE-1列相联的有效竖直滑动窗口的Y[0]值中最小的一个。又由(7)式,有下式成立:
即Xj(i)[0]是结构元素所代表的矩形区域内有效象素的最小值。
滑动窗口方法操作流程如图6(a)所示:
●首先,我们将要进行处理的图像或视频文件读取到内存中。
●其次,进行初始参数的设置,例如矩形结构元素的宽度、高度(如果处理的是视频还要设置深度信息),结构元素原点在矩形结构元素中所处位置的横坐标和纵坐标。
●再次,利用基于滑动窗口的快速形态学运算进行图像(视频)运算。
●最后,处理过的图像(视频)显示或者保存,以便进一步处理等。
基于滑动窗口的快速形态学运算的子程序如图6(b)所示,从图中可以看出,滑动窗口最主要的两个操作就是初始化和更新。
a.初始化
初始化操作建立并按照格式填写滑动窗口的各个单元,为滑动做好准备。
如前所述,腐蚀运算是将某象素邻域的点中最小灰度值赋值给该象素的过程。为了正确的建立该点邻域的点集,必须确定所有滑动窗口的初始状态。
如图7,(WSE=5,HSE=4,OX=3,OY=2),对图像原点的腐蚀运算实际上只在4个有效象素中取最小值,容易看到,各竖直滑动窗口Yi应处于状态Yi(-2),而水平滑动窗口X应处于状态状态X-2(-3),这时X-2(-3)[0]所记录的正是结构元素覆盖的4个有效象素的最小灰度。
对于任意的结构元素参数(WSE,HSE,OX,OY)不难看出,所有的竖直滑动窗口Yi应处于状态水平滑动窗口X应处于状态
初始化操作分作竖直滑动窗口的初始化和水平滑动窗口的初始化,初始化的过程就是执行(6)、(8)两式并对各个滑动窗口的单元进行数据填充,记录图像原点附近的局部信息。
b.更新
滑动窗口中储存的是某个区域的局部信息,而腐蚀运算是对整个图像来进行的,这就要求对滑动窗口进行移动,并且更新其中数据单元的数据。
从图6中可以看出,在求完某行的某一点的腐蚀值之后,要进行水平滑动窗口的更新;在处理完整整一行的象素之后,要进行所有竖直滑动窗口的更新。
由上所述,滑动窗口中对腐蚀运算有直接用处的是Xj(i)[0]值,而其他单元的数据就是为了快速更新滑动窗口而保留的。
先讨论水平滑动窗口的更新。
设水平滑动窗口X处于状态Xj(i),窗口向右移动一个象素并执行更新过程后,则X变为状态Xj(i+1)。
更新过程如下:
设所有竖直滑动窗口Yx处于状态Yx(j),第i+WSE列滑动窗口的0号单元数据为
下面的(10)、(11)两式给出了更新操作过程,更新之后水平滑动窗口将处于状态Xj(i+1)。
此时Xj(i+1)[0]中存储的是结构元素水平移动后的所覆盖窗口中象素的最小灰度值。
图8为图5(b)情况下,水平滑动窗口向右移动一个象素的更新过程。
对于竖直滑动窗口,其更新过程和水平窗口几乎相同:设某个竖直滑动窗口Yi处于状态Yi(j),更新之后,变为状态Yi(j+1),按下式进行更新:
对于图4(b)的竖直滑动窗口向上移动一个象素,更新过程如图9所示。
下面是滑动窗口方法的扩展应用:
a.扩展应用之一:均值滤波器
由滑动窗口的特性可知,本方法将不只适用于腐蚀、膨胀运算,而对于由矩形窗口在信号源上进行可结合的类卷积运算(如最大值、最小值、加法,乘法等)的一类问题都可以有效的使用,只需将IV中方法中求最小(最大)值的运算变换为相应的运算即可。
如可利用滑动窗口方法实现均值滤波器MVF,矩形窗口B的均值滤波器定义如下。
使用滑动窗口进行的快速均值滤波实验结果如下(其中FM代表快速方法结果,MBD代表基于定义的方法):
表3灰度图像均值滤波运算时间(单位:ms)
图13是利用9×9结构元素进行上述五种运算的实验结果图。
b.扩展应用之二:视频序列的形态学运算
本方法还可以应用到高维信号的处理过程中。在视频序列中对象的分割、提取中经常要用到形态学运算,这种运算是对于整个序列进行的三维运算。滑动窗口方法可以扩展到三维运算中。在三维的滑动窗口方法中,还要加上若干深度方向上的滑动窗口,并使之在该方向上滑动。以下是对于CIF格式的视频序列Foreman(352×288×300)以5×5×5结构元素进行腐蚀运算的实验结果(前15帧)。
运算时间如下表所示,比较图线如图15。
表4视频序列腐蚀运算时间(单位:s)
下面是基于滑动窗口的运算分析:
引入滑动窗口的目的在于记录已经比较过的局部信息,在以后的计算中可以直接读取并参与比较,以达到减少并消除重复比较的计算冗余。
时间复杂度分析
执行基于形态学快速方法进行图像的腐蚀运算,运算时间与结构元素的周长成线性关系,分析如下。
数据比较在以下过程中进行:
a.竖直滑动窗口的初始化:
每个竖直窗口初始化需要至多HSE-1次数据比较(视OY值而定),共WI个竖直窗口,至多共需要WI×(HSE-1)次竖直初始化数据比较;
b.水平滑动窗口的初始化:
每行开始时要进行水平滑动窗口的初始化,每次需要至多WSE-1次数据比较(视OX而定),共HI次初始化,至多共需要HI×(WSE-1)次水平初始化数据比较;
c.水平滑动窗口的更新:
对每一次更新水平滑动窗口,考虑如下两种极端情形:
c.1最好情况
如果
c.2最坏情况
如果
假设各种情况出现的概率相同,则每进行一次水平窗口更新,平均数据比较次数为WSE/2。每一行的更新次数约为WI,共HI行,所以用于更新水平滑动窗口的平均数据比较次数约为WI×HI×WSE/2。
d.竖直滑动窗口的滑动:
每个竖直滑动窗口更新一次平均需要HSE/2次数据比较,每个窗口更新HI次,共WI个窗口,则用于更新竖直滑动窗口的平均数据比较次数为WI×HI×HSE/2。
综上,对二维静止图像进行腐蚀运算,总的数据比较次数约为:
WI×(HSE-1)+HI×(WSE-1)+WI×HI×(WSE+HSE)/2≈WI×HI×(WSE+HSE)/2
每个象素平均为
除上述时间开销外,在窗口更新过程中还有一些数据移动操作,如23,27,41,45行中的赋值语句。事实上,更新一次水平窗口和竖直窗口,分别需要进行WSE次和HSE数据移动,对整幅图像进行腐蚀运算所进行的窗口数据移动共有约WI×HI×(WSE+HSE)次数据移动。每个象素平均为WSE+HSE次。
从以上讨论可以看出,应用滑动窗口方法对已知图像进行腐蚀运算,运行时间将为O(WSE+HSE)。
对于基于定义的方法,每个象素都要和邻域内WSE×HSE-1个象素进行比较,平均比较次数为WSE×HSE-1,所以其运行时间为O(WSE×HSE)。
方法空间复杂度分析:
本方法需要额外的存储空间来存放滑动窗口的数据,缓冲局部的比较信息,达到提高运算速度的目的。如前所述,共需要WI个竖直滑动窗口,每个窗口需要HSE个能存储一个象素灰度的数据单元;另外需要一个有WSE个单元的水平滑动窗口。这样,共需要额外的存储开销为:WI×HSE+WSE个单元。对于8-bit灰度图象,为WI×HSE+WSE个字节。相对整幅图像WI×HI个单元的存储量来说,这些额外存储是微不足道的。
机译: 在数字图像处理中实现膨胀和腐蚀转换的设备和方法
机译: 在灰度图像处理中实现膨胀和腐蚀转换的装置和方法
机译: 在灰度图像处理中实现膨胀和腐蚀转换的装置和方法