Matlab 如何在hsv矩阵上使用kmeans
我试图只在Matlab 如何在hsv矩阵上使用kmeans,matlab,k-means,reshape,hsv,Matlab,K Means,Reshape,Hsv,我试图只在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); 我得到一个错误: 要重塑形状,元素的数量不得更改
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);
我得到一个错误:
要重塑形状,元素的数量不得更改
请帮忙,
谢谢大家! 注意,由于原始尺寸为m*n,而您正试图将其重塑为m*n*3的尺寸,因此您的重塑将不起作用。不能使用“重塑”更改大小 这项工作:
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)
请注意,由于原始尺寸为m*n,并且您正在尝试将形状改为m*n*3,因此您的形状无法工作。不能使用“重塑”更改大小 这项工作:
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矩阵,用kmeans给它的值替换每个picsel:1、2或3。我试着写:H(IDX==1)=0;H(IDX==2)=100;H(IDX==3)=255;但它并不能取代所有的矩阵,只是其中的一部分。实际上,我的目的是使用kmeans将图片分成簇,而不是在原始图片上。仅在H矩阵上。有什么想法吗?@user2339198您只需重新塑造H即可将索引放入图像中。此外,如果您觉得某篇文章有帮助,那么最好向上投票或接受它。好的,非常感谢您的帮助!我还有一个问题,我需要取kmeans(IDX)的结果,遍历H矩阵,用kmeans给它的值替换每个picsel:1、2或3。我试着写:H(IDX==1)=0;H(IDX==2)=100;H(IDX==3)=255;但它并不能取代所有的矩阵,只是其中的一部分。实际上,我的目的是使用kmeans将图片分成簇,而不是在原始图片上。仅在H矩阵上。有什么想法吗?@user2339198您只需重新塑造H即可将索引放入图像中。此外,如果您觉得某篇文章有帮助,最好是投票或接受它。