数字图像处理 第11章-表示和描述
11.1 表示
11.1.1 边界追踪
我们假设:
(1)处理的是二值图像,其目标和背景点分别标为1和0
(2)图像已使用值为0的边界填充,因而消除了目标与图像边界合并的可能性。
为方便起见,我们仅限于讨论单个区域。通过单独地处理各个区域,该方法可扩展到多个不相交的区域。
给定一个二值区域R或其边界,追踪R的边界或给定边界的算法由如下步骤组成:
1、令起始点
b
0
b_0
b0为图像中左上角标记为1的点。使用
c
0
c_0
c0表示
b
0
b_0
b0西侧的邻点[见图11.1(b)]。很明显,
c
0
c_0
c0总是背景点。从
c
0
c_0
c0开始按顺时针方向考察
b
0
b_0
b0的8个邻点。令
b
1
b_1
b1表示所遇到的值为1的第一个邻点,并直接令
c
1
c_1
c1(背景)是序列中
b
1
b_1
b1之前的点。存储
b
0
b_0
b0和
b
1
b_1
b1的位置,以便在步骤5中使用。
2、令
b
=
b
1
b=b_1
b=b1,和
c
=
c
1
c=c_1
c=c1[见图11.1©]。
3、从c开始按顺时针方向行进,令b的8个邻点为
n
1
,
n
2
,
⋅
⋅
⋅
,
n
8
n_1,n_2,···,n_8
n1,n2,⋅⋅⋅,n8。找到标为1的第一个
n
k
n_k
nk。
4、令
b
=
n
k
b=n_k
b=nk和
c
=
n
k
−
1
c=n_{k-1}
c=nk−1。
5、重复步骤3和步骤 4,直到
b
=
b
0
b=b_0
b=b0 且找到的下一个边界点为
b
1
b_1
b1
当算法停止时,所找到的b点的序列就构成了排列后的边界点的集合。
11.1.2 链码
链码用于表示由顺次连接的具有指定长度和方向的直线段组成的边界。典型地,这种表示基于这些线段的4连接或8连接。每个线段的方向使用一种数字编号方案编码。以这种方向性数字序列表示的编码称为佛雷曼链码。
数字图像通常以一种网格形式来获取并处理,在这种网格形式中,x和y方向的间距相等,所以,链码可以通过追踪一个边界产生,也就是说,以顺时针方向,并且对连接每对像素的线段赋予一个方向的方法产生。这种方法通常是不可接受的,原因有二:(1)得到的链码往往太长,(2)噪声或不完美分割沿边界引起的任何较小干扰都会导致编码的变化,而这种变化与边界的主要形状特征可能是不相关的。
经常用于解决这些问题的一种方法是选取一个较大的网格间距来对边界重取样,如图 11.4(a)所示。然后,当边界穿过网格时,将一个边界点赋给大网格的一个节点,具体取决于原始边界与该节点的接近程度,如图11.4(b)所示。然后,按这种方法得到的重取样边界可由一个4链码或8链码表示。图11.4(c)显示了由8方向链码表示的粗略边界点。从8链码转换为4链码或者从4链码转换为8链码是一件简单的事情。图11.4(c)中的起始点位于边界的左上角处,它给出了链码 0766…12。如所期望的那样,结果编码表示的精度取决于取样网格的间距。
边界的链码取决于起始点,链码可以通过一个简单的过程关于起始点归一化。
11.1.3 使用最小周长多边形的多边形近似
数字边界可以用多边形以任意精度来近似。对于一条闭合边界,当多边形的边数等于边界上的点数时,这种近似会变得很精确,此时,每对相邻的点定义了多边形的一条边。多边形近似的目的是使用尽可能少的线段数来获取给定边界的基本形状。通常,该问题并不容易求解,且求解过程会转化为耗时的迭代搜索。然而,适度复杂的多边形近似技术还是很适合于图像处理任务。在这些近似技术中,最有力的一种技术是使用最小周长多边形(MPP)来表示边界。
产生计算 MPP 的算法的一种直观方法是,用图11.6(b)那样的一组连接单元的集合封人图11.6(a)中的一条边界。我们可以将该边界想象为一个橡皮条。当允许橡皮条收缩时,橡皮条会受到由这些单元定义的边界区域的内、外墙的约束。最终,该收缩会产生一个(关于这种几何排列的)最小周长的多边形,它被限制在用单元条封闭的区域内,如图11.6(c)所示。
MPP算法有如下性质:
1、由简单连接的单元组合体为界的MMP是非自相交的
2、MMP的每个凸顶点都是一个W顶点,并非边界的每个W顶点都是MMP上的一个顶点
3、MMP的每个镜像凹顶点都是一个B顶点,并非边界的每个B顶点都是MMP上的一个顶点
4、所有的B顶点要么在MMP上,要么在MMP外;W顶点同理
5、单元组合体中包含的顶点序列的最左上角顶点,总是MMP的一个W顶点
11.1.4 其他多边形近似方法
聚合技术
基于平均误差或其他准则的聚合技术已应用于多边形近似问题。一种方法是沿一条边界来聚合一些点,直到拟合这些聚合点的直线的最小均方误差超过一个预设的值。当这种条件出现时,存储该直线的参数,将误差设为零,并且重复该过程,沿边界聚合新的点,直到该误差再次超过预设的阈值。这一过程结束后,相邻线段的交点就构成多边形的顶点。这种方法的主要难点之一是得到的近似顶点并不总是对应于原始边界中的形变(如拐角),因为在误差超过阈值前,不会开始画一条新的直线。
分裂技术
分裂边界线段的一种方法是将线段不断地细分为两部分,直到满足规定的准则为止。例如,个要求可能是:一条边界线段到连接其两个端点的直线间的最大垂直距离不超过一个预设的阈值。如果准则满足,则与直线有着最大距离的点就成为一个顶点,这样就将初始线段分成了两条子线段。这种方法在寻找变化显著的点时具有优势。对一条闭合边界,最好的起始点通常是边界上的两个最远点。
11.1.5 标记图
标记图是边界的一维函数表示,它可以使用各种方式来生成。一种最简单的方法是以角度的函数的形式画出质心到边界的距离,如图 11.10所示。然而,不管如何生成标记图,基本概念都是将边界表示简化为描述起来可能比原始二维边界更简单的一维函数。
11.1.6 边界线段
将边界分解为线段通常是有很用的。分解降低了边界的复杂性,从而简化了描述过程。当边界线包含一个或多个携带形状信息的明显凹度时,这种方法尤其有吸引力。此时,使用由边界所围成区域的凸壳就成为边界鲁棒分解的有力工具。
为了解如何使用这些概念来把边界分成有意义的线段,考虑图11.12(a),图中显示了1个物体(集合 S)和它的凸缺(阴影区)。
区域边界可以按如下方式来分割:追踪S的轮廓,并标记进人或离开一个凸缺的转变点。
图 11.12(6)显示了这种情况下的结果。在原理上,这种方案与区域大小和方向无关。
由于数字化、噪声和分割的变形的影响,数字边界往往是不规则的。这些影响通常会导致在整个边界上有着随机散布的无意义小的凸缺。与其试图通过后处理分出这些不规则边界,不如在对边界分割前用通常的方法平滑边界。有很多方法可以做到这一点。一种方法是追踪边界,并使用一个像素沿该边界的k个相邻像素的平均坐标代替这个像素的坐标。这种方法适用于较小的不规则边界,但它耗费时间并且难于控制。较大的k值会导致过度平滑,而较小的k值在某些边界线段可能会使平滑不够充分。一种更为稳定的技术是在找到一个区域的凸缺前,先使用多边形近似。
11.1.7 骨架
表示一个平面区域的结构形状的一种重要方法是将它简化为图形。这种简化可以通过一种细化(也称为骨架化)算法得到该区域的骨架来实现。在大范围的图像处理问题中,细化过程起着核心作用从印制电路板的自动检测到空气过滤器中的石棉纤维的计数。
11.2 边界描绘子
11.2.1 一些简单的描绘子
边界的长度是其最简单的描绘子之一。一条边界上的像素数量可以给出其长度的粗略近似。对于在两个方向上以单位间距定义的链码曲线,垂直分量和水平分量的数量加上对角分量的 2 \sqrt 2 2倍,可给出曲线的准确长度。
边界B的直径定义为
D
i
a
m
(
B
)
=
m
a
x
i
,
j
[
D
(
p
i
,
p
j
)
]
Diam(B)=max_{i,j}[D(p_i,p_j)]
Diam(B)=maxi,j[D(pi,pj)]
式中,D是一种距离度量,
p
i
p_i
pi和
p
j
p_j
pj是边界上的点。直径的值和连接组成该直径的两个端点的直线段(该直线称为边界的长轴)的方向是边界的有用描绘子。边界的短轴定义为与长轴垂直的直线。由边界与两个轴相交的4个外部点所组成的方框这样的长度,可以完全包围该边界。刚刚描述的这个方框称为基本矩形,长轴与短轴之比称为边界的偏心率。偏心率也是一个有用的描绘子。
曲率定义为斜率的变化率。一般来说,获得数字边界上某个点处曲率的可靠度量较为困难,因为这些边界往往都是局部“粗糙的”。然而,有时使用相邻边界线段的斜率差作为这两条线段交点处曲率的描绘子,被证明是有用的。
11.2.2 形状数
对于闭合边界,"为偶数,其值限制了不同形状的数量。图11.17显示了阶为4、6、8的所有形状,以及它们的链码表示、一次差分和相应的形状数。
一次差分是通过将链码作为循环序列来计算得到的。
尽管链码的一次差分与旋转无关,但总体而言,已编码的边界取决于网格的方向。
归一化网格方向的一种方法是用前一节中定义的基本矩形的边对准链码网格。
11.2.3 傅里叶描绘子
图11.19显示了xy平面内的一个K点数字边界。
从任意点(x,y)开始,以逆时针方向在该边界上行进时,会遇到坐标对 ( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x K − 1 , y K − 1 ) (x_0,y_0),(x_1,y_1),(x_2,y_2),…,(x_{K-1},y_{K-1}) (x0,y0),(x1,y1),(x2,y2),…,(xK−1,yK−1)。这些坐标可以表示为 x ( k ) = x k , y ( k ) = y k x(k)=x_k,y(k)=y_k x(k)=xk,y(k)=yk的形式。
使用这种表示法,边界本身可以表示为坐标序列 s ( k ) = [ x ( k ) , y ( k ) ] , k = 0 , 1 , 2. … , K − 1 s(k)=[x(k),y(k)],k=0,1,2.…,K-1 s(k)=[x(k),y(k)],k=0,1,2.…,K−1。
此外,每个坐标对可当做一个复数来处理,即
s
(
k
)
=
x
(
k
)
+
j
y
(
k
)
s(k)=x(k)+jy(k)
s(k)=x(k)+jy(k)
其中k=0,1,2,…,K-1。也就是说,x轴为复数序列的实轴,y轴为复数序列的虚轴。尽管对该序列的解释是全新的,但边界本身的性质并未改变。当然,这种表示方法的一大优点是它将二维问题简化成了一维问题。
已知s(k)的离散傅里叶变换(DFT)为
a
(
u
)
=
∑
k
=
0
K
−
1
s
(
k
)
e
−
j
2
π
u
k
/
K
a(u)=∑^{K-1}_{k=0}s(k)e^{-j2πuk/K}
a(u)=k=0∑K−1s(k)e−j2πuk/K
式中u=0,1,2,…,K-1。复系数a(u)称为边界的傅里叶描绘子。
这些系数的傅里叶反变换可恢复s(k)。则有:
s
(
k
)
=
1
K
∑
u
=
0
K
−
1
a
(
u
)
e
j
2
π
u
k
/
K
s(k)={1\over K}∑^{K-1}_{u=0}a(u)e^{j2πuk/K}
s(k)=K1u=0∑K−1a(u)ej2πuk/K
式中,k= 0,1,2.…,K-1。
令上式中令a(u)=0,u>P-1,则有:
s
^
(
k
)
=
1
K
∑
u
=
0
K
−
1
a
(
u
)
e
j
2
π
u
k
/
P
\hat s(k)={1\over K}∑^{K-1}_{u=0}a(u)e^{j2πuk/P}
s^(k)=K1u=0∑K−1a(u)ej2πuk/P
式中,k=0,1,2.…,K-1。尽管求
s
^
(
k
)
\hat s(k)
s^(k)的每个分量时仅使用了P项,但k的范围仍是从0到K-1。也就是说,在近似边界中存在同样数量的点,但项数不像在每个点的重建中那样多。回顾第4章中关于傅里叶变换的讨论可知,高频分量说明精细细节,而低频分量决定全局形状。因此,P越小,边界天失的细节就越多。
下图为傅里叶描绘子的一些基本性质
11.2.4 统计矩
边界线段(和标记图波形)的形状可使用统计矩来定量描述,如均值、方差和高阶矩。
为了解如何实现这种定量描述,考虑图11.21(a),它显示了一段边界,而图11.21(b)显示了以任意变量r的一维函数 g ( r ) g(r) g(r)描述的线段。
该函数是这样获得的:先将该线段的两个端点连接起来,然后旋转该直线线段,直至其为水平线段。此时,所有点的坐标也旋转相同的角度
让我们将幅度g视为一个离散随机变量v,并形成一个幅度直方图 p ( v i ) , i = 0 , 1 , 2 , … , A − 1 p(v_i),i=0,1,2,…,A-1 p(vi),i=0,1,2,…,A−1,其中A是我们分割幅度尺度的离散幅度增量数。
然后,记住
p
(
v
i
)
p(v_i )
p(vi)是值
v
i
v_i
vi出现的概率估计,故关于其均值的v的第n阶矩为
μ
n
(
v
)
=
∑
i
=
0
A
−
1
(
v
i
−
m
)
n
p
(
v
i
)
μ_n(v)=∑^{A-1}_{i=0}({v_i-m})^np(v_i)
μn(v)=i=0∑A−1(vi−m)np(vi)
其中
m
=
∑
i
=
0
A
−
1
v
i
p
(
v
i
)
m=∑^{A-1}_{i=0}v_ip(v_i)
m=i=0∑A−1vip(vi)
量m为v的均值或平均值, μ 2 μ_2 μ2为v的方差。通常,仅使用前几个矩很少可以区分明显不同形状的信号。
一种替代方法是将
g
(
r
)
g(r)
g(r)归一化为单位面积,并把它当做直方图来处理。
换句话说,
g
(
r
)
g(r)
g(r)现在作为值r出现的概率来处理。此时,r为一个随机变量,故矩为
μ
n
(
r
)
=
∑
i
=
0
K
−
1
(
r
i
−
m
)
n
g
(
r
i
)
μ_n(r)=∑^{K-1}_{i=0}({r_i-m})^ng(r_i)
μn(r)=i=0∑K−1(ri−m)ng(ri)
其中
m
=
∑
i
=
0
K
−
1
r
i
g
(
r
i
)
m=∑^{K-1}_{i=0}r_ig(r_i)
m=i=0∑K−1rig(ri)
上式中,K 是边界上的点数,
g
n
(
r
)
g_n(r)
gn(r)直接与
g
(
r
)
g(r)
g(r)的形状相关。例如,二阶矩
μ
2
(
r
)
μ_2(r)
μ2(r)度量曲线关于r的均值的扩展程度,而三阶矩
μ
3
(
r
)
μ_3(r)
μ3(r)度量曲线关于均值的对称性。
11.3 区域描述子
11.3.1 一些简单的描绘子
一个区域的面积定义为该区域中像素的数量。区域的周长是其边界的长度。尽管面积和周长有时也被用做描绘子,但它们主要应用于感兴趣区域尺寸不变的情形。
这两个描绘子频繁用于度量一个区域的致密性,定义为
(
周长
)
2
/
面积
(周长)^2/面积
(周长)2/面积。另一个稍微不同的(标量乘子内)致密性描绘子是圆度率,即一个区域的面积与具有相同周长的一个圆(最致密的形状)的面积之比。周长为P的一个圆的面积为
P
2
/
4
π
P^2/4π
P2/4π。因此,圆度率R由下式给出:
R
c
=
4
π
A
P
2
R_c={4πA\over P^2}
Rc=P24πA
其中,A 是所讨论区域的面积,P是其周长。对于圆形区域,该度量值为1,对于方形区域,该度量值为π/4。致密性是一个无量纲的度量,当然,在忽略调整数字区域大小和旋转数字区域时可能引入的计算误差的情形下,它对均匀尺度变化和方向不敏感。
11.3.2 拓扑描绘子
拓扑特性对于图像平面区域的整体描述是很有用的。简单来说,拓扑学是研究未受任何变形影响的图形的性质,前提是该图形未被撕裂或粘连(有时称为橡皮膜变形)。例如,图11.23显示了一个带有两个孔洞的区域。如果一个拓扑描绘子由该区域内的孔洞数量来定义,那么这种性质明显不受拉伸或旋转变换的影响。然而,一般来说,如果该区域被撕裂或折叠,那么孔洞数会发生变化。注意由于拉伸会影响距离,故拓扑特性与距离或基于距离度量概念的任何特性无关。
另一个对区域描述有用的拓扑特性是连通分量的数量。
图形中孔洞的数量 日和连通分量的数量C,可用于定义欧拉数 E:
E
=
C
−
H
E=C-H
E=C−H
欧拉数也是一种拓扑特性。例如,图11.25 中所示的区域有分别等于0和-1的欧拉数,因为“A”一个连通分量和一个孔洞,而“B”有一个连通分量和两个孔洞。
使用欧拉数,可非常简单地解释由直线线段表示的区域(称为多边形网络)。图11.26显示了一个多边形网络。将这样一个网络的内部区域分类为面和孔通常是很重要的。用V表示顶点数,用Q表示边数,用F表示面数,那么可得出称为欧拉公式的如下关系:
V
−
Q
+
F
=
C
−
H
V-Q+F=C-H
V−Q+F=C−H
可以看出上式等于欧拉数:
V
−
Q
+
F
=
C
−
H
=
E
V-Q+F=C-H=E
V−Q+F=C−H=E
图11.26中的网络有7个顶点、11条边、2个面、1个连通区域和3个孔,因此欧拉数为-2:
7
−
11
+
2
=
1
−
3
=
−
2
7-11+2=1-3=-2
7−11+2=1−3=−2
11.3.3 纹理
描绘区域的一种重要方法是量化该区域的纹理内容。尽管不存在纹理的正式定义,但在直觉上,这种描绘子提供了诸如平滑度、粗糙度和规律性等特性的度量。图像处理中用于描述区域纹理的三种主要方法是统计方法、结构方法和频谱方法。统计方法生成诸如平滑、粗糙、粒状的等纹理特征。结构技术处理图像像元的排列,如基于规则间距平行线的纹理描述。频谱技术基于傅里叶频谱的特性,主要用于检测图像中的全局周期性,方法是识别频谱中的高能量的窄波峰。
统计方法是描述纹理的最简方法之一,其使用一幅图像或一个区域的灰度级直方图的统计矩。
结构方法是基于结构概念的,它处理的基本单位是图像的纹理基元。
频谱方法
我们考虑对纹理描述很有用的傅里叶频谱的三个特征
(1)频谱中突出的尖峰给出纹理模式的主要方向
(2)频率平面中尖峰的位置给出模式的基本空间周期
(3)采用滤波方法消除任何周期分量而留下非周期性图像元素,然后采用统计技术来描述。
描述定量表征的频谱-能量描述的典型描述子为最高值的位置、幅度和轴向变化的均值与方差,以及该函数的均值和最高值之间的距离。
11.3.4 不变矩
大小为 M*N 的数字图像f(x,y)的二维(p+q)阶矩定义为
m
p
q
=
∑
x
=
0
M
−
1
∑
y
=
0
N
−
1
x
p
y
q
f
(
x
,
y
)
m_{pq}=∑^{M-1}_{x=0}∑^{N-1}_{y=0}x^py^qf(x,y)
mpq=x=0∑M−1y=0∑N−1xpyqf(x,y)
其中p=0,1,2,…和 q=0,1,2,…是整数。相应的(p+g)阶中心矩定义为
μ
p
q
=
∑
x
=
0
M
−
1
∑
y
=
0
N
−
1
(
x
−
x
ˉ
)
p
(
y
−
y
ˉ
)
q
f
(
x
,
y
)
μ_{pq}=∑^{M-1}_{x=0}∑^{N-1}_{y=0}(x-\bar x)^p(y-\bar y)^qf(x,y)
μpq=x=0∑M−1y=0∑N−1(x−xˉ)p(y−yˉ)qf(x,y)
式中p=0,1,2,…和q=0,1,2,…,其中
x
ˉ
=
m
10
m
00
y
ˉ
=
m
01
m
00
\bar x={m_{10}\over m_{00}} \quad \bar y={m_{01}\over m_{00}}
xˉ=m00m10yˉ=m00m01
由
η
p
q
η_{pq}
ηpq表示的归一化中心矩定义为
η
p
q
=
μ
p
q
μ
00
γ
η_{pq}={μ_{pq}\over μ^γ_{00}}
ηpq=μ00γμpq
其中
γ
=
p
+
q
2
+
1
γ={p+q\over 2}+1
γ=2p+q+1
其中p+q=2,3,…。
11.4 使用主分量进行描绘
使用主分量进行描绘适用于边界和区域,也是描绘一组空间上已配准图像的基础,但这些已配准图像的对应像素值是不同的。我们知道像素可以用一个三维向量来表示,那么图片的向量总体协方差矩阵可以定义为
C
X
=
E
{
(
x
−
m
x
)
(
x
−
m
x
)
T
}
C_X=E\{ (x-m_x)(x-m_x)^T\}
CX=E{(x−mx)(x−mx)T}
因为x是n维的,故
C
x
C_x
Cx和
(
x
−
m
x
)
(
x
−
m
x
)
T
(x-m_x)(x-m_x)^T
(x−mx)(x−mx)T是n*n阶矩阵。
C
x
C_x
Cx的元素
c
i
i
c_{ii}
cii是
x
i
x_i
xi的方差,即总体中x向量的第i个分量,
C
x
C_x
Cx的元素
c
i
j
c_{ij}
cij是这些向量元素
x
i
x_i
xi和
x
j
x_j
xj之间的协方差"。矩阵
C
X
C_X
CX是实对称的。如果元素
x
i
x_i
xi和
x
j
x_j
xj是不相关的,则它们的协方差为零,从而有
c
i
j
=
c
j
i
=
0
c_{ij}=c_{ji}=0
cij=cji=0。当n=1时,所有这些定义都简化为它们所熟悉的一维形式。
对于来自随机总体的个向量取样,均值向量可以通过使用常见的求平均值的表达式由样本来近似:
m
x
=
1
K
∑
k
=
1
K
m
x
m_x={1\over K} ∑^K_{k=1}m_x
mx=K1k=1∑Kmx
通过展开乘积
(
x
−
m
x
)
(
x
−
m
x
)
T
(x-m_x)(x-m_x)^T
(x−mx)(x−mx)T,则有:
C
X
=
1
K
∑
k
=
1
K
x
k
x
k
T
−
m
x
m
x
T
C_X={1\over K}∑^K_{k=1}x_kx_k^T-m_xm_x^T
CX=K1k=1∑KxkxkT−mxmxT
11.5 关系描绘子
我们将在关系描绘子的角度上扩展这一概念。这些内容对边界或区域同样适用,并且它们的主要目的是以重写规则的形式来获取边界或区域中的基本重复模式。
字符串是一维结构,所以将字符串应用于图像描述时,需要建立一种适当的方法来将二维位置关系简化为一维形式。大多数使用字符串来描述图像的应用均基于从感兴趣物体中提取连接线段的思想。一种方法是追踪一个物体的轮廓,并使用指定方向和/或长度的线段来对结果进行编码。
另一种更为通用的方法是使用有向线段来描述图像的各个部分(如较小的单色区域),除了采用首尾相连的方式外,这种有向线段也可采用其他的方式来连接。
字符串描述最适合于这样的应用,即应用中的基元连接性可以一种从头到尾的方式或其他连续方式来表示。有时,有着类似纹理或其他描绘子的区域可能是不连续的,这就要求具有描述这种情形的技术。处理这种情况的最有用的方法之一是使用树描绘子。
树的末梢是树底端(树叶)的节点集合,采用从左到右的顺序排列。例如,图 11.49 所示的树有根$和末梢 xy。
树中有两种类型的关键信息:
(1)关于节点的信息,是以描述节点的一组字来存储的
(2)一个节点与其相邻节点相联系的信息,是以指向那些相邻节点的一组指针来存储的。
当用于图像描述时,第一类信息识别一幅图像子结构(如区域或边界线段),而第二类信息定义这个子结构与其他子结构间的物理关系。