返回

形态学操作

Morphology - 腐蚀、膨胀、开闭操作与结构元素
第二章 / 图像预处理
参数面板

原理演示只保留会影响结构元素运动与输出判定的参数,当前结构元素窗口决定当前输出像素。

原理演示概述

二值示例图固定不变,重点观察结构元素平移后如何决定腐蚀、膨胀、开操作和闭操作的输出。 输入与输出图像分辨率相同:16×16

当前为两阶段操作(先腐蚀后膨胀), 右侧步骤分两阶段展示每一步的详细计算。
示例说明:原理演示使用固定二值样例,避免任务切换打断对结构元素、集合判定和局部窗口输出关系的理解。
3
当前配置:原理演示示例图开操作 (Opening), 结构元素 矩形 (MORPH_RECT)3×3。 当前判断只看结构元素覆盖区域是否满足该操作的集合规则。 此操作分两阶段完成,中间结果在下方分析区可见。
窗口定位辅助操作
用方向键或下方 4 个按钮移动当前窗口;也可以直接点击原图或结果图跳转。
当前像素 (0, 0)1 / 512
方向
概念说明

形态学操作改变什么

形态学操作用结构元素改变二值形状的局部几何关系。图源:scikit-image morphology 示例
任务

当图像已经二值化后,前景里常混有孤立小白点、裂缝或小孔洞,轮廓也可能毛糙。如果直接交给后续步骤,这些噪声和断裂会被误判成真实结构。

思路

常用的处理办法是用一个结构元素当作小探针,在二值图上滑动并按集合规则改写中心像素:腐蚀只保留结构元素完全落在前景内的位置,能去掉细小突出和孤立点;膨胀只要结构元素碰到前景就把中心标为前景,能连接裂缝;开操作先腐蚀再膨胀可去噪,闭操作先膨胀再腐蚀可填孔。

观察

点击原图切换当前位置,或在应用示例里切换去噪、连接裂缝、填补小孔等任务,观察结构元素覆盖的邻域里有多少前景像素;再换矩形、十字或椭圆结构元素,比较同一位置的输出是否变化。

视图结构切换

先用原理演示理解结构元素与开闭操作,再看应用示例中的典型任务结果。

原理演示:聚焦集合判定、结构元素和平移/反射关系应用示例:展示噪点去除、裂缝连接、小孔填补等典型任务结果
方向键移动 / 点击原图或结果图跳转当前处理像素 (0, 0)
1 / 512
原图16×16
红框显示结构元素落在图像内的部分;越界位置在下方邻域中按背景 0 处理
形态学运算
1 / 512
结果16×16
绿框对应结果图中的当前输出像素(共 16×16),可点击结果图直接定位
第1步:腐蚀 - 输入邻域3×3
位置 (0, 0) 的结构元素覆盖区域
输入为原始二值图像
邻域摘要3×3
参与前景数
0
参与背景数
9
结构元素 B矩形 (MORPH_RECT)
1
1
1
1
1
1
1
1
1
■ = 激活 / □ = 不关注
操作逻辑min
腐蚀 = 取结构元素覆盖区域内的最小值(所有激活位置必须全是前景 1,输出才为 1)
集合条件判断
不满足: (B)_z ⊈ A
输出值0
输出像素位置 (0, 0)
对应结果图绿框
结果图第 1 行,第 1
腐蚀(最小值)
0
结构元素完全在目标内则保留前景
开/闭操作 - 第1步:腐蚀

下方展示位置 (0, 0) 处结构元素覆盖邻域、计算过程及输出值。

输出值 0
G(0,0) = min { f(i,j) | (i,j)NB } = 0

当前结构元素(3×3 矩形 (MORPH_RECT))以像素 (0, 0) 为中心, 覆盖图像第 12 行、 第 12 列区域。 若结构元素落到图像外,越界位置按背景 0 处理。

腐蚀取该区域内的最小值:min = 0,这意味着只有当结构元素完全落在前景内时,输出才为 1。

复合操作的两阶段结果

开操作不是一个单独的新计算,而是先腐蚀,再对腐蚀结果做膨胀。

原图 A
第1步:腐蚀
第2步:膨胀
同一二值图的操作对比

下面固定使用当前结构元素,对同一张任务图比较腐蚀、膨胀、开操作和闭操作;“改变像素”表示相对原图发生变化的位置数。

原图
改变 0 个像素
腐蚀
改变 41 个像素
变化位置
膨胀
改变 46 个像素
变化位置
开操作
改变 3 个像素
变化位置
闭操作
改变 2 个像素
变化位置
步骤可视化展开

左侧输入邻域、中间结构元素、右侧输出像素,三者对应展示当前步骤的完整计算过程。

腐蚀 (min)
输入邻域
以 (0, 0) 为中心的 3×3 区域
0
0
0
0
0
0
0
0
0
琥珀色 = 参与格最小值 / 灰色 = 结构元素不关注
结构元素 B
矩形 (MORPH_RECT)3×3
1
1
1
1
1
1
1
1
1
■ = 激活(参与运算) / □ = 不关注
输出像素
腐蚀结果(min)
0
结构元素全部激活位置对应邻域值均 = 1 时,输出才为 1。
写入结果图第 1 行 / 第 1
结构元素反射 B_hat

膨胀操作需先对结构元素做关于原点反射。对于中心对称的形状(矩形、椭圆),反射前后相同;十字形状也中心对称。

B^ = {w|w=-b,bB}
原始 B
1
1
1
1
1
1
1
1
1
反射后 B_hat
1
1
1
1
1
1
1
1
1

结构元素反射用于膨胀运算:先将 B 关于原点反射得 B_hat,再将 B_hat 平移到位置 z, 若 B_hat_z 与目标集合 A 有交集(至少一个像素重合),则该位置 z 被纳入膨胀结果。

集合论基础

形态学操作以集合论为基础,使用结构元素在二值图像上度量和改变目标形状。

集合基本运算
AB, AB, Ac, A-B

二值图像可看作前景像素集合 A:并集表示合并目标,交集表示重叠区域,补集表示背景,差集表示从目标中扣除另一部分。

集合平移
(A)z = {c|c=a+z,aA}

(A)_z 表示将集合 A 整体平移向量 z,结构元素在图像上的滑动就是反复做集合平移。

结构元素反射
B^ = {w|w=-b,bB}

膨胀时需将结构元素关于原点取对称,然后平移并与目标集合求交集。

腐蚀
AB = {z|(B)zA}

结构元素 B 平移到 z 后,必须完全落在集合 A 内,z 才属于腐蚀结果。

膨胀
AB = {z|(B^)zA}

B 先关于原点反射得 B_hat,再平移到 z。只要 B_hat_z 与 A 发生任何交集,z 就算作膨胀结果。

开操作与闭操作

这两个操作由腐蚀和膨胀组合而成,用于更精细的形状处理。

开操作 (先腐蚀后膨胀)
AB = (AB) B

先腐蚀去除小目标/细突起/孤立噪点,再膨胀恢复主体形状。适合消除噪点和分离粘连物体。

闭操作 (先膨胀后腐蚀)
AB = (AB) B

先膨胀填充小孔/裂缝/间隙,再腐蚀恢复主体轮廓。适合连接断线和填补空洞。