# IPR07 **Repository Path**: gbu23/ipr07 ## Basic Information - **Project Name**: IPR07 - **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-14 - **Last Updated**: 2025-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IPR项目7: 砂岩截面图分割 ## 项目概述 本项目使用随机森林算法对砂岩截面图进行像素级分割,通过特征工程提取多种滤波器特征,实现高精度的图像分割。 ## 项目结构 ``` IPR07/ ├── Sandstone_imgs/ # 图像数据目录 │ ├── Sandstone_1.tif # 训练原图 │ ├── Sandstone_1_segment.tif # 训练标签 │ ├── Sandstone_2.tif # 测试原图 │ └── Sandstone_2_segment.tif # 测试标签 ├── create_clf.py # 训练脚本 ├── segment.py # 预测脚本 ├── sandstone_clf.pkl # 训练好的模型(运行后生成) ├── requirements.txt # 依赖包列表 └── README.md # 项目说明文档 ``` ## 环境配置 ### 依赖包 ```bash pip install -r requirements.txt ``` 主要依赖: - numpy >= 1.21.0 - scikit-learn >= 1.0.0 - scikit-image >= 0.19.0 - scipy >= 1.7.0 - matplotlib >= 3.4.0 ## 使用方法 ### 1. 训练模型 运行训练脚本,使用 Sandstone_1.tif 训练随机森林分类器: ```bash python create_clf.py ``` **训练流程:** 1. 加载训练数据(原图 + 分割标签) 2. 特征工程:应用6种特征提取方法 - 原始图像 - 均值滤波(窗口大小: 5x5) - 高斯滤波(sigma: 2) - Sobel滤波 - X方向 - Sobel滤波 - Y方向 - Canny边缘检测(sigma: 1) 3. 将2D图像展平为1D向量(每个像素作为一个样本) 4. 划分训练集和测试集(80%/20%) 5. 训练随机森林分类器(100棵树,最大深度20) 6. 评估模型性能 7. 保存模型到 `sandstone_clf.pkl` **期望输出:** ``` 图像形状 : (1024, 996) 完成从砂岩截面图 1及其对应分区中获取 X 和 y 完成train_test_split 完成随机森林模型 clf 的训练 准确率 : 0.9857780871747859 已保存保存随机森林模型 clf 到硬盘 ``` ### 2. 预测分割 运行预测脚本,对 Sandstone_2.tif 进行分割: ```bash python segment.py ``` **预测流程:** 1. 加载训练好的模型 2. 加载测试图像(Sandstone_2.tif) 3. 提取特征(与训练时相同的特征工程) 4. 使用模型进行预测 5. 评估预测准确率 6. 可视化结果(显示三张灰度图) **可视化输出:** - **original image**: 原始测试图像 - **segment**: 真实分割标签 - **segmentation(acc:0.986)**: 预测结果 + 准确率 结果图像保存为 `segmentation_result_YYYYMMDD_HHMMSS.png` ## 核心技术 ### 1. 像素级分类 - 将每个像素视为一个独立样本 - 特征维度:6(原图 + 5种滤波器) - 样本数量:1024 × 996 = 1,019,904 ### 2. 特征工程 使用多种滤波器增强特征表达能力: | 特征 | 作用 | 重要性 | |------|------|--------| | 高斯滤波 | 平滑降噪 | 36.70% | | 均值滤波 | 局部平均 | 33.18% | | 原始图像 | 原始信息 | 25.38% | | Sobel X | 水平边缘 | 2.45% | | Sobel Y | 垂直边缘 | 2.17% | | Canny边缘 | 边缘检测 | 0.12% | ### 3. 随机森林分类器 - **算法**: RandomForestClassifier - **参数**: - n_estimators: 100(树的数量) - max_depth: 20(最大深度) - random_state: 42(随机种子) - n_jobs: -1(并行计算) ## 性能指标 ### 训练集性能 - 训练集准确率: **99.87%** - 测试集准确率: **98.58%** ### 预测性能 - Sandstone_2.tif 预测准确率: **98.59%** - 正确像素: 1,005,525 / 1,019,904 - 错误像素: 14,379 (1.41%) ### 分类报告 ``` precision recall f1-score support 0 0.99 0.99 0.99 539222 255 0.99 0.98 0.99 480682 accuracy 0.99 1019904 ``` ## 日志系统 项目采用工业级日志系统,记录所有关键步骤: ### 日志文件 - `training_YYYYMMDD_HHMMSS.log`: 训练日志 - `prediction_YYYYMMDD_HHMMSS.log`: 预测日志 ### 日志内容 - 数据加载信息(路径、形状、数据类型) - 特征提取进度 - 模型训练过程 - 性能评估指标 - 错误追踪(带完整堆栈) ### 日志级别 - **INFO**: 正常流程信息 - **ERROR**: 错误信息(带异常追踪) - **✓**: 成功标记 - **✗**: 失败标记 ## 项目特点 1. **工业级代码质量** - 完整的异常处理 - 详细的日志记录 - 清晰的代码注释 - 模块化设计 2. **可复现性** - 固定随机种子 - 完整的依赖管理 - 详细的文档说明 3. **高性能** - 并行计算(n_jobs=-1) - 高效的特征提取 - 优化的数据结构 4. **可扩展性** - 易于添加新特征 - 支持不同的分类器 - 灵活的参数配置 ## 常见问题 ### Q1: 训练时间过长? - 减少 `n_estimators`(树的数量) - 降低 `max_depth`(树的深度) - 使用更小的训练集 ### Q2: 准确率不理想? - 增加特征数量 - 调整滤波器参数 - 使用更复杂的模型 ### Q3: 内存不足? - 减少训练样本数量 - 降低特征维度 - 使用增量学习 ## 作者信息 - **学号**:202352320116 - **班级**:智科一班 - **年级**:2023级 - **截止日期**: 2025/11/27 23:59 - **技术栈**: Python, scikit-learn, scikit-image, NumPy