形态学图像处理

《数字图像处理》 – 冈萨雷斯 读书笔记

预备知识

  • 集合论中的基本概念

  • 二值图像、集合和逻辑运算符

    在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 img B,如图6.13所示。图6.13中X是被处理的对象,B是结构元素,不难知道,对于任意一个在阴影部分的点a,Ba击中X,所以X被B膨胀的结果就是那个阴影部分。阴影部分包括X的所有范围,就象X膨胀了一圈似的,这就是为什么叫膨胀的原因。

    函数imdilate

    1
    A2 = imdilate(A, B)

    其中 A和A2都是二值图像,B是指定结构元素的由 0 和1 组成的矩阵

  • 结构元素的分解

    膨胀满足结合率

    A ⊕(B⊕C) = (A⊕B)⊕C

    假设一个结构元素B可以表示为两个结构元素B1和B2的膨胀,即

    B = B1 ⊕ B2

  • 函数strel

    1
    se = strel(shape, parameters)

    以分解的形式来产生结构元素

    1
    2
    >> se = strel('diamond', 5)
    >> decomp = getsequence(se);

    decomp是strel 对象的四元素向量,分解中的四结构元素可以通过索引到decomp中来逐个地检查。

  • 腐蚀

    函数imerode

膨胀与腐蚀的结合

  • 开运算和闭运算

    函数imopen 和 imclose

    1
    2
    3
    4
    5
    >> 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为结构元素

    1
    2
    3
    4
    >> 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

    可基于膨胀、腐蚀和查找表操作的组合实现许多有用的操作,该函数的调用语法为

    1
    g = bwmorph(f, operation, n)

    f 是一幅输入的二值图像,operation是一个指定期望操作的字符串

    n 是一个用于指定将被重复的操作次数的正整数。

    1
    2
    3
    >> g1 = bwmorph(f, 'thin', 1);
    >> g2 = bwmorph(f, 'thin',2);
    >> ginf = bwmorph(f, 'thin',Inf);

    1
    2
    3
    4
    >> fs = bwmorph(f, 'skel', Inf);
    >> for k = 1:5
    fs = fs & ~endpoints(fs);
    end