2017-01-12 4 views
0

私はMATLABで色分けしていました。私はthis文書に基づいたk-meansクラスタリングを使用しており、MATLABでセグメント化された画像に色を割り当てる

global imgRGB; 
global imgLAB; 
img = imgRGB; 

cform = makecform('srgb2lab'); 
imgLAB = applycform(img, cform); 
ab = double(imgLAB(:,:,2:3)); 
rows = size(ab,1) 
cols = size(ab,2); 
ab = reshape(ab, rows*cols, 2); 
cluster = 5; 
[idx center] = kmeans(ab, cluster, 'distance', 'sqEuclidean', 'Replicates', 5); 
label = reshape(idx, rows, cols); 
figure; imshow(label, []); 
imgSeg = cell(5); 
rgb_label = repmat(pixel_labels, [1 1 3]); 
for k=1:cluster 
    color = img; 
    color(rgb_label ~= k) = 0; 
    imgSeg{k} = color; 
end 
figure; 
imshow(imgSeg{1}); 

私は画像が入力されているため、グローバルに定義されています。

リンクされたようなカラー画像の場合、グレースケール出力が生成されます。

私はそれが色としてグレートーンを割り当てると思うが、私は、各クラスタに色を割り当てる必要があります。私は灰色の色調ではなく、色を意味します。それをどうすれば実現できますか?

答えて

0

ラベルを直接表示する場合は、図には別のcolormapを使用する必要があります。

試してみてください。

figure; 
imshow(label, []); 
colormap(rnad(max(imgSeg{1}(:))+1, 3)); % use random color map 

あなたはRGB画像(ピクセルあたり3カラーチャンネル)にpixel_labelsを変換したい場合は、あなたはind2rgb(代わりのすべてのチャネルにラベルを複製)を使用します。 rgb_label = repmat(pixel_labels, [1 1 3]);

に置き換えてください。
rgb_label = ind2rgb(pixel_labels, rand(max(pixel_labels(:)),3)); 
+0

ごめんなさい、うまくいきませんでした。私はコード内の他の場所で関数colormapを使うべきですか? –

+0

いいえ、まだ動作していません。私はそれがこの行のためであるかどうか疑問に思います。 'rgb_label = repmat(pixel_labels、[1 1 3]); ' –

+0

ありがとうございました。 –

関連する問題