目录

谱聚类图像分割

《数据科学与大数据基础》课程实验(大二下):将图像建模为无向加权图,用幂迭代求归一化拉普拉斯矩阵的第二小特征值对应特征向量,再做 k-means 二分类,实现图像分割。

任务背景

实验要求完成四步流程(依据本人实验报告提炼):

  1. 图像预处理:读取 PNG,高斯模糊去噪,下采样(100×100,后续版本降到 30×30)并可视化;
  2. 相似图构建:像素为顶点,特征取归一化 RGB 与归一化坐标,仅连接 ±5 行/列内像素(模运算实现环绕边界),按颜色/空间加权距离计算高斯边权,过滤低于阈值的边,输出边数与平均度;
  3. 特征向量计算:构造归一化拉普拉斯矩阵 L = I − D^(−1/2) A D^(−1/2),对变换矩阵 M = 2I − L 用幂迭代(deflation 求第二特征向量),输出迭代次数与特征向量强度图;
  4. 谱聚类分割:以特征向量为投影空间,k-means(k=2)聚类,最近邻插值上采样回 100×100 并可视化。

版本迭代:1.0.0 为初版;”先抽样聚合、后插值扩充”思路下,1.1.x 系列逐步降低下采样分辨率、参数化建图、增加批量超参数搜索与 eigsh 标准库对照(已注释),最终 1.1.7 版收敛。实验结论:前景背景色差大的图像分割效果好;超参数(高斯核、颜色/空间权重、边权阈值、邻域半径)对开销与效果影响显著。

内容结构

路径 说明
source/main_1.0.0.py 初版完整流水线:建图、拉普拉斯、幂迭代、k-means 分割
source/main_1.1.7.py 最终版:30×30 下采样 + 最近邻插值恢复,参数化,批量参数实验
速.py 对照脚本:OpenCV k-means 直接按像素颜色聚类,含 NumPy 广播相似度矩阵
readme.txt 原始运行说明与版本注释(作者自写)
.gitignore 忽略运行时生成的输出图片

运行方法

依赖(源码无 requirements.txt,由 import 推断):

pip install numpy opencv-python matplotlib scikit-learn scipy

运行(需自备测试图片,仓库未收录图像数据):

cd source
python main_1.0.0.py   # 修改 __main__ 中 image_path,如 bear.png
python main_1.1.7.py   # 默认跑 test/test (5).png 与内置参数网格

程序在图片同目录输出 *_gaussian_blur.png、*_depth_power.png、*_result_power.png 等结果图。调参入口:spectral_clustering_pipeline_with_compare 的 color_weight / spatial_weight / threshold / neighbor_radius,或 batch_param_experiment 传入参数网格。

来源声明

  • 谱聚类算法流程与实验要求来自课程下发的实验指南与讲义(不入库);
  • 全部代码为本人独立实现并迭代(1.0.0 → 1.1.7),仅调用 numpy、OpenCV、scipy、scikit-learn、matplotlib 等公开库;
  • 实验报告、结果图片目录、提交压缩包按仓库收纳原则未收录。
关于

数据科学实验:基于 numpy 与 OpenCV 的谱聚类图像分割,两版迭代与多组参数

37.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号