① k-means聚类算法怎么提取图像特征
一,K-Means聚类算法原理
k-means 算法接受参数 k
;然后将事先输入的n个数据对象划分为
k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对
象”(引力中心)来进行计算的。
K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
假设要把样本集分为c个类别,算法描述如下:
(1)适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类;
(3)利用均值等方法更新该类的中心值;
(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。
该算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。
② 如何判断聚类算法图像分割结果的质量,在K-means和FCM 算法下
理论上就看聚类结果的标准差就可以,其实如果自己做实验的话,用人眼看就行了。
③ 空间聚类算法能不能用于图像分割
空间与图像是再自然不过的类似数据,尤其灰度图,(x, y, g) 构成三维空间(g(x,y)是像素灰度),彩色图只是多了二维,比如 (x, y, r, g, b) ,当然通常不用 RGB 属性来分类。但是分割本身不是一个简单概念。
④ 给你一幅图像如何用模糊C均值聚类分析算法来对其进行分类,希望能给出具体的框架流程
http://www.swarmagents.cn/thesis/detail.asp?id=64
⑤ 网上的一些matlab程序聚类算法程序中为什么没有输入、输出图像的步骤
聚类不一定是要对图像进行操作的,一般如果用于图像都是先提取目标的特征或其他信息再使用聚类算法。可能你下的matlab聚类算法输入和输出是已经提取特征完毕的矩阵,你可以check一下是否是用矩阵输入的特征来聚类的
⑥ 求教用MATLAB将图像聚类方法
最简单的就是用k-means~~~~
⑦ matlab图像聚类分割算法 求大神告知以下代码是用了什么方法还有怎么把图像分割和聚类算法结合在一起。
用了K均值聚类算法,即求特征点到两个聚类中心的距离,哪个小就将他归于哪一类中,即D1和D2
⑧ 我正在做用遗传算法的图像聚类 IM=imread('2.jpg');%读入图像 IM=IM(:,:,1); 第二行代码是什么意思啊
IM读入的图像,应该是RGB图像
IM(:,:,1)表示只取IM的R值,IM(:,:,2)就表示取IM的G值,类推到B
⑨ 聚类的图像分割算法
《C语言数值算法程序大全》第二版,定价88元,楼主掏点金子吧,我手头有一本,不过你看不着。
⑩ 谁有matlab模糊聚类算法进行图像分割的源程序啊
%%%%%%%%%%%%%%%模糊聚类%%%%%%%%%%%%%%%%%%%%%%%
clear;
loadF:\从0开始\数据\data.txt;
INPUTDATA=data;
%--------原始数据标准化-------%
disp('请选择原始数据标准化方式:');
disp('<1-总和标准化|2-标准差标准化|3-极大值标准化|4-极差标准化>');
wayforstand=input('请输入:');
switchwayforstand
case1,
DATAFORCLUS=standard_use_sum(INPUTDATA);
case2,
DATAFORCLUS=standard_use_std(INPUTDATA);
case3,
DATAFORCLUS=standard_use_max(INPUTDATA);
case4,
DATAFORCLUS=standard_use_jc(INPUTDATA);
otherwise
error('您的输入不符合要求->执行结束!!!');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基于模糊等价关系的模糊聚类%%%%%%%%%%%%%%%%%%%%%%
%----------构造相似关系-----------%
numrows=size(DATAFORCLUS,1);
numcols=size(DATAFORCLUS,2);
disp('请选择对象之间相似性统计量的方式:');
disp('<1-相关系数法|2-夹角余弦法|3-指数相似系数法|4-绝对值指数法|5-算术平均最小法|6-最大最小值法|7-绝对值差数法|8-数量积法>');
wayforr_ij=input('请输入:');
switchwayforr_ij
case1,%-----------------------------------相关系数法
fori=1:numrows,
forj=1:numrows,
meani=mean(DATAFORCLUS(i,:));meanj=mean(DATAFORCLUS(j,:));
simiR(i,j)=sum((DATAFORCLUS(i,:)-meani).*(DATAFORCLUS(j,:)-meanj))/...
(sqrt(sum((DATAFORCLUS(i,:)-meani).^2))*sqrt(sum((DATAFORCLUS(j,:)-meanj).^2)));
end
end
case2,%-----------------------------------夹角余弦法
fori=1:numrows,
forj=1:numrows,
simiR(i,j)=sum(DATAFORCLUS(i,:).*DATAFORCLUS(j,:))/...
(sqrt(sum(DATAFORCLUS(i,:).*DATAFORCLUS(i,:)))*sqrt(sum(DATAFORCLUS(j,:).*DATAFORCLUS(j,:))));
end
end
case3,%-----------------------------------指数相似系数法
case4,%-----------------------------------绝对值指数法
case5,%-----------------------------------算术平均最小法
case6,%-----------------------------------最大最小值法
case7,%-----------------------------------绝对值差数法
case8,%-----------------------------------数量积法
otherwise
error('您的输入不符合要求->执行结束!!!');
end
%-------改造成等价关系----------%
sign=0;
numselfmul=1;
simiRk=eye(numrows);
equi_tem=simiR;
whilesign==0,
fori=1:numrows,
forj=1:numrows,
forc=1:numrows,
rij_temp(c)=min([equi_tem(i,c)equi_tem(c,j)]);
end
simiRk(i,j)=max(rij_temp);
end
end
%--------------%
ifsum(sum(simiRk-equi_tem,1))~=0,
numselfmul=numselfmul+1;
equi_tem=simiRk;
else
sign=1;
break
end
%--------------%
end
ifsign==1,
disp('从相似矩阵到等价矩阵改造成功!!!');
else
disp('从相似矩阵到等价矩阵改造失败!!!');
end
equiR=simiRk;
numclass=input('请输入聚类数:');
%---------在不同的截集水平进行聚类--------------%
clasc=0;
comp_vec(1,1:numrows)=0;
index=0;
clasc=0;
tip=0;
alpha=0;
temnumeachclass=0;
while(tip==0),
%alpha=input('请输入进行分类的截集水平λ:');
%alpha=0.5;%调试
if(alpha<0||alpha>1),
error('您输入的截集水平λ不符合分类要求->执行结束!!!');
end
comp_arr=ones(numrows)*alpha;
result_arr=(equiR>=comp_arr);%--------------------result_arr判断矩阵
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%捡菜算法
fori=1:numrows,
ifsum(comp_vec(1,:)==result_arr(i,:))<numrows,%-----------说明没有归类
temnumeachclass=0;
%numeachclass(clasc)=index-temnumeachclass;
temsave=result_arr(i,:);
forj=1:numrows,
ifsum(result_arr(j,:)==temsave)==numrows,
index=index+1;
class(index)=j;
result_arr(j,:)=0;%--------------------说明已经被归类
temnumeachclass=temnumeachclass+1;
end
end
clasc=clasc+1;
nec(clasc)=temnumeachclass;
else
continue;
end
end
ifclasc>=numclass,
tip=1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%当模糊分类的数目小于等于所给出的类数时退出循环体
disp('成功!!!');
else
clearclass;
clearnumeachclass;
clearnec;
clasc=0;
index=0;
temnumeachclass=0;
alpha=alpha+0.01;
end
end
%----取聚类结果----%
num=0;
n=0;
fori=1:clasc,
forj=1:nec(i),
num=num+1;
n=n+1;
CLUS(n,:)=INPUTDATA(class(num),:);
end
n=n+1;
CLUS(n,:)=inf;
end
%formatsingle(CLUS)
lenexport=size(CLUS,1);
fori=1:lenexport,
RESULT(i,:)=sprintf('%15.2f',CLUS(i,:));
end
RESULT