# 分割砂岩截面图 **Repository Path**: bone-zzz/asd ## Basic Information - **Project Name**: 分割砂岩截面图 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-27 - **Last Updated**: 2025-11-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 砂岩图像像素级分类与分割 ## 项目简介 本项目演示如何对砂岩截面灰度图进行像素级分类,从而生成分区(不同化学成分/矿物区域)掩模图。核心思路:将每个像素的局部邻域(例如 5x5)作为特征输入到监督学习模型(随机森林),学习像素值模式与区域类别之间的映射,然后对新图像进行逐像素预测,得到分割结果并与真实分区图比较。 ## 数据文件(需自行放置到仓库根目录) ``` Sandstone_1.tif # 训练用灰度图 Sandstone_1_segment.tif # 训练标签掩模图(不同颜色或灰度表示不同类别) Sandstone_2.tif # 待预测灰度图 Sandstone_2_segment.tif # 真实标签(用于评估,可选) ``` 若你的数据在压缩包 `Sandstone_imgs.zip` 中,请先解压到仓库根目录,使上述四个文件与脚本同级。 ## 主要脚本 - create_clf.py : 读取第一组图像与标签,构建邻域特征,训练随机森林分类器并用 pickle 保存。 - segment.py : 加载已训练模型,对第二张图生成预测分割;若提供真实标签则计算像素级准确率,并可选生成彩色可视化。 ## 安装依赖 推荐使用 Python >= 3.9。 ```bash pip install numpy scikit-image scikit-learn matplotlib pillow # 如出现 LZW 压缩 TIFF 报错 (requires the 'imagecodecs' package),再安装: pip install imagecodecs # 若安装困难可尝试精简版: pip install imagecodecs-lite ``` 如果需要加速或减少内存,可考虑: - 使用 `--max-samples` 在训练阶段随机下采样像素。 - 减小 `--window-size` (例如从 7 改为 5 或 3)。 ## 特征提取说明 对每个像素取其上下左右以及斜对角等组成的 N×N 邻域(反射填充边缘),展平成长度 N^2 的特征向量。这样模型能利用局部纹理与过渡而不是单点灰度。 ## 使用步骤 1. 放置四个 TIF 文件于仓库根目录。 2. 训练模型(脚本已支持默认文件名,直接运行即可,或显式传参): ```bash python create_clf.py # 或显式指定: python create_clf.py --image Sandstone_1.tif --mask Sandstone_1_segment.tif \ --model sandstone_rf.pkl --window-size 5 --n-estimators 300 ``` 3. 预测分割(并计算准确率与输出彩色图;同样支持默认文件名): ```bash python segment.py --gt Sandstone_2_segment.tif --color-output Sandstone_2_pred_color.png # 或显式指定: python segment.py --model sandstone_rf.pkl --image Sandstone_2.tif \ --gt Sandstone_2_segment.tif --output Sandstone_2_pred.tif \ --color-output Sandstone_2_pred_color.png ``` 4. 仅预测不评估: ```bash python segment.py # 或显式指定: python segment.py --model sandstone_rf.pkl --image Sandstone_2.tif \ --output Sandstone_2_pred.tif ``` ## 参数说明(create_clf.py) - --window-size 邻域补丁尺寸,必须为奇数(默认 5)。 - --n-estimators 随机森林树数量(默认 300)。 - --max-samples 训练时随机抽取的最大像素数(默认不限)。 - --random-state 随机种子,保证可复现。 ## 参数说明(segment.py) - --model 训练生成的 pickle 模型文件路径。 - --image 待分割灰度图路径。 - --gt (可选)真实标签图,用于计算准确率。 - --output 输出预测标签图(单通道,类别 id)。 - --color-output (可选)彩色可视化 PNG(使用训练标签的颜色映射)。 ## 结果与评估 若提供 `--gt`,脚本会: - 将真实标签映射到训练时的类别索引。 - 计算像素级准确率 (accuracy)。 - 使用 matplotlib 显示输入、预测、与真实标签三图对比。 ## 常见问题 1. 内存不足:尝试降低 `--window-size` 或设置 `--max-samples`。 2. 类别颜色不一致:训练阶段会记录颜色映射,预测彩色图统一使用训练映射。 3. 速度慢:降低 `--n-estimators` 或减少样本,或改用更快模型(如轻量梯度提升)。 4. 读取 TIFF 报错 `requires the 'imagecodecs' package`:执行 `pip install imagecodecs`;若仍失败,脚本已自动回退使用 PIL 读取,但建议安装 imagecodecs 获得更好的兼容与性能。 ## 后续可改进方向 - 引入多尺度特征(组合 3x3,5x5,7x7)。 - 使用卷积神经网络取代传统随机森林(需更多代码与 GPU 支持)。 - 加入类别不均衡处理(如 class_weight 或重采样)。 ## 贡献方式 欢迎提交改进:Fork 仓库 -> 新建分支 -> 提交 PR。 ## 许可证 (如有需要请在此处补充项目许可证说明) --- 英文说明参见 README.en.md 学号:202352320213 班级:2班 专业:智能科学与技术