版本32和33间的区别
于2008-05-22 16:57:03修订的的版本32
大小: 5626
编辑: czk
备注:
于2008-05-22 17:25:20修订的的版本33
大小: 5709
编辑: czk
备注:
删除的内容标记成这样。 加入的内容标记成这样。
行号 1: 行号 1:
<<TableOfContents>>
行号 4: 行号 5:

<<Include(^图像的数学形态学处理/010 集合论)>>

预备知识

1. 集合论

若点w=(x,y)是A的一个元素,记为:

$$w\in A$$

若点w=(x,y)不是A的一个元素,记为:

$$w\notin A$$

所有不属于A的坐标的集合,称为A的补集,记为$A^c$

$$A^c=\{w|w\notin A\}$$

集合A和集合B的并集指所有属于集合A或者集合B的元素的集合,记为

$$C = A \cup B$$

集合A和集合B的交集是指同时属于这集合的元素的集合,记为

$$C = A \cap B$$

集合A和集合B的差集记为A-B,指所有属于A但不属于B的元素的集合:

$$A-B = \{ w|w\in A, w \notin B \}$$

../figure91.png

2. 集合论

若点w=(x,y)是A的一个元素,记为:

$$w\in A$$

若点w=(x,y)不是A的一个元素,记为:

$$w\notin A$$

所有不属于A的坐标的集合,称为A的补集,记为$A^c$

$$A^c=\{w|w\notin A\}$$

集合A和集合B的并集指所有属于集合A或者集合B的元素的集合,记为

$$C = A \cup B$$

集合A和集合B的交集是指同时属于这集合的元素的集合,记为

$$C = A \cap B$$

集合A和集合B的差集记为A-B,指所有属于A但不属于B的元素的集合:

$$A-B = \{ w|w\in A, w \notin B \}$$

figure91.png

B的映像记为$\hat{B}$,定义为

$$\hat{B} = \{ w|w=-b, b \in B \}$$

对A的平移z($z = (z_1, z_2)$)记为$(A)_z$,定义为

$$(A)_z=\{ c|c=a+z, a\in A \}$$

figure92.png

3. 二值图像的集合运算

点的集合A可以用一幅二值的图像A来表示:

$$ A(x,y) = \begin{cases}
1 & if (x,y) \in A \\
0 & if (x,y) \notin A \\
\end{cases}
$$

这样,点的集合运算可以表示为二值图像的逻辑运算,比如:

$$C = A \cup B = \{(x,y)|(x,y) \in A or (x,y) \in B \}$$

等价于

$$C(x,y) = \begin{cases}
1 & if\ A(x,y) = 1\ or\ B(x,y) = 1 \\
0 & else \\
\end{cases}$$

table91.png

例子:

figure93.png

膨胀和腐蚀

1. 膨胀

膨胀是使二值图像变粗的操作。变粗的程度由结构元素来控制。膨胀的过程可以由下图来说明:

figure94.png

膨胀操作记为:

$$A \oplus B = \{ z|(\hat{B})_z \cap A \neq \phi \}$$

非对称的结构元素,需要先将其映射

figure95.png

在matlab中实现:

C = imdilate(A, B);

figure96.png

2. 结构元素的分解

膨胀运算满足结合律:

$$A\oplus (B \oplus C) = (A \oplus B) \oplus C$$

如果一个结构元素B可以分解成两个结构元素B1和B2的膨胀

$$B=B_1\oplus B_2$$

那么

$$A\oplus B = A \oplus (B_1 \oplus B_2) = (A \oplus B_1) \oplus B_2$$

计算膨胀所需要的时间正比于结构元素中非零像素的个数。如果分解后非零像素减少,那就可以节省计算时间。例如

$$\left[\begin{array}{ccccc}
1 &1& 1& 1& 1\\
1 &1& 1& 1& 1\\
1 &1& \boxed{1}& 1& 1\\
1 &1& 1& 1& 1\\
1 &1& 1& 1& 1
\end{array}\right]
$$

可以分解为

$$[1\ 1\ \boxed{1}\ 1\ 1] \oplus \left[ \begin{array}{c}1\\1\\\boxed{1}\\1\\1\end{array}\right]$$

3. 常用的结构元素

在matlab中,可以用strel函数,生成一些常用的结构元素。

table92.png

strel返回的不是矩阵,而是一个strel对象,它可以直接传给imdilate作为参数。也可以通过getnhood得到对应的矩阵。例如:

se = strel('diamond', 3)
B = getnhood(se)

4. 腐蚀

腐蚀操作可以细化二值图像。细化的程度同样由一个结构元素控制。下图说明了腐蚀的过程:

figure97.png

腐蚀定义为:

$$A \ominus B = \{ z|(B)_z \cap A^c = \phi \}$$

腐蚀可以用膨胀来表示:

$$A \ominus B = \{ z|(B)_z \cap A^c = \phi \} = \{ z|(B)_z \cap A^c \neq \phi \}^c = (A^c \oplus \hat{B})^c$$

在matlab中实现:

C = imerode(A, B);

figure98.png

组合运算

1. 开运算和闭运算

A与B的开运算定义为:

$$A\circ B = (A \ominus B) \oplus B$$

A与B的闭运算定义为:

$$A\bullet B = (A \oplus B)\ominus B$$

figure99.png

在matlab中实现:

C = imopen(A, B)
C = imclose(A, B)

figure910.png

figure911.png

2. 击中击不中运算

击中击不中运算定义为:

$$A \otimes B = (A\ominus B_1) \cap (A^c\ominus B_2)$$

figure912.png

在matlab中实现

c = bwhitmiss(A, B1, B2);

figure913.png

3. 其他复合操作

在matlab中,使用bwmorph可以实现多种形态学运算

table93.png

figure915.png

figure916.png

标记连通分量

figure917.png

一个像素p的上下左右四个像素称为4邻接像素,上下左右再加上四个对角线像素称为8邻接像素。如果两个像素p1和pn之间存在一条路径p1,p2,...pn,其中每相邻两个之间都是4邻接的,则称p1和pn是4连通的;如果每相邻两个像素之间都是8邻接的,则称p1和pn是8连通的;如果不存在这样的路径,则称为p1和pn是不连通的。与p连通的所有像素的集合称为包含p的连通分量。

在matlab中,可以由bwlabel函数来找出连通分量,为不同的连通分量标上不同的标记。

[L num] = bwlabel(f, conn)

conn是4或者8,表示选择4连通或者8连通。

figure918.png

figure919.png

figure920.png

形态学重构

figure921.png

1. 由重构做开运算

figure922.png

2. 填充空洞

3. 清除边界对象

图像的数学形态学处理 (2008-05-22 17:55:20由chenzhongke编辑)

ch3n2k.com | Copyright (c) 2004-2020 czk.