Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 一种改进的k-均值图像聚类算法_Matlab_K Means - Fatal编程技术网

Matlab 一种改进的k-均值图像聚类算法

Matlab 一种改进的k-均值图像聚类算法,matlab,k-means,Matlab,K Means,我正在尝试为图像聚类实现改进的k_均值算法,即非常类似于k均值的算法。差异仅限于新中心计算 实际上,我已经初始化了簇中心,计算了像素和中心之间的距离,现在根据最小距离,我必须将像素分配给簇,但这里的问题是如何将像素分配给簇并存储,我如何知道哪个像素属于哪个簇以进行新的中心计算?重申您已经说过的,您希望运行k-means,其中您的训练示例是像素,每个像素都有3个特征(红色、绿色、蓝色)。我顺便提一下,虽然看起来您已经决定了一些事情,但首先将RGB数据从0规范化为1.0,而不是说从0规范化为16或从

我正在尝试为图像聚类实现改进的k_均值算法,即非常类似于k均值的算法。差异仅限于新中心计算


实际上,我已经初始化了簇中心,计算了像素和中心之间的距离,现在根据最小距离,我必须将像素分配给簇,但这里的问题是如何将像素分配给簇并存储,我如何知道哪个像素属于哪个簇以进行新的中心计算?

重申您已经说过的,您希望运行k-means,其中您的训练示例是像素,每个像素都有3个特征(红色、绿色、蓝色)。我顺便提一下,虽然看起来您已经决定了一些事情,但首先将RGB数据从0规范化为1.0,而不是说从0规范化为16或从0规范化为255规范化,从而定义距离范数,这样您就可以在不考虑颜色深度的情况下比较结果

您应该将像素排序为1..m,并将其存储在m x 3矩阵x(见下文)m=宽度x高度。如何将每个像素分配给一行X如果由您决定,则可以将图像位置(X,y)处的像素任意设置为行y*width+X

现在,您只需要使用额外的m x 1索引向量idx来跟踪哪个像素属于哪个质心

idx = zeros(size(X,1), 1);

for i = 1:size(X,1)
   minNormSq = 0;
   for j = 1:K
      normSq = sum((X(i,:) .- centroids(j,:)).^2);
      if j == 1 || normSq < minNormSq
         minNormSq = normSq;
         idx(i) = j;
      end
   end
end

你在问一个编程问题吗?如果是这样,您需要提供更多细节。如果你问的是一个统计学问题(与k-均值聚类理论有关),你应该继续问。对不起,我忘了我的错误。是的,这是一个编程问题,我需要matlab的帮助。现在,这不是一个好的编程问题,因为你要的是关于如何进行k-means聚类的指南,这在这里太广泛了。如果您需要代码方面的帮助,请给出一些需要帮助的点的示例数据,并说明您正在尝试了解的内容,以及它需要适合的编程框架。好的,实际上,以下是我为RGB图像聚类修改的k均值所遵循的步骤:步骤1-定义D维数据集,第2步-定义聚类数“k”,第3步-定义聚类度量“M”,而度量M不稳定“计算距离dkj=| | xj–zk | | 2,其中1≤ K≤ K和1≤ J≤ N、 并根据到zk的最小距离1确定新K子集的成员≤ K≤ K、 计算1的新中心zk≤ K≤ K“计算‘M’簇内平方和是算法收敛的度量,我将图像像素作为聚类数据,随机选择聚类数为10,计算像素之间的距离并定义初始聚类中心。现在,我需要帮助,根据我计算的最小距离将像素分配到簇中,我也想知道我如何知道哪个像素属于哪个簇谢谢你的代码对我很有用,但是请告诉我你第二段的最后一行是什么意思?实际上,我正在将图像矩阵重塑为[1..m]的矩阵,其中m是row*col,这是错误的吗????如果我不把它存储在m*3矩阵中,请help@lavi通常,训练集存储在一个大矩阵中,以帮助矢量化,其中样本是行,特征是列。所以在这个问题中,X是mx3。没有要求您按任何特定顺序分配像素,您只需保持一致。这就是我所做的,以获得大小为m*3im=imread('D:\l.jpg')的X;[行col fet]=尺寸(im);im1=双(im);m=rowcol;X=整形(im1,m,fet);这行吗???当我为您告诉我的任意设置图像位置(x,y)的像素到第ywidth+x行的代码编写代码时,代码不起作用,显示错误,所以请在重塑后告诉我是否有必要编写此代码??
for j = 1:K
   inclusion = (idx == j);
   centroids(j,:) = inclusion'*X;
   centroids(j,:) = centroids(j,:)/sum(inclusion);
end