# SandFaceSplit **Repository Path**: li-k-z/sand-face-split ## Basic Information - **Project Name**: SandFaceSplit - **Description**: 分割砂岩截面图 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-18 - **Last Updated**: 2025-11-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SedRockSplit 砂岩截面图像的监督式像素级分割示例项目。 ## 1. 项目背景 我们仅有一张已标注的砂岩截面图 `Sandstone_1.tif` 及其对应的分区标签图 `Sandstone_1_segment.tif`,希望“学习”其分区规律,然后对新的砂岩截面图 `Sandstone_2.tif` 进行自动分区,并与“正确答案” `Sandstone_2_segment.tif` 比较评估准确率。 ## 2. 方法概述 核心思想:将图像分割问题转换为“每个像素的分类”问题。训练阶段把已标注图的每一个像素视为一个样本,其标签来自分区图对应像素值。由于只有一张训练图,原始灰度强度不足以支撑有效分类,需要通过多种滤波与边缘检测提取额外的纹理 / 结构特征形成多通道特征矩阵,再喂给传统机器学习分类器(示例使用随机森林)。 ## 3. 特征工程 对灰度图做多种算子处理,得到若干特征通道(均归一化到 0-1): 1. 原始灰度 f0 2. 均值滤波 (Blur) f1 3. 高斯滤波 f2 4. Sobel X / Y 梯度组合的幅值 sobel_mag 5. Laplacian 二阶算子 lap 6. Canny 边缘 canny 最终将这些 (H, W) 通道堆叠为 (H, W, C),再 reshape 为 (N, C) 的特征矩阵,其中 N = H*W。 ## 4. 模型训练流程 (`create_clf.py`) 步骤: 1. 读取 `Sandstone_1.tif` 与 `Sandstone_1_segment.tif` 2. 提取多通道特征 -> `X.shape = (N, C)` 3. 标签 `y.shape = (N,)` 4. `train_test_split` 保持标签分布(stratify) 5. 训练 `RandomForestClassifier` 6. 输出验证集准确率 & 保存模型 `clf.pkl` 示例输出: ``` 图像形状: (1024, 996) 完成从砂岩截面图1及其对应分区中获取X和y 完成train_test_split 完成随机森林模型clf的训练 准确率: 0.9643431425097722 已保存保存随机森林模型clf到硬盘 ``` ## 5. 分割与评估 (`segment.py`) 1. 加载已保存模型 `clf.pkl` 2. 对 `Sandstone_2.tif` 提取同样特征 3. 执行 `clf.predict` 得到预测分区图 4. 与 `Sandstone_2_segment.tif` 像素级比对,计算准确率 5. 可视化三个灰度图:原图 / 真值分区 / 预测分区(标题含 acc) 命令行示例输出: ``` Sandstone_2 segmentation accuracy: 0.967123 ``` ## 6. 项目结构 ``` sed-rock-split/ ├── create_clf.py # 训练脚本 ├── segment.py # 预测与评估脚本 ├── requirements.txt # 依赖列表 ├── Sandstone_imgs/ # 图像与标注 │ ├── Sandstone_1.tif │ ├── Sandstone_1_segment.tif │ ├── Sandstone_2.tif │ └── Sandstone_2_segment.tif ├── README.md # 中文说明 └── README.en.md # 英文说明(可补充) ``` ## 7. 安装与运行 请确保已安装 Python 3.9+。 安装依赖: ```powershell python -m pip install -r requirements.txt ``` 训练模型: ```powershell python create_clf.py ``` 对第二张图进行分割评估并显示: ```powershell python segment.py ``` 无 GUI 环境或希望保存结果: ```powershell python segment.py --no-show --save Sandstone_imgs/segmentation_result.png ```