2013-05-16 4 views
1

에 kmeans를 사용합니다. 나는 그것을 바꿀 필요가 있음을 알고 있지만 나는 일을 시도했다.
가 여기에 내가 뭘하려 :는 어떻게 (원본 사진에서)에만 <code>h</code> 매트릭스에 kmeans 클러스터링을 사용하려고하고 내가 kmeans와 함께 사용할 행렬의 크기에 문제가 오전 HSV 매트릭스

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

. 나는 그것들이 없이는 효과가 있다고 생각한다. –

답변

1

원래 크기가 m의 *의 n은 당신이 m의 * n 개의 * 3의 크기와 무언가로 바꿀려고하기 때문에 작동하지 않습니다 당신의 모양 변경을합니다. 모양을 변경하면 크기를 변경할 수 없습니다.

이 작동 :

은`reshape`과`squeeze` 라인의 목적은 무엇
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

도움 주셔서 대단히 감사합니다! H를 을 : 나는 쓰기를 시도 1 또는 2 또는 3 : 은 내가 (IDX)에 kmeans의 결과를 가져 와서 H 행렬 가서 kmeans이에게 준 값으로 모든 picsel를 교체해야 할 또 다른 질문이 있습니다 (IDX == 1) = 0; H (IDX == 2) = 100; H (IDX == 3) = 255; 는하지만 모든 매트릭스를 대체하지 않습니다. 그것의 단지 부분. 사실 내 목적은 kmeans를 사용하여 클러스터로하지만 원본 사진에 그림을 분리하는 것입니다. H 매트릭스에서만. 아이디어가 있으십니까? – user2339198

+1

@ user2339198 H 모양을 바꿔 이미지에 색인을 붙입니다. 또한 유용한 게시물을 발견하면이를 높이 평가하거나 수락하는 것이 좋습니다. – Bull