《数字图像处理》 – 冈萨雷斯 读书笔记
预备知识
集合论中的基本概念
二值图像、集合和逻辑运算符
在MATLAB中用逻辑表示于二值图像上执行集合运算
| 集合运算 | 二值图像的MATLAB语句 | 名称 |
| —— | ————- | —- |
| A ∩ B | A & B | 与 |
| A ∪ B | A | B | 或 |
| $A^c$ | ~A | 非 |
| A - B | A &~B | 差 |
膨胀和腐蚀
膨胀
膨胀(dilation)可以看做是腐蚀的对偶运算,其定义是:把结构元素B平移a后得到Ba,若Ba击中X,我们记下这个a点。所有满足上述条件的a点组成的集合称做X被B膨胀的结果。用公式表示为:D(X)={a | Ba↑X}=X B,如图6.13所示。图6.13中X是被处理的对象,B是结构元素,不难知道,对于任意一个在阴影部分的点a,Ba击中X,所以X被B膨胀的结果就是那个阴影部分。阴影部分包括X的所有范围,就象X膨胀了一圈似的,这就是为什么叫膨胀的原因。
函数imdilate
1A2 = imdilate(A, B)其中 A和A2都是二值图像,B是指定结构元素的由 0 和1 组成的矩阵
结构元素的分解
膨胀满足结合率
A ⊕(B⊕C) = (A⊕B)⊕C
假设一个结构元素B可以表示为两个结构元素B1和B2的膨胀,即
B = B1 ⊕ B2
函数strel
1se = strel(shape, parameters)以分解的形式来产生结构元素
12>> se = strel('diamond', 5)>> decomp = getsequence(se);decomp是strel 对象的四元素向量,分解中的四结构元素可以通过索引到decomp中来逐个地检查。
腐蚀
函数imerode
膨胀与腐蚀的结合
开运算和闭运算
函数imopen 和 imclose
12345>> f = imread('9 (5).tif');>> se = strel ('square', 20);>> fo = imopen(f, se);>> fc = imclose(f,se);>> foc = imclose(fo, se);由上图可看出 先开后闭 与先闭后开的效果一样
击中或不击中变换
函数bwhitmiss
C为结果,A为输入图像,B1和B2为结构元素
1234>> f = imread('9 (7).tif');>> B1 = strel([0 0 0;0 1 1;0 1 0]);>> B2 = strel([1 1 1; 1 0 0;1 0 0]);>> g = bwhitmiss(f, B1, B2);使用查找表
IPT提供两个函数 makelut 和applylut
makelut 为用户的函数构造一个查找表
applylut 使用这个查找表来处理二值图像
函数endpoints
该函数使用 makelut 和applylut 在二值图像中检测端点
函数conway
该函数使用 makelut 和 applylut 来实现生命游戏 Conway
函数bwmorph
可基于膨胀、腐蚀和查找表操作的组合实现许多有用的操作,该函数的调用语法为
1g = bwmorph(f, operation, n)f 是一幅输入的二值图像,operation是一个指定期望操作的字符串
n 是一个用于指定将被重复的操作次数的正整数。
123>> g1 = bwmorph(f, 'thin', 1);>> g2 = bwmorph(f, 'thin',2);>> ginf = bwmorph(f, 'thin',Inf);1234>> fs = bwmorph(f, 'skel', Inf);>> for k = 1:5fs = fs & ~endpoints(fs);end