第 9 章 形态学图像处理 (Morphological Image Processing)
核心结论
-
预备知识(§9.1):集合论 / 二值图像 / 结构元素。
-
腐蚀与膨胀(§9.2):
A ⊖ B/A ⊕ B;收缩 / 扩大前景。 -
开闭运算(§9.3):
A ∘ B = (A ⊖ B) ⊕ B/A • B = (A ⊕ B) ⊖ B;去噪 / 填洞。 -
击中-击不中变换(§9.4):
A ⊛ B = (A ⊖ B_1) ∩ (A^c ⊖ B_2);形状检测。 -
边界提取(§9.5):
β(A) = A - (A ⊖ B)。 -
连通分量(§9.6):标记连通区域;对象计数。
-
形态学重构(§9.7):基于标记的形态学;图像成分提取。
-
灰度形态学(§9.8):扩展到灰度图像;形态学平滑 / 梯度。
|
本章主旨
本章是形态学——用形状操作处理二值 / 灰度图像。理解后才能做连通分量提取 / 边界 / 形态学平滑 / 孔洞填充。 |
一、核心概念
本章围绕 8 个核心概念展开:预备 → 腐蚀膨胀 → 开闭 → 击中击不中 → 边界 → 连通 → 重构 → 灰度。
| 概念 | 定义 + 重要性 | 实现提示 |
|---|---|---|
预备知识 |
集合论 / 二值图像 / 结构元素。 |
§9.1;理解形态学基础。 |
腐蚀与膨胀 |
|
§9.2;最基本形态学运算。 |
开闭运算 |
开 = 先腐蚀后膨胀;闭 = 先膨胀后腐蚀。 |
§9.3;去噪 / 填洞。 |
击中-击不中 |
形状检测;二值匹配。 |
§9.4;模板匹配。 |
边界提取 |
|
§9.5;形态学边缘。 |
连通分量 |
标记连通区域;对象计数。 |
§9.6;blob 分析。 |
形态学重构 |
基于标记;图像成分提取。 |
§9.7;高级形态学。 |
灰度形态学 |
扩展到灰度;形态学平滑 / 梯度。 |
§9.8;非二值图像应用。 |
二、详细笔记
2.1 预备知识 (Preliminaries)
What:集合论 / 结构元素 / 二值图像。
Why:形态学运算的数学基础。
How:
-
二值图像:前景(白)/ 背景(黑)。
-
结构元素
B:小集合(3×3 / 5×5 圆盘 / 十字)。 -
集合论运算:并 / 交 / 补 / 差。
When:所有形态学算法。
Example*:cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3))。
2.2 腐蚀与膨胀 (Erosion & Dilation)
What:A ⊖ B(腐蚀)/ A ⊕ B(膨胀)。
Why:形态学最基本运算。
How:
-
腐蚀:
A ⊖ B = {z | B_z ⊆ A};B 在 A 内可放置的位置;前景收缩。 -
膨胀:
A ⊕ B = {z | (B̂)_z ∩ A ≠ ∅};B 反射后在 A 内可放置的位置;前景扩大。
When:去小对象 / 填小洞。
Example*:cv2.erode(img, kernel);cv2.dilate(img, kernel)。
2.3 开闭运算 (Opening & Closing)
What:开 = 先腐蚀后膨胀;闭 = 先膨胀后腐蚀。
Why:去噪 / 填洞常用。
How:
-
开:
A ∘ B = (A ⊖ B) ⊕ B;去除小对象 / 断开细连接;保形状。 -
闭:
A • B = (A ⊕ B) ⊖ B;填小洞 / 连接近邻;保形状。
When:去噪;形态学平滑。
Example*:cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel);cv2.MORPH_CLOSE。
2.4 击中-击不中变换 (Hit-or-Miss Transform)
What:A ⊛ B = (A ⊖ B_1) ∩ (A^c ⊖ B_2)。
Why:检测特定形状;模板匹配。
How:
-
B = (B_1, B_2) 前景 + 背景结构元素。
-
A ⊛ B = (A ⊖ B_1) ∩ (A^c ⊖ B_2);只在指定结构处为真。
When:形状检测;字符识别预处理。
Example*:cv2.morphologyEx(img, cv2.MORPH_HITMISS, kernel)。
2.5 边界提取 (Boundary Extraction)
What:β(A) = A - (A ⊖ B)。
Why:形态学边缘检测。
How:原图 - 腐蚀 = 边界。
When:形态学边缘;blob 分析。
Example*:boundary = img - cv2.erode(img, kernel)。
2.6 连通分量 (Connected Components)
What:标记连通区域;对象计数。
Why:blob 分析;对象计数。
How:
-
4-连通 / 8-连通。
-
迭代标记 / 两遍扫描 / 并查集。
When:细胞计数;字符分割;车辆计数。
Example*:cv2.connectedComponents(binary_img);cv2.connectedComponentsWithStats。