目录
1 表示
1.1 边界追踪
要求一个区域的边界上的点以顺或者逆时针方向排序。
假设:
1.处理的是二值图像,目标和背景点分别标为1和0.
2.图像已使用值为0的边界填充,消除了目标与图像边界合并的可能性
给定一个二值图像R或其边界,追踪R的边界或给定边界的算法的步骤为:
1.令起始点
b
0
b_0
b0为图像中左上角标记为1的点。使用
c
0
c_0
c0表示西侧的邻点。从
c
0
c_0
c0开始按顺时针方向考察的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的位置。
2.令b=
b
1
b_1
b1和c=
c
1
c_1
c1
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
n_k
nk和c=
n
k
−
1
n_{k-1}
nk−1
5.重复3和4,直到b=
b
0
b_0
b0且找到下一个边界点为
b
1
b_1
b1.
1.2 链码
链码用于表示由顺次连接的具有指定长度和方向的直线段组成的边界。典型地,这种表示基于这些线段的4连接或8连接。每个线段的方向使用一种数字编号方案编码。
数字图像通常以一种网格形式来获取并处理,在这种网格形式中,x和y方向的间距相等,所以,链码可以通过追踪一个边界产生,也就是说,以顺时针方向,并且对连接每对像素的线段赋予一个方向的方法产生。这种方法通常是不可接受的,原因有二:(1)得到的链码往往太长,(2)噪声或不完美分割沿边界引起的任何较小干扰都会导致编码的变化,而这种变化与边界的主要形状特征可能是不相关的。
边界的链码取决于起始点。然而,链码可以通过一个简单的过程关于起始点归一化,过程如下我们简单地将链码视为方向号码的一个循环序列,并重新定义起始点,以便得到号码序列的最小整数值。我们也可以针对旋转归一化(使用图11.3中方向的整数倍的角度),方法是使用链码的一次差分来替代链码本身。
1.3 最小周长多边形近似
数字边界可以用多边形以任意精度来近似。对于一条闭合边界,当多边形的边数等于边界上的点数时,这种近似会变得很精确,此时,每对相邻的点定义了多边形的一条边。多边形近似的目的是使用尽可能少的线段数来获取给定边界的基本形状。
最有力的一种技术是使用最小周长多边形来表示边界。
我们假设所考虑的边界本身不相交,这将产生简单连接的单元组合体。基于这些假设,并令W(白)和 B(黑)分别表示凸顶点和镜像凹顶点,我们将观察结果说明如下:
1.由简单连接的单元组合体为界的 MPP是非自相交的。
2.MPP的每个凸顶点都是一个W顶点,但并非边界的每个W顶点都是MPP的一个顶点。
3.MPP的每个镜像凹顶点都是一个B顶点,但并非边界的每个B顶点都是MPP的一个顶点。
4.所有的B顶点要么在MPP上,要么在MPP外:所有的W顶点要么在MPP上,要么在MPP 内。
5.单元组合体中包含的顶点序列的最左上角顶点,总是MPP的一个W顶点。
1.4 其他多边形近似方法
- 聚合技术
基于平均误差或其他准则的聚合技术已应用于多边形近似问题。一种方法是沿一条边界来聚合一些点,直到拟合这些聚合点的直线的最小均方误差超过一个预设的值。当这种条件出现时,存储该直线的参数,将误差设为零,并且重复该过程,沿边界聚合新的点,直到该误差再次超过预设的阈值。 - 分裂技术
分裂边界线段的一种方法是将线段不断地细分为两部分,直到满足规定的准则为止。例如,个要求可能是:一条边界线段到连接其两个端点的直线间的最大垂直距离不超过一个预设的阈值。如果准则满足,则与直线有着最大距离的点就成为一个顶点,这样就将初始线段分成了两条子线段。
1.5 标记图
标记图是边界的一维函数表示,它可以使用各种方式来生成。一种最简单的方法是以角度的函数的形式画出质心到边界的距离,不管如何生成标记图,基本概念都是将边界表示简化为描述起来可能比原始二维边界更简单的一维函数。
1.6 边界线段
将边界分解为线段通常是有很用的。分解降低了边界的复杂性,从而简化了描述过程。当边界线包含一个或多个携带形状信息的明显凹度时,这种方法尤其有吸引力。此时,使用由边界所围成区域的凸壳就成为边界鲁棒分解的有力工具。
实际上,由于数字化、噪声和分割的变形的影响,数字边界往往是不规则的。这些影响通常会导致在整个边界上有着随机散布的无意义小的凸缺。通常在对边界分割前用通常的方法平滑边界会更好。
1.7 骨架
表示一个平面区域的结构形状的一种重要方法是将它简化为图形。这种简化可以通过一种细化(也称为骨架化)算法得到该区域的骨架来实现。
一个区域的骨架可以用中轴变换(MAT)来定义。边界为B的区域R的MAT如下所示。对R中的每个点p,我们在B中找到与其最接近的邻点。如果p有多个这样的邻点,则认为p属于R的中轴(骨架)。
如下代码为骨架化算法代码
import cv2
import numpy as np
img = cv2.imread('c:\he.png', cv2.IMREAD_GRAYSCALE)
dst = img.copy()
skeleton = np.zeros(dst.shape, np.uint8)
while (True):
if np.sum(dst) == 0:
break
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (7, 7))
dst = cv2.erode(dst, kernel, None, None, 1)
open_dst = cv2.morphologyEx(dst, cv2.MORPH_OPEN, kernel)
result = dst - open_dst
skeleton = skeleton + result
cv2.waitKey(1)
cv2.namedWindow("result", 0)
cv2.resizeWindow("result", 640, 480)
cv2.namedWindow("img", 0)
cv2.resizeWindow("img", 640, 480)
cv2.imshow('result', skeleton)
cv2.imshow('img', img)
cv2.imwrite("output.png", skeleton)
cv2.waitKey(0)
cv2.destroyAllWindows()
2 边界描述子
2.1 简单描述子
-
边界B的直径定义为:
D i a m ( B ) = m a x [ D ( p i , p j ) ] Diam(B)=max[D(p_i,p_j)] Diam(B)=max[D(pi,pj)]D是一种距离度量, p i 和 p j p_i和p_j pi和pj是边界上的点。 -
边界的偏心率:
由边界与两个轴(长轴与短轴)相交的4个外部点所组成的方框,称为基本矩形,长轴与短轴之比称为边界的偏心率。 -
边界的曲率
斜率的变化率,使用相邻边界线段的斜率差作为这两条线段交点处曲率的描绘子。
2.2 形状数
链码边界的一次差分取决于起始点。一条基于四方向编码的边界的形状数,定义为最小量级的一次差分。形状数的阶n定义为其表示的数字个数。
2.3 傅里叶描绘子
边界本身可以表示为坐标序列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)
其中傅里叶描绘子的性质如下:
2.4 统计矩
边界线段(和标记图波形)的形状可使用统计矩来定量描述,如均值、方差和高阶矩。
将幅度g视为一个离散随机变量v,并形成一个幅度直方图
p
(
v
i
)
p(v_i)
p(vi),i=0,1,2.…,A-1,其中A是我们分割幅度尺度的离散幅度增量数。然后,记住
p
(
v
i
)
p(v_i)
p(vi)是值
v
i
v_i
vi出现的概率估计。
均值的v的第n阶矩为:
μ
(
v
)
=
∑
i
=
0
A
−
1
(
v
i
−
m
)
n
p
(
v
i
)
\mu (v)=\sum_{i=0}^{A-1}(v_i-m)^np(v_i)
μ(v)=∑i=0A−1(vi−m)np(vi),其中
m
=
∑
i
=
0
A
−
1
v
i
p
(
v
i
)
m=\sum_{i=0}^{A-1}v_ip(v_i)
m=∑i=0A−1vip(vi)
3 区域描绘子
3.1简单描绘子
- 区域的面积:该区域中像素的数量。
- 区域的周长:边界的长度。
- 圆周率 R c R_c Rc: R c = 4 π A p 2 R_c=\frac{4\pi A}{p^2} Rc=p24πA 。其中A是面积,p是周长。.
3.2 拓扑描绘子
拓扑特性与距离或基于距离度量概念的任何特性无关,拓扑学是研究未受任何变形影响的图形的性质。
图形中孔洞的数量H和连通分量的数量C,可用于定义欧拉数E:
E
=
C
−
H
E=C-H
E=C−H
欧拉公式:
V
−
Q
+
F
=
C
−
H
V-Q+F=C-H
V−Q+F=C−H,其中V表示顶点数,Q表示边数,F表示面数。
3.3 纹理
图像处理中用于描述区域纹理的三种主要方法是统计方法,结构方法和频谱方法。统计方法生成诸如平滑、粗糙、粒状的等纹理特征。结构技术处理图像像元的排列,如基于规则间距平行线的纹理描述。频谱技术基于傅里叶频谱的特性,主要用于检测图像中的全局周期性,方法是识别频谱中的高能量的窄波峰。
3.5 不变矩
大小为 M ∗ N M*N 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}=\sum_{x=0}^{M-1} \sum_{y=0}^{N-1} x^py^qf(x,y) mpq=∑x=0M−1∑y=0N−1xpyqf(x,y),相应的(p+q)阶中心矩定义为: μ p q = ∑ x = 0 M − 1 ∑ y = 0 N − 1 ( x − x ~ ) p ( y − y ~ ) q f ( x , y ) \mu_{pq}=\sum_{x=0}^{M-1} \sum_{y=0}^{N-1} (x-\tilde x)^p(y-\tilde y)^qf(x,y) μpq=∑x=0M−1∑y=0N−1(x−x~)p(y−y~)qf(x,y),其中 x ~ = m 10 m 00 和 y ~ = m 01 m 00 \tilde x=\frac{m_{10}}{m_{00}}和\tilde y=\frac{m_{01}}{m_{00}} x~=m00m10和y~=m00m01
- 主分量进行描绘
向量总体协方差 C x = E { ( x − m x ) ( x − x m ) T } C_x=E\{(x-m_x)(x-x_m)^T\} Cx=E{(x−mx)(x−xm)T}
4 关系描绘子
关系描述旨在用一套模式来描述边界或区域。
关系描述首先定义一些基本描述元,如用a表示向右一个像素,b表示向下一个像素;然后定义一套规则。