【问题标题】:K means clustering in matlabK表示matlab中的聚类
【发布时间】:2016-10-13 00:46:56
【问题描述】:

我发现下面的代码使用 K 均值聚类分割图像,但在下面的代码中,他们使用一些计算来找到最小值、最大值。我知道 K 均值算法的基本概念。但我不能'不明白这段代码。谁能解释一下。

  function [Centroid,new_cluster]=kmeans_algorithm(input_image,k)
% k = 4;
input_image=double(input_image);
new_image=input_image;
input_image=input_image(:);
min_val=min(input_image);
input_image=round(input_image-min_val+1);
length_input_image=length(input_image);
max_val=max(input_image)+1;
hist_gram=zeros(1,max_val);
hist_gram_count=zeros(1,max_val);
for i=1:length_input_image
    if(input_image(i)>0)
        hist_gram(input_image(i))=hist_gram(input_image(i))+1;
    end;
end
IDX=find(hist_gram);
hist_length=length(IDX);
Centroid=(1:k)*max_val/(k+1);
while(true)
    old_Centroid=Centroid;
    for i=1:hist_length
        new_val=abs(IDX(i)-Centroid);
        hist_val=find(new_val==min(new_val));
        hist_gram_count(IDX(i))=hist_val(1);
    end
    for i=1:k,
        loop_count=find(hist_gram_count==i);
        Centroid(i)=sum(loop_count.*hist_gram(loop_count))/sum(hist_gram(loop_count));
    end
    if(Centroid==old_Centroid) break;end;
end
length_input_image=size(new_image);
new_cluster=zeros(length_input_image);
for i=1:length_input_image(1),
    for j=1:length_input_image(2),
        new_val=abs(new_image(i,j)-Centroid);
        loop_count=find(new_val==min(new_val));
        new_cluster(i,j)=loop_count(1);
    end
end
Centroid=Centroid+min_val-1;

尤其是上面代码中这个input_image(:)的目的是什么。在谷歌他们说它像矩阵。但我仍然很困惑,这是矩阵还是数组

【问题讨论】:

  • 你也可以看看this

标签: algorithm matlab k-means


【解决方案1】:

符号(:) 将多维向量折叠成列向量。

data = rand(10,4);

size(data(:))
%   40  1

然后你可以将一个普通函数应用到一个整个多维数组

min(data(:));

而不是独立到每个维度

min(min(data));

在您发布的代码中,它们将input_image 折叠为列向量,以便更轻松地应用minmaxlength 等函数。

更新

您发布的代码实际上并未执行 k-means 聚类。它只是创建图像中所有值的直方图。他们使用minmax 来确定要用于直方图的箱数。

【讨论】:

  • 谢谢,你能解释一下为什么他们使用最小最大长度函数,在K表示算法,我们需要找到质心。但是他们在做什么?请解释一下这段代码。
  • @temp 已更新。该代码实际上并未执行 kmeans 聚类(请参阅从未使用过 k
  • 对不起,这是我的错误。我更新了它。请通过它
  • @temp 知道我告诉过你的关于(:) 的内容,请自己单步执行代码。这实在是太多了,你真的只问了一个关于(:) 是什么意思的具体问题,并且已经得到了回答。
  • 你能告诉我为什么他们在这里用图像值创建直方图吗?
猜你喜欢
  • 2011-12-22
  • 2013-05-17
  • 1970-01-01
  • 2013-02-14
  • 2013-08-29
  • 2016-08-12
  • 2016-09-06
  • 2017-04-06
相关资源
最近更新 更多