# Sandstone **Repository Path**: ling-yuan-cccc/sandstone ## Basic Information - **Project Name**: Sandstone - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-15 - **Last Updated**: 2024-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 砂岩图像分割项目 ## 概述 本项目旨在通过训练和使用随机森林分类模型对砂岩图像进行分割。项目分为两个主要部分: 1. **训练模型** (`create_clf.py`): 从给定的砂岩图像和其对应的真实分割图像中提取特征,并训练一个随机森林分类模型,最后将模型保存到文件中。 2. **分割图像** (`segment.py`): 加载预训练的随机森林分类模型,并对新的砂岩图像进行分割,最后可视化分割结果和评估指标。 ## 项目结构 ``` sandstone_segmentation/ ├── create_clf.py ├── segment.py ├── Sandstone_1.tif ├── Sandstone_1_segment.tif ├── Sandstone_2.tif ├── Sandstone_2_segment.tif └── sandstone_clf.pkl ``` ## 依赖项 确保你已经安装了以下Python库: - `numpy` - `opencv-python` - `scikit-learn` - `matplotlib` 你可以使用以下命令安装这些依赖项: ```bash pip install numpy opencv-python scikit-learn matplotlib ``` ## 运行效果 ![alt text]() ![alt text](image.png) ## 使用方法 ### 1. 训练模型 (`create_clf.py`) 1. **准备数据**: 将 `Sandstone_1.tif` 和 `Sandstone_1_segment.tif` 放置在项目目录中。 2. **运行脚本**: ```bash python create_clf.py ``` 3. **输出**: - 训练过程中的日志信息将输出到控制台。 - 训练好的模型将保存到 `sandstone_clf.pkl` 文件中。 ### 2. 分割图像 (`segment.py`) 1. **准备数据**: 确保 `sandstone_clf.pkl` 文件已经存在,并将 `Sandstone_2.tif` 和 `Sandstone_2_segment.tif` 放置在项目目录中。 2. **运行脚本**: ```bash python segment.py ``` 3. **输出**: - 处理过程中的日志信息将输出到控制台。 - 分割结果将通过 `matplotlib` 库可视化,并显示在图形窗口中。 ## 功能细节 ### `create_clf.py` 1. **应用图像滤波器**: 对输入图像分别应用均值滤波、高斯滤波、Sobel滤波和Canny边缘检测,以提取不同特征。 2. **创建特征矩阵**: 将原始图像和滤波后的图像展平并组合成特征矩阵。 3. **分割训练集和测试集**: 使用 `train_test_split` 函数将特征矩阵和标签分割成训练集和测试集。 4. **训练随机森林模型**: 使用 `RandomForestClassifier` 训练模型。 5. **计算准确率**: 使用测试集评估模型的准确率。 6. **保存模型**: 使用 `pickle` 模块将训练好的模型保存到文件中。 ### `segment.py` 1. **加载模型**: 使用 `pickle` 模块加载预训练的随机森林分类模型。 2. **读取图像**: 读取新的砂岩图像和其对应的真实分割图像。 3. **创建特征**: 从新图像中提取特征矩阵。 4. **图像分割**: 使用加载的分类模型对特征矩阵进行预测,并将预测结果重塑为原始图像的形状。 5. **计算准确率**: 计算预测分割图像与真实分割图像的准确率。 6. **可视化分割结果**: 使用 `matplotlib` 库可视化原始图像、真实分割图像和预测分割图像。 ## 日志记录 项目中使用 `logging` 模块记录日志信息,包括训练过程中的信息和错误。日志级别设置为 `INFO`,因此所有 `INFO` 及以上级别的日志都会被记录。 ## 示例数据 - `Sandstone_1.tif`: 用于训练的原始砂岩图像。 - `Sandstone_1_segment.tif`: 用于训练的真实分割图像。 - `Sandstone_2.tif`: 用于测试的原始砂岩图像。 - `Sandstone_2_segment.tif`: 用于测试的真实分割图像。 ## 个人信息 学号:202252320304 班级:三班