基于K-means的图像分割.doc

基于K-means的图像分割.doc

ID:50906623

大小:99.00 KB

页数:4页

时间:2020-03-15

基于K-means的图像分割.doc_第1页
基于K-means的图像分割.doc_第2页
基于K-means的图像分割.doc_第3页
基于K-means的图像分割.doc_第4页
资源描述:

《基于K-means的图像分割.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、基于K-means的图像分割一、实验目的(1)通过K-means聚类实现图像分割,在实验板上观察实验效果。(2)掌握VisualDSP++5.0的使用。二、实验环境(1)软件:WindowsXp、VisualDSP++5.0(2)硬件:仿真器、EBF-561实验平台三、算法描述图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。近年来,图像分割在实际工程中已经得到了广泛应用。本次实验主要用到的分割算法为K-means算法。K-means算法是很典型的基于距离的聚类算

2、法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。其原理为:先取k个初始距离中心。计算每个样品到这k个中心的距离,找出最小距离把样品归入最近的聚类中心,修改中心点的值为本类所有样品的均值,再计算各个样品到k个中心的距离,重新归类、修改新的中心点,直到新的距离中心等于上一次的中心点时结束。此算法的结果受到聚类中心的个数以及初始聚类中心的选择影响,也受到样品几何性质及排列次序影响。如果样品的几何特性表明他们能形成几个相距较远的小块孤立区

3、域,则算法多能收敛。根据原理,可定义准则函数为:算法原理可以解释如下:四、算法步骤输入:k,data[n](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[i]z之和}/标记为i的个数;(4)重复(2)(3),直至所有c[j]值的变化小于给定阈值。五、实现结果按照下列步骤,程序正确运行,得到正确的分

4、割结果。(1)上机完善图像分割k-means算法程序;(2)搭建实验硬件环境;(3)打开VisualDSP++集成开发环境,建立Session状态;(4)打开并运行工程;(5)调试程序;(6)在实验板上检查分割效果。六、算法阐述K-means算法是一种得到最广泛使用的基于划分的聚类算法,把n个对象分为k个簇,以使簇内具有较高的相似度。相似度的计算根据一个簇中对象的平均值来进行。这样的特性就导致了算法对初始值敏感,对于不同的初始值,可能会导致不同的聚类结果,而且对于“噪声”和孤立数据敏感,少量的该类数据能够对平均值产生极大影响,针对这

5、些问题,可以通过数据预处理、优化初始聚类中心选择、改良迭代过程中聚类中心的选择来改进算法。七、主要程序及解释要求:bmpimage.imgbuf为图像数据首地址,指针类型;图像宽度变量为bmpimage.infohead.biWidth,高度为bmpimage.infohead.biHeight;分割结果(不同区域标识对应的灰度值)要求仍然存储在bmpimage.imgbuf为首地址的区域。intk,j;intsize;//存储图片灰度数据的个数intsum1,sum2;//两类总灰度值大小总和intcount1,count2;//

6、两类总样本的个数unsignedcharc[3];unsignedchar*data;data=bmpimage.imgbuf;c[1]=data[1];//初始化两类聚类中心,分别去第1个和第1000个数据点的灰度值c[2]=data[1000];size=bmpimage.infohead.biWidth*bmpimage.infohead.biHeight;intlabel[N];//存储各个样本点的类别for(j=0;j<30;j++)//迭代30次{sum1=0;//初始化变量sum2=0;count1=0;count2=

7、0;for(k=0;k=(pow((data[k]-c[2]),2)))//判断各个样本到聚类中心的距离,哪个近,就分到哪一类{label[k]=2;//第2类,样本综合更新,个数更新sum2=sum2+data[k];count2++;}else{label[k]=1;sum1=sum1+data[k];count1++;}}c[1]=sum1/count1;//更新聚类中心c[2]=sum2/count2;}for(k=0;k

8、为了让其差别更明显,两类分别取灰度值0,255,便于检查聚类效果{if(label[k]==1)data[k]=0;elsedata[k]=255;}八、实验总结在刚开始编程的时候走了一些弯路,主要是因为对算法原理理解的不够透彻,后来

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。