3

kmeansRGB画像で関数を使用する必要があります。アルゴリズムの各要素には、画像のチャネルごとに 1 つずつ、3 つの次元が必要です。要素の数は、画像の総ピクセル数になります。kmeansクラスター #5 で使用する必要があります。

だからこれは私が試したものです:

img = imread('mypic.jpg');
red = img(:,:,1);
green = img(:,:,2);
blue = img(:,:,3);

kmeans(red,5)


私はそれを正しく行っているかどうかわかりません。私はこのエラーが発生しています:

??? Error using ==> plus
Integers can only be combined with integers of the same class, or scalar doubles.

Error in ==> kmeans>distfun at 704
            D(:,i) = D(:,i) + (X(:,j) - C(i,j)).^2;

Error in ==> kmeans at 313
    D = distfun(X, C, distance, 0);

Error in ==> mysegmentation at 9
kmeans(R,2)

誰か手を貸してくれませんか?ありがとう

4

3 に答える 3

5

あなたの例外は、kmeansdouble 型のデータを期待しているという事実によるものです(したがって、double以下の2行目の呼び出し)。ただし、適切なデータを kmeans に渡していないという点で、追加の問題があります。単一の numpixels x 3 マトリックスを作成する必要があります。 reshapeは、このようなあなたの友達です。これが例です。幸運を。

img = imread('mypic.jpg');
flatImg = double(reshape(img,size(img,1)*size(img,2),size(img,3)));
idx = kmeans(flatImg,5);
imagesc(reshape(idx,size(img,1),size(img,2)));
于 2011-11-04T21:18:00.537 に答える
1

試すimg = double(imread('mypic.jpg'))/255.;

于 2011-11-04T20:20:24.267 に答える
0
I1= imread('d:\flowers.jpg');
I2=rgb2gray(I1);

I=double(I2);
figure
subplot(1,3,1)
imshow(I1)
subplot(1,3,2)
imshow(I2)
g=kmeans(I(:),4);
J = reshape(g,size(I));
subplot(1,3,3)
imshow(J,[])
于 2013-02-01T19:52:43.997 に答える