isodata聚类提取图片主色并生成主色聚类图(matlab)
代码如下,能运行。
聚类函数:
function[index,class,mean] = ISODATA(x,K,theta_N,theta_S,theta_c,L,I) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%input parameters%%%%%% % x : data % K : 预期的聚类中心数 % theta_N : 每一聚类中心中最少的样本数,少于此数就不作为一个独立的聚类 % theta_S :一个聚类中样本距离分布的标准差 % theta_c : 两聚类中心之间的最小距离,如小于此数,两个聚类进行合并 % L : 在一次迭代运算中可以和并的聚类中心的最多对数 % I :迭代运算的次数序号 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% step1 n = size(x,1); N_c = K; mean = cell(K,1); for i=1:K mean{
i} = x(i,:); end ite = 1; while ite<I flag = 1; while flag %% step2 class = cell(size(mean)); for i=1:n num = Belong2(x(i,:),mean); class{
num} = [class{
num};x(i,:)]; end %% step3 for i=1:N_c size_i = size(class{
i},1); if size_i<theta_N class_i = class{
i}; mean = DeleteRow(mean,i); class = DeleteRow(class,i); N_c = N_c-1; for j=1:size_i class_ij = class_i(j,:);%the j'th row of class{
i} num = Belong2(class_ij,mean); class{
num} = [class{
num};class_ij]; end end end %% step4 for i=1:N_c if ~isempty(mean{
i}) mean{
i} = sum(class{
i})./size(class{
i},1); end end %% step5 Dis = zeros(N_c,1)
讯享网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24033.html