BSE电镜多相含量分析软件:形态学优化处理

Otsu分割出来的掩码,总有噪点和空洞。

开运算去白噪点,闭运算填黑空洞。

一、为什么需要形态学优化

分割掩码的常见问题:

问题 表现 影响
噪点 孤立的白点或黑点 面积计算偏大
空洞 物相内部的小黑点 面积计算偏小
边界锯齿 边缘不光滑 视觉差

二、形态学基础

操作 公式 效果
腐蚀 A ⊖ B 白色区域缩小
膨胀 A ⊕ B 白色区域扩大
开运算 (A ⊖ B) ⊕ B 先腐蚀后膨胀,去白噪点
闭运算 (A ⊕ B) ⊖ B 先膨胀后腐蚀,填黑空洞

三、优化流程

text

复制代码
分割掩码 → 开运算(去噪点)→ 闭运算(填空洞)→ 优化后掩码

为什么先开后闭:先去掉外部噪点,再填充内部空洞。顺序反了会把噪点连到物相上。

四、核心代码

python

复制代码
import cv2
import numpy as np

def morphological_optimization(masks):
    optimized_masks = {}
    
    kernel_open = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
    kernel_close = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
    
    for phase_name, mask in masks.items():
        opened = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel_open)
        closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel_close)
        optimized_masks[phase_name] = closed
    
    return optimized_masks

五、结构元素选择

形状 OpenCV常量 特点 适用
矩形 MORPH_RECT 各向异性 文字、直线
十字 MORPH_CROSS 仅十字方向 特殊需求
椭圆 MORPH_ELLIPSE 各向同性,圆滑 自然图像、颗粒

本项目用椭圆核,因为物相是不规则的颗粒状。

操作 核大小 作用
开运算 3×3 去小噪点,保留细节
闭运算 5×5 填空洞,平滑边界

六、调参指南

问题 调整
白噪点多 开运算核改5×5
黑洞多 闭运算核改7×7
小物相被误删 减小开运算核

下篇预告

下一篇写面积计算与像素标定:像素计数、面积换算、标定流程。