目录
| 幻灯片模式 开始 |
预备知识
| 幻灯片模式 ^ |< << 幻灯片1/15 >> >| |
1. 集合论
若点w=(x,y)是A的一个元素,记为:

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

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

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

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

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

| 幻灯片模式 ^ |< << 幻灯片1/15 >> >| |
| 幻灯片模式 ^ |< << 幻灯片3/15 >> >| |
2. 二值图像的集合运算
点的集合A可以用一幅二值的图像A来表示:

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

等价于

例子:
| 幻灯片模式 ^ |< << 幻灯片3/15 >> >| |
膨胀和腐蚀
| 幻灯片模式 ^ |< << 幻灯片4/15 >> >| |
1. 膨胀
膨胀是使二值图像变粗的操作。变粗的程度由结构元素来控制。膨胀的过程可以由下图来说明:
膨胀操作记为:

非对称的结构元素,需要先将其映射
在matlab中实现:
C = imdilate(A, B);
| 幻灯片模式 ^ |< << 幻灯片4/15 >> >| |
| 幻灯片模式 ^ |< << 幻灯片5/15 >> >| |
2. 结构元素的分解
膨胀运算满足结合律:

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

那么

计算膨胀所需要的时间正比于结构元素中非零像素的个数。如果分解后非零像素减少,那就可以节省计算时间。例如
![$$\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]
$$ $$\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]
$$](/%E5%9B%BE%E5%83%8F%E7%9A%84%E6%95%B0%E5%AD%A6%E5%BD%A2%E6%80%81%E5%AD%A6%E5%A4%84%E7%90%86/050%20%E7%BB%93%E6%9E%84%E5%85%83%E7%B4%A0%E7%9A%84%E5%88%86%E8%A7%A3?action=AttachFile&do=get&target=latex_311e4aef1a171346b0b31793a942d6d9d87a8a58_p1.png)
可以分解为
![$$[1\ 1\ \boxed{1}\ 1\ 1] \oplus \left[ \begin{array}{c}1\\1\\\boxed{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]$$](/%E5%9B%BE%E5%83%8F%E7%9A%84%E6%95%B0%E5%AD%A6%E5%BD%A2%E6%80%81%E5%AD%A6%E5%A4%84%E7%90%86/050%20%E7%BB%93%E6%9E%84%E5%85%83%E7%B4%A0%E7%9A%84%E5%88%86%E8%A7%A3?action=AttachFile&do=get&target=latex_a864140ec5cc87578b4a9075e276cd26e8bd3b96_p1.png)
| 幻灯片模式 ^ |< << 幻灯片5/15 >> >| |
| 幻灯片模式 ^ |< << 幻灯片6/15 >> >| |
3. 常用的结构元素
在matlab中,可以用strel函数,生成一些常用的结构元素。
strel返回的不是矩阵,而是一个strel对象,它可以直接传给imdilate作为参数。也可以通过getnhood得到对应的矩阵。例如:
se = strel('diamond', 3)
B = getnhood(se)| 幻灯片模式 ^ |< << 幻灯片6/15 >> >| |
| 幻灯片模式 ^ |< << 幻灯片7/15 >> >| |
4. 腐蚀
腐蚀操作可以细化二值图像。细化的程度同样由一个结构元素控制。下图说明了腐蚀的过程:
腐蚀定义为:

腐蚀可以用膨胀来表示:

在matlab中实现:
C = imerode(A, B);
| 幻灯片模式 ^ |< << 幻灯片7/15 >> >| |
组合运算
| 幻灯片模式 ^ |< << 幻灯片8/15 >> >| |
1. 开运算和闭运算
A与B的开运算定义为:

A与B的闭运算定义为:

在matlab中实现:
C = imopen(A, B) C = imclose(A, B)
| 幻灯片模式 ^ |< << 幻灯片8/15 >> >| |
| 幻灯片模式 ^ |< << 幻灯片9/15 >> >| |
2. 击中击不中运算
击中击不中运算定义为:

在matlab中实现
c = bwhitmiss(A, B1, B2);
| 幻灯片模式 ^ |< << 幻灯片9/15 >> >| |
| 幻灯片模式 ^ |< << 幻灯片10/15 >> >| |
3. 其他复合操作
在matlab中,使用bwmorph可以实现多种形态学运算
用法:
g = bwmorph(f, operation, n);
其中,operation是一个指定操作的字符串,n指定操作的重复次数,缺省是1。
例子:
g1 = bwmorph(f, 'thin', 1); g2 = bwmorph(f, 'thin', 2); ginf = bwmorph(f, 'thin', Inf);
骨骼化(也称为提取骨架):
fs = bwmorph(f, 'skel', Inf);
骨骼化的结果中会有一些毛刺,我们可以对起进行修剪,使用endpoints函数实现:
fs = fs&~endpoints(fs)
| 幻灯片模式 ^ |< << 幻灯片10/15 >> >| |
标记连通分量
| 幻灯片模式 ^ |< << 幻灯片11/15 >> >| |
1. 标记连通分量
一个像素p的上下左右四个像素称为4邻接像素,上下左右再加上四个对角线像素称为8邻接像素。
如果两个像素p1和pn之间存在一系列像素p1,p2,...pn,其中每相邻两个之间都是4邻接的,则称p1和pn是4连通的;如果每相邻两个像素之间都是8邻接的,则称p1和pn是8连通的;如果不存在这样的路径,则称为p1和pn是不连通的。p1,p2,...pn称为p1到pn的一条路径。与p连通的所有像素的集合称为包含p的连通分量。
在matlab中,可以由bwlabel函数来找出连通分量,为不同的连通分量标上不同的标记。
[L num] = bwlabel(f, conn)
conn是4或者8,表示选择4连通或者8连通。
| 幻灯片模式 ^ |< << 幻灯片11/15 >> >| |
形态学重构
| 幻灯片模式 ^ |< << 幻灯片12/15 >> >| |
1. 形态学重构
重构(reconstruct)操作需要一个标记(marker)图像f、一个掩模(mask)图像g和一个结构元素B,记为
。其中标记图像f必须是掩模图像g的子集。
重构操作的计算过程可以表达为:
- h1初始化为标记图像,g为掩模,B为结构元素ones(3);
重复如下操作

直到

matlab实现:
h = imreconstruct(marker, mask);
| 幻灯片模式 ^ |< << 幻灯片12/15 >> >| |
| 幻灯片模式 ^ |< << 幻灯片13/15 >> >| |
2. 由重构做开运算
普通的开运算可以去掉较小的对象,操作是先腐蚀,再膨胀。但是开运算在膨胀中会使形状变形。
可以用重构代替膨胀来做开运算,这个运算定义为
例子:
| 幻灯片模式 ^ |< << 幻灯片13/15 >> >| |
,定义为
)记为
,定义为

![$$g = [R_{f^c}(f_m)]^c$$ $$g = [R_{f^c}(f_m)]^c$$](/%E5%9B%BE%E5%83%8F%E7%9A%84%E6%95%B0%E5%AD%A6%E5%BD%A2%E6%80%81%E5%AD%A6%E5%A4%84%E7%90%86/140%20%E5%A1%AB%E5%85%85%E7%A9%BA%E6%B4%9E?action=AttachFile&do=get&target=latex_de86b374a30caa46c64960ab175e0108d45fff64_p1.png)


