Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 如何在hsv矩阵上使用kmeans_Matlab_K Means_Reshape_Hsv - Fatal编程技术网

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即可将索引放入图像中。此外,如果您觉得某篇文章有帮助,最好是投票或接受它。