0 · 导读:为什么形态学值得单写一篇
形态学(morphology)是针对「形状」而非「灰度」的图像处理工具集。它不对像素值做线性加权(不像卷积 / 高斯模糊),而是用一个称为结构元素的小模板,在图像上做集合的平移、包含、交并。这使得它特别擅长:
- 二值图:去椒盐噪声、分离粘连目标、填补孔洞、提取边缘、计数(细胞、颗粒、焊点);
- 灰度图:顶帽 / 黑帽做背景均衡与特征增强、形态学梯度做边缘、形态学平滑替代高斯模糊以保边。
核心定义(一句话串起全部 7 个算子):设 BBB 为结构元素,fff 为图像。
- 腐蚀 ε\varepsilonε = 邻域取最小,膨胀 δ\deltaδ = 邻域取最大;
- 开运算 γ=δ(ε(f))\gamma = \delta(\varepsilon(f))γ=δ(ε(f)),闭运算 ϕ=ε(δ(f))\phi = \varepsilon(\delta(f))ϕ=ε(δ(f));
- 梯度 =δ(f)−ε(f)= \delta(f) - \varepsilon(f)=δ(f)−ε(f),顶帽 =f−γ(f)= f - \gamma(f)=f−γ(f),黑帽 =ϕ(f)−f= \phi(f) - f=ϕ(f)−f。
七个算子 = 两个原语(min / max)+ 两种次序 + 三种差集。
全文逻辑链:① 结构元素(形状 / 锚点 / 对称性)→ ② 腐蚀 → ③ 膨胀 → ④ 对偶性 → ⑤ 开运算 + ⑥ 闭运算 → ⑦ 梯度 / 顶帽 / 黑帽 → ⑧ 进阶(重建、击中击不中、粒度变换、多结构元素)→ ⑨ 工程实践(API 全表、iterations、borderType、真实案例)→ ⑩ 误区与 P0。
1 · 结构元素:一切的前提
结构元素 BBB 是一个「小图像」,定义在它自己的局部坐标系里。它决定形态学操作**「看多宽、看什么形状、以谁为参照」**。所有后续操作的半径、各向异性、对称性都由它决定。
1.1 OpenCV 创建:getStructuringElement
import cv2
kernel = cv2.getStructuringElement(shape, ksize, anchor=(-1,-1))
# shape: cv2.MORPH_RECT(矩形) / MORPH_ELLIPSE(椭圆) / MORPH_CROSS(十字)
# ksize: (k_w, k_h),奇数最好;anchor=(-1,-1) 表示放在中心
k3 = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5)) # 5×5 全 1
kE = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7)) # 椭圆内 1
kX = cv2.getStructuringElement(cv2.MORPH_CROSS, (5,5)) # 十字:中心行列为 1
1.2 三种形状的差异与选型
| 形状 | 掩码 | 各向异性 | 典型用途 |
|---|---|---|---|
| RECT(矩形) | 整块实心 | 强(横竖同样对待,对角被等效放大) | 通用去噪、骨架;最简单最常用 |
| ELLIPSE(椭圆) | 圆内填充 | 弱(近似各向同性) | 想「圆滑」地膨胀/腐蚀,避免方角,医学/颗粒 |
| CROSS(十字) | 仅中心行/列 | 极强(只沿横竖扩展) | 细化、保持连通性的迭代腐蚀(骨架化) |
对称性是隐藏前提:OpenCV 三种 kernel 都关于中心对称(B=B^B = \hat BB=B^,B^\hat BB^ 为反射)。只有对称 kernel,
erode/dilate的「按锚点对齐」才与集合论反射定义一致。若自己构造非对称 kernel,膨胀/腐蚀的几何意义会「偏向」kernel 重心,需显式处理反射(§4.1)。
1.3 锚点(anchor)的作用
锚点是结构元素与图像对齐的「原点」。默认中心。锚点偏移会使操作整体向反方向平移:对对称 kernel 通常无差别;但在非对称 kernel 或想要定向效果(如只看右半邻域,做「向右膨胀」)时,锚点偏移是可控手段。
2 · 腐蚀(Erosion):邻域取最小
2.1 集合论定义(二值图)
把结构元素 BBB 的锚点平移到 zzz,若整个平移后的 BBB 都落在前景 AAA 内部,则 zzz 属于腐蚀结果:
A⊖B={ z∣(B)z⊆A} A \ominus B = \{ z \mid (B)_z \subseteq A \} A⊖B={ z∣(B)z⊆A}
其中 (B)z=B+z(B)_z = B + z(B)z=B+z 表示把 BBB 平移到 zzz。直觉:只有当 BBB 覆盖的每一个像素都是前景时,中心才保留为前景。任何「边界突出」或「孤立小点」都会被吃掉。
2.2 灰度定义(更通用)
对灰度图像 fff,腐蚀是邻域内取最小值(min filtering):
(f⊖b)(x,y)=min(s,t)∈bf(x+s,y+t) (f \ominus b)(x,y) = \min_{(s,t) \in b} f(x+s, y+t) (f⊖b)(x,

本文系统讲解OpenCV中7种核心形态学操作:腐蚀(邻域最小值)、膨胀(邻域最大值)、开运算(先蚀后胀,去盐噪/分粘连)、闭运算(先胀后蚀,填椒洞/连断点)、形态学梯度(边缘提取)、顶帽(小亮特征增强/背景校正)、黑帽(小暗特征提取)。深入剖析结构元素设计、锚点作用、对偶性原理,并涵盖进阶技术如形态学重建、击中击不中变换与粒度分析,强调工程实践中的API用法、iterations陷阱及边界处理。
8164

被折叠的 条评论
为什么被折叠?



