3986.net
小网站 大容量 大智慧
当前位置:首页 >> 计算机软件及应用 >>

基于K-means 的图像分割


基于 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 ?
算法原理可以解释如下:

(xj -ui) ? x? S
2 i ?1
j? i

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;j<30;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]; count1++; } } c[1] = sum1 / count1;//更新聚类中心 c[2] = sum2 / count2; } for(k=0; k < size - 1; k++)//为了让其差别更明显,两类分别取灰度值 0,255,便 于检查聚类效果 { if (label[k] == 1) data[k] = 0; else data[k] = 255; }

八、实验总结
在刚开始编程的时候走了一些弯路,主要是因为对算法原理理解的不够透彻,后来, 在老师和同学的帮助下,理清了编程的思路,顺利的编写完算法,并且成功运行。 在将程序下载到板子上的时候也出现了一些问题,比如说图像显示不清楚,在最大化 两类距离后,效果好了很多,与此同时,板子也有一些问题,不过,在更换板子后,问题都 顺利的得到了解决,成功的对图片进行了 2 分割。


推荐相关:

基于k-means的图像分割

基于k-means的图像分割 - 班级 021151 智能控制导论 大作业 题学专 目院业 基于 K-means 的图像分割 电子工程学院 智能科学与技术 王浩楠(02115...


基于k-means的图像分割

基于k-means的图像分割 - 班级 021151 智能控制导论 大作业 题学专 目院业 基于 K-means 的图像分割 电子工程学院 智能科学与技术 王浩楠(02115...


基于K-means的遥感图像分割

基于K-means的遥感图像分割 - 硕士研究生学位论文 新疆大学 论文题目(中文):基于 K-means 的遥感图像分割 论文题目(外文): Remote Sensing Image...


kmeans 图像分割代码

图像| kmeans| kmeans 图像分割代码_机械/仪表_工程科技_专业资料。基于matlab的kmeans算法源代码 希望对有用到的朋友有帮助 he = imread('02.png'); % 读入...


K均值聚类在基于OpenCV的图像分割中的应用

K均值聚类在基于OpenCV的图像分割中的应用_计算机软件及应用_IT/计算机_专业资料...3.2 K-均值聚类算法的工作原理: K-means 算法的工作原理: 算法首先随机从...


K-MEANS岩石铸体图像分割及孔隙度的计算

K-MEANS岩石铸体图像分割及孔隙度的计算 - 摘要:为了准确获取储层的孔隙度进行地层解释并建立地质模型,设计了基于 k?means 的岩 石铸体图像分割及孔隙度的计算...


kmeans聚类图像分割 matlab

kmeans聚类图像分割 matlab_工学_高等教育_教育专区。kmeans聚类图像分割 ...MATLAB的图像分割算法研... 21页 1下载券 基于matlab的图像分割技... 17页...


基于Matlab的彩色图像分割

基于Matlab的彩色图像分割 - 3 Matlab 编程实现 编程实现 3.1 Matlab 编程过程 用 Matlab 来分割彩色图像的过程如下: 1) 获取图像的 RGB 颜色信息。通过与...


K-means岩石铸体图像分割及孔隙度的计算

K-means岩石铸体图像分割及孔隙度的计算 - K-means 岩石铸体图像分割及孔隙度的计算 摘要:为了准确获取储层的孔隙度进行地层解释并建立地质模 型,设计了基于 k...

网站首页 | 网站地图
3986 3986.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com