【问题标题】:how to use kmeans on a hsv matrix如何在 hsv 矩阵上使用 kmeans
【发布时间】:2013-05-16 15:56:36
【问题描述】:

我试图仅在 h 矩阵(来自原始图片)上使用 kmeans 聚类,但我在使用 kmeans 的矩阵大小时遇到​​了问题。我知道我需要重塑它,但注意到我尝试过的作品。
这是我尝试过的:

x = imread('4.jpg');
hsv=rgb2hsv(x);
H=c(:,:,1);
[m,n]=size(H);
X = reshape(H,[m,n,3]);
X = double(squeeze(X));
IDX = kmeans(double(H),3);

我得到错误:

重塑元素的数量一定不能改变。

请帮忙, 谢谢!

【问题讨论】:

  • reshapesqueeze 行的目的是什么。我认为没有它们应该可以工作。

标签: matlab k-means reshape hsv


【解决方案1】:

请注意,您的重塑将不起作用,因为原始尺寸为 m*n,而您正试图重塑为尺寸为 m*n*3 的东西。您无法通过 reshape 更改大小。

这行得通:

x = imread('peppers.png');
hsv=rgb2hsv(x);
H=hsv(:,:,1); %******H=c(:,:,1);
[m,n]=size(H);
figure(1), imshow(H);
%X = reshape(H,[m,n,3]);
%X = double(squeeze(X)); 
IDX = kmeans(double(H(:)),3);  % NOTE change to this line
H = reshape(IDX,[m,n]);
figure(2), imagesc(H)

【讨论】:

  • 好的,非常感谢您的帮助!我还有一个问题,我需要获取 kmeans (IDX) 的结果并遍历 H 矩阵,并将每个 picsel 替换为 kmeans 给它的值:1 或 2 或 3。我试着写:H(IDX = = 1) = 0; H(IDX == 2) = 100; H(IDX == 3) = 255;但它并没有取代所有的矩阵。,只是它的一部分。实际上,我的目的是使用 kmeans 将图片分成簇,而不是在原始图片上。仅在 H 矩阵上。有什么想法吗?
  • @user2339198 您只需对 H 进行整形即可将索引放入图像中。此外,如果您发现帖子有帮助,最好投票或接受它。
猜你喜欢
  • 2019-03-31
  • 2012-09-16
  • 2012-05-09
  • 2014-08-24
  • 2017-04-13
  • 1970-01-01
  • 2016-12-08
  • 2012-05-01
相关资源
最近更新 更多