- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于K-means 的图像分割
一、实验目的
(1)通过K-means聚类实现图像分割,在实验板上观察实验效果。
(2)掌握VisualDSP++5.0的使用。
二、实验环境
(1)软件:WindowsXp、VisualDSP++5.0
(2)硬件:仿真器、EBF-561实验平台
三、算法描述
图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。近年来,图像分割在实际工程中已经得到了广泛应用。
本次实验主要用到的分割算法为K-means算法。K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。其原理为:先取k个初始距离中心。计算每个样品到这k个中心的距离,找出最小距离把样品归入最近的聚类中心,修改中心点的值为本类所有样品的均值,再计算各个样品到k个中心的距离,重新归类、修改新的中心点,直到新的距离中心等于上一次的中心点时结束。此算法的结果受到聚类中心的个数以及初始聚类中心的选择影响,也受到样品几何性质及排列次序影响。如果样品的几何特性表明他们能形成几个相距较远的小块孤立区域,则算法多能收敛。
根据原理,可定义准则函数为:
算法原理可以解释如下:
四、算法步骤
输入: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]值的变化小于给定阈值。
五、实现结果
按照下列步骤,程序正确运行,得到正确的分割结果。
(1)上机完善图像分割k-means算法程序;
(2)搭建实验硬件环境;
(3)打开VisualDSP++集成开发环境,建立Session状态;
(4)打开并运行工程;
(5)调试程序;
(6)在实验板上检查分割效果。
六、算法阐述
K-means算法是一种得到最广泛使用的基于划分的聚类算法,把n个对象分为k个簇,以使簇内具有较高的相似度。相似度的计算根据一个簇中对象的平均值来进行。这样的特性就导致了算法对初始值敏感,对于不同的初始值,可能会导致不同的聚类结果,而且对于“噪声”和孤立数据敏感,少量的该类数据能够对平均值产生极大影响,针对这些问题,可以通过数据预处理、优化初始聚类中心选择、改良迭代过程中聚类中心的选择来改进算法。
七、主要程序及解释
要求:bmpimage.imgbuf为图像数据首地址,指针类型;图像宽度变量为bmpimage.infohead.biWidth,高度为bmpimage.infohead.biHeight;分割结果(不同区域标识对应的灰度值)要求仍然存储在bmpimage.imgbuf为首地址的区域。
int k,j;
int size; //存储图片灰度数据的个数
int sum1,sum2;//两类总灰度值大小总和
int count1,count2;//两类总样本的个数
unsigned char c[3];
unsigned char *data;
data= bmpimage.imgbuf;
c[1] = data[1];//初始化两类聚类中心,分别去第1个和第1000个数据点的灰度值
c[2] = data[1000];
size = bmpimage.infohead.biWidth * bmpimage.infohead.biHeight;
int label[N];//存储各个样本点的类别
for(j=0;j30;j++) //迭代30次
{
sum1 = 0;//初始化变量
sum2 = 0;
count1 = 0;
count2 = 0;
for(k = 0;k size - 1;k++)
{
if (pow((data[k]-c[1]),2)=(pow((data[k]-c[2]),2)))//判断各个样本到聚类中心的距离,哪个近,就分到哪一类
{
label[k] = 2;//第2类,样本综合更新,个数更新
sum2 = sum2 + data[k];
count2++;
}
else
{
label[k] = 1;
sum1 = sum1 + data[k];
您可能关注的文档
- 土木工程材料2013春第二套作业.doc
- 土由可塑状态转为流动状态的界限含水量称为液限.doc
- 圣佳力建筑第410期.doc
- 在CISCO路由器上配置NAT功能.doc
- 在linkwedo企业社区里办公很轻松很fashion(简版).docx
- 在PowerPoint2010中设置滚动文本框.doc
- 在VFP表中删除记录.doc
- 在Windows7中如何用密码保护共享文件.docx
- 在word2003中使用组织结构图.doc
- 在word中怎样设置每页两栏每栏均有页码.doc
- 数据集成工具:Azure Data Factory:5.使用映射数据流进行数据转换.docx
- 消息队列:Kinesis:Kinesis数据流监控与最佳实践.docx
- 数据分析工具:Presto:Presto数据类型与函数.docx
- 数据集成工具:Apache Nifi:Nifi数据流文件与属性理解.docx
- 数据集成工具:Talend:Talend数据集成最佳实践与案例分析.docx
- 消息队列:Kinesis:Kinesis基础概念与架构.docx
- 数据湖:Apache Hudi:Hudi在批处理数据处理中的应用.docx
- 数据湖:Apache Hudi:数据湖概念与架构.docx
- 数据集成工具:Informatica:云数据集成与InformaticaCloud教程.docx
- 消息队列:ActiveMQ:ActiveMQ的Web控制台使用.docx
文档评论(0)