华南理工大学《数据挖掘》实验报告.docx
- 文档编号:23475132
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:12
- 大小:2.89MB
华南理工大学《数据挖掘》实验报告.docx
《华南理工大学《数据挖掘》实验报告.docx》由会员分享,可在线阅读,更多相关《华南理工大学《数据挖掘》实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
华南理工大学《数据挖掘》实验报告
华南理工大学《数据挖掘》实验报告
题目:
数据仓库与数据挖掘实验
K-means图像分割
学院计算机科学与工程
专业计算机科学与技术(全英创新班)
学生姓名黄炜杰
学生学号201230590051
指导教师王家兵
课程编号145013
课程学分2分
起始日期2015年5月18日
实验概述
【实验目的及要求】
目的:
实现K-means聚类算法进行图像分割.
要求:
·以迭代次数为终止条件
·用图像分割Berkeley图片数据库中的图片作为数据集
·根据具体图像,自主设定k值
·尽量多使用一些图像特征,例如组合颜色、空间邻近性、纹理、SIFT等特征
【实验环境】
操作系统:
window8(64bit)
编译器:
MatlabR2012b
编程语言:
Matlab
实验内容
【实验方案设计】
实验流程如下图1:
图1.k-means图像分割实验流程图
1根据像素点色度,把原图片进行平滑模糊化,减少孤立点数目,提高聚类质量。
2根据原图片进行变换,提取像素点特征,把图片转换为数据矩阵。
3对每个像素点进行聚类,根据聚类结果对图片进行分割,产生分割子图。
实验过程:
原始图片中,若清晰度很高,同一物体中(聚类中的同一类)存在少数点与其他点区分度很大,肉眼粗略看没有什区别,但是这些点却会对聚类产生很大影响,生成一些列很零散的点群,降低聚类质量。
如图2中,绿色框中存在大量零散的孤立点,而红色框中,可以看到物体的轮廓比较粗糙,分割结果并不理想。
图2.样本图片模糊化前分割结果
对图片进行模糊化有助于去除孤立点,减少噪声,使得分割后的图像连通性更强。
在本实验中,模糊的处理方法是根据像素点的邻居点对本身进行平滑,大致算法如下:
1.计算每个像素点的8个邻居点与本身的相似度,根据相似度对每个邻居点赋予权重
,其中
=
sum(
)
2.设定比值r%,每个像素点的色度r%由本身决定,(1-r%)由邻居点决定。
3.更新每个像素点的色度:
色度=色度*r%+
4.重复步骤1~3k次,其中k为用户预设值
下图是进行3次模糊化后,可看出仅仅经过3次模糊化迭代,图像的锐化程度大大降低,可见图中红色方框,模糊化前狗背部毛发的纹理非常清晰,很多黑白相间的点,而模糊化后毛发颜色变得平滑,在背景颜色与毛发中某些颜色很相近的情况中,模糊化前的图像可能会导致错误的分割结果,而后者避免了这一问题。
较之直接根据附近8个邻居点取平均值进行模糊化,这种加权模糊化的方式不仅没有使物体边界变得模糊,反而增加了其区分度。
聚类时使用的是模糊化的图像,而最终得到分割图片仅利用模糊图片的点进行索引,内容还是使用模糊化前的图像。
所以模糊化过程仅仅改善分割结果,不会降低图片的质量。
图3.样本图片模糊化前后
对模糊化前后的图片分别进行k-means聚类分割,结果对比在图4中。
留意分割结果中的绿色框,模糊化前产生了较多的零散点群,而模糊化后,零散点群的数量大概减少了60%,而物体边界则变得更加平滑,分割效果变好。
虽然分割结果并没大大提升,但是此处理方法计算代价比较少,值得采取,其时间复杂度为O(n*t),其中n为像素点个数,t为迭代次数。
模糊化此大小为552*799个像素点的样例图片,只需要1.049秒(其中本机配置:
CPU2.5G四线程,RAM=4G,非SSD硬盘)。
图4.样本图片模糊化前后分割结果
模糊化代码函数存储在imObfus.m中,其中核心代码为:
源图片都以RGB格式存储,本实验中把原图像从RGB三维空间转化为CIELab色彩空间,并提取a,b色彩分量作为像素点为特征值。
选择CIELab色彩空间的原因是CIELab色彩空间的相互分量联系性比较小,有利于分割,相对于gabor滤波提取纹理进行分割、采取SIFT特征来说,其算法复杂性较低,且能产生较好的结果,缺点之一就是分割图像的连通性较弱。
本实验中特征提取代码在runMe.m中,核心代码如下:
CIELab色彩空间转换如图5所示,a,b分量能产生较好聚类结果:
图5.样本图片转化为CIRLab色彩空间
本实验采用k-means算法伪代码如下:
-----------------------------------------------------------------------------
输入:
k,data[n],iter
(1)随机选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
(2)对于data[0]….data[n],分别与c[0]…c[k-1]比较,假定与c[i]距离最小,就标记为i;
(3)对于所有标记为i点,重新计算c[i]={所有标记为i的data[j]之和}/标记为i的个数;
(4)重复
(2)(3),直到所有c[i]值的变化小于给定阈值或不发生任何变化或迭代次数达到iter次。
-----------------------------------------------------------------------------
距离度量采用欧几里得距离,最大迭代次数为100次。
核心代码如下:
初次聚类:
初次聚类时,随机选取中心点,先计算第一个中心点与所有样本点的距离,并把所有样本点归为类别1。
对于其他类别,逐个计算与中心点的距离,若距离小于当前距离记录,把样本点的类别更新为当前类,并把距离更新为当前距离。
迭代聚类:
更新当前迭代次数,若达到最大迭代次数,则返回
更新各个类的质心,若质心没有发生变化,则返回
先计算第一个中心点与所有样本点的距离,并把所有样本点归为类别1。
对于其他类别,逐个计算与中心点的距离,若距离小于当前距离记录,把样本点的类别更新为当前类,并把距离更新为当前距离。
本算法时间复杂度为O(nkt),其中n为像素点个数,k为聚类个数,t为迭代次数。
在本实验中,n通常为百万数量级,k在2~5之间,t平均为20次左右。
只需较少时间则能产生很好的聚类结果。
实验结果
【数据集选取】
本实验采用了Berkeley图片数据库中的BSDS500数据集中的10张图片作为分割图片,图片存储在代码文件夹的image/文件夹下。
本报告中选取了5张图片进行说明,它们分别是:
编号
图片
聚类数目
期望结果
1
2
类1:
北极熊
类2:
背景
2
2
类1:
岩石
类2:
海与天
3
3
类1:
鱼
类2:
珊瑚
类3:
海水
4
3
类1:
蓝天
类2:
白云
类3:
山、地面
5
4
类1:
天空
类2:
岩石
类3:
植物
类4:
地面
【实验结果分析】
图片1:
北极熊和白色的雪地背景成功分开了,嘴中的食物也被归到背景当中,孤立点较少,在中下方和右下方各有一处,分割结果优秀。
图片2:
成功区分岩石和海,海上的一小块岩石也被识别。
不过岩石上方的一小部分被分割到海与天部分,岩石部分中也存在少量海的部分,分割结果良好。
图片3:
海、鱼、珊瑚都被成功区分,单鱼下方的海底也被归到鱼中问题不大,因为只有3个类,而珊瑚中却含有一部分海,且孤立点群较多,分割结果一般。
图片4:
蓝天、白云、山与地都被非常好地区分了,几乎没有错误,分割结果优秀。
图片5:
蓝天、岩石都被正确分割,单植物有一部分被归到地面上去了,分割结果一般。
实验结论与心得
通过本次实验我看到了k-means的强大之处。
一开始我很质疑这么多的像素点,这么多的颜色,k-means怎么能区分出来。
刚开始实验的时候我只是简单地用RBG三个色彩作为特征值,分出来的结果一团糟,后来上网查阅了相关内容,做了对比后选取了lab色彩空间ab分量作为特征,竟然能成功把物体和背景区分出来了,而且几百万个像素点,整个过程也就几秒的事情,我不得不为之而赞叹。
为了提升分割结果,我也尝试了用自己的方法对图片进行预处理。
用邻居点均值代替像素点、用邻居点均值作为像素点的一部分这两种方法均能起到很好模糊作用,可是缺点是物体边界也被模糊化了,影响分割结果。
后来我根据相似度对邻居点进行加权处理,模糊效果变好了,分割效果也得到了优化。
指导教师评语及成绩
评语:
成绩:
指导教师签名:
批阅日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据挖掘 华南理工大学 数据 挖掘 实验 报告