原理演示只保留会影响结构元素运动与输出判定的参数,当前结构元素窗口决定当前输出像素。
二值示例图固定不变,重点观察结构元素平移后如何决定腐蚀、膨胀、开操作和闭操作的输出。 输入与输出图像分辨率相同:16×16。
当图像已经二值化后,前景里常混有孤立小白点、裂缝或小孔洞,轮廓也可能毛糙。如果直接交给后续步骤,这些噪声和断裂会被误判成真实结构。
常用的处理办法是用一个结构元素当作小探针,在二值图上滑动并按集合规则改写中心像素:腐蚀只保留结构元素完全落在前景内的位置,能去掉细小突出和孤立点;膨胀只要结构元素碰到前景就把中心标为前景,能连接裂缝;开操作先腐蚀再膨胀可去噪,闭操作先膨胀再腐蚀可填孔。
点击原图切换当前位置,或在应用示例里切换去噪、连接裂缝、填补小孔等任务,观察结构元素覆盖的邻域里有多少前景像素;再换矩形、十字或椭圆结构元素,比较同一位置的输出是否变化。
先用原理演示理解结构元素与开闭操作,再看应用示例中的典型任务结果。
下方展示位置 (0, 0) 处结构元素覆盖邻域、计算过程及输出值。
当前结构元素(3×3 矩形 (MORPH_RECT))以像素 (0, 0) 为中心, 覆盖图像第 1 到 2 行、 第 1 到 2 列区域。 若结构元素落到图像外,越界位置按背景 0 处理。
腐蚀取该区域内的最小值:min = 0,这意味着只有当结构元素完全落在前景内时,输出才为 1。
开操作不是一个单独的新计算,而是先腐蚀,再对腐蚀结果做膨胀。
下面固定使用当前结构元素,对同一张任务图比较腐蚀、膨胀、开操作和闭操作;“改变像素”表示相对原图发生变化的位置数。
左侧输入邻域、中间结构元素、右侧输出像素,三者对应展示当前步骤的完整计算过程。
膨胀操作需先对结构元素做关于原点反射。对于中心对称的形状(矩形、椭圆),反射前后相同;十字形状也中心对称。
结构元素反射用于膨胀运算:先将 B 关于原点反射得 B_hat,再将 B_hat 平移到位置 z, 若 B_hat_z 与目标集合 A 有交集(至少一个像素重合),则该位置 z 被纳入膨胀结果。
形态学操作以集合论为基础,使用结构元素在二值图像上度量和改变目标形状。
二值图像可看作前景像素集合 A:并集表示合并目标,交集表示重叠区域,补集表示背景,差集表示从目标中扣除另一部分。
(A)_z 表示将集合 A 整体平移向量 z,结构元素在图像上的滑动就是反复做集合平移。
膨胀时需将结构元素关于原点取对称,然后平移并与目标集合求交集。
结构元素 B 平移到 z 后,必须完全落在集合 A 内,z 才属于腐蚀结果。
B 先关于原点反射得 B_hat,再平移到 z。只要 B_hat_z 与 A 发生任何交集,z 就算作膨胀结果。
这两个操作由腐蚀和膨胀组合而成,用于更精细的形状处理。
先腐蚀去除小目标/细突起/孤立噪点,再膨胀恢复主体形状。适合消除噪点和分离粘连物体。
先膨胀填充小孔/裂缝/间隙,再腐蚀恢复主体轮廓。适合连接断线和填补空洞。