BSE电镜多相含量分析软件:项目概述与架构设计

材料科学研究中,背散射电子(BSE)图像的不同灰度代表不同物相。

人工标注效率低,主观性强。写个软件自动算。

一、项目背景

在材料科学研究中,背散射电子(Backscattered Electron, BSE)显微镜是分析材料微观结构的重要工具。不同物相由于原子序数差异,在BSE图像中呈现不同的灰度亮度。

通过对BSE图像进行多相分割分析,可以定量计算各物相的含量比例,为材料性能研究提供数据支撑。

传统方法的痛点

  • 依赖人工标注或半手动处理

  • 效率低下

  • 受主观因素影响大

目标:开发自动化BSE电镜多相含量分析软件,从图像加载→预处理→自动分割→结果可视化→报表导出,全流程自动化。

二、功能定位

功能 说明
多相自动分割 支持2~5个物相的自动识别与分割
手动微调 支持手动调整阈值,精确控制分割效果
感兴趣区域(AOI) 支持矩形、圆形、多边形AOI选择
像素标定 用户自行标定μm/像素比例,精确计算面积
实时预览 手动模式下实时查看阈值调整效果
结果导出 支持图像导出和Excel报表生成
参数模板 支持保存和加载参数配置

三、技术栈

组件 技术选型 理由
编程语言 Python 科学计算库丰富,开发快,跨平台
GUI框架 PySide6 Qt的Python绑定,功能强大,LGPL商业友好
图像处理 OpenCV (cv2) 核心算法库
数值计算 NumPy 数组运算基础
图像辅助 Pillow (PIL) 辅助格式处理
报表导出 openpyxl 生成Excel报告,支持嵌入图像

四、模块划分

text

复制代码
Metis_PhaseAnalysis/
├── main.py              # 主程序入口,GUI界面与业务逻辑
├── preprocess.py        # 图像预处理模块
├── seg_multi_otsu.py    # 多级Otsu分割模块
├── morph_opt.py         # 形态学优化模块
├── size_calc.py         # 面积计算模块
├── draw_result.py       # 结果绘制模块
└── report_export.py     # 报表导出模块
模块 文件名 职责
图像预处理 preprocess.py 16-bit转8-bit、降噪、对比度增强
多级分割 seg_multi_otsu.py Otsu自动/手动阈值分割,生成掩码
形态学优化 morph_opt.py 开闭运算,优化分割掩码质量
面积计算 size_calc.py 像素计数、面积换算、百分比计算
结果绘制 draw_result.py 识别结果叠加绘制、图像保存
报表导出 report_export.py Excel报表生成、图像嵌入

五、数据流设计

text

复制代码
图像文件 → 预处理 → 多级Otsu分割 → 形态学优化 → 面积计算
                                                     ↓
结果显示 ← 结果绘制 ← 掩码数据              Excel报表导出

数据格式约定

数据类型 格式 说明
图像数据 NumPy数组 (uint8) 预处理后的灰度图
分割掩码 dict {'phase1': mask, 'phase2': mask, ...}
计算结果 dict {'phase1': {'pixel_count': int, 'area_um2': float, 'percentage': float}, ...}
阈值数据 list [T1, T2, T3, T4]

模块接口设计

算法模块通过函数调用和标准数据结构交互,不依赖任何GUI组件

python

复制代码
# 预处理
processed_img = preprocess_image(img_path)

# 分割
seg_result = multi_otsu_segmentation(processed_img, phase_count, user_thresholds)
masks = seg_result['masks']

# 形态学优化
optimized_masks = morphological_optimization(masks)

# 面积计算
results = calculate_phase_area(optimized_masks, magnification, pixel_per_um)

# 结果绘制
result_img = draw_segmentation_result(original_img, optimized_masks, output_path)

# 报表导出
export_report(results, magnification, output_path, original_img_path, phase_img_paths)

六、设计原则

原则 说明
模块独立 算法模块完全独立于GUI,不依赖任何PySide6组件
数据流清晰 数据在模块间单向流动,输入输出明确
容错性 各模块内部进行参数校验和异常处理
可扩展 物相数量支持动态扩展(2~5相),分割算法可替换

七、踩坑记录(提前预警)

  1. 算法模块不要import PySide6:保持纯OpenCV/NumPy,方便后续打包和测试

  2. 16-bit图像处理:BSE图像常见16-bit,预处理时要正确转换到8-bit

  3. 掩码数据类型 :用np.uint8,0/255二值,方便OpenCV显示

  4. AOI坐标:QGraphicsView的坐标体系与图像坐标要正确映射

下篇预告

下一篇写PySide6 GUI框架搭建:主窗口布局、控制面板、参数面板、图像显示区。