2013-05-16 48 views
1

我正嘗試在h矩陣(來自原始圖片)上使用kmeans羣集,並且我與使用kmeans的矩陣的大小有關。我知道我需要重塑它,但注意我嘗試過。
這裏是我的嘗試:如何在hsv矩陣上使用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); 

我得到的錯誤:

to reshape the number of elements must not change.

請幫幫忙, 謝謝!

+0

有什麼'reshape'和'squeeze'行的目的。我認爲它應該沒有它們。 –

回答

1

注意你的整形不起作用,因爲原始尺寸是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) 
+0

好的非常感謝你的幫助! 我還有一個問題,我需要取kmeans(IDX)的結果並通過H矩陣,並用kmeans給它的值替換每個picsel:1或2或3. 我試過寫: H (IDX == 1)= 0; H(IDX == 2)= 100; H(IDX == 3)= 255; 但它並不能代替所有的矩陣,只是它的一部分。 其實我的目的是將圖片分成使用kmeans的集羣,但不是原始圖片。只在H矩陣上。 有什麼建議嗎? – user2339198

+1

@ user2339198您只需通過重塑H就可以將圖像索引放入圖像中。此外,如果您發現帖子有幫助,最好是投票或接受它。 – Bull