2017-03-24 5 views
0

のコードを意味するので、私はこのコードを持っている:kはMATLAB

for i = 1:38 
     he = cores{i,1}; 
     imshow(he), title('H&E image'); 

     cform = makecform('srgb2lab'); 
     lab_he = applycform(he,cform); 

     ab = double(lab_he(:,:,2:3)); 
     nrows = size(ab,1); 
     ncols = size(ab,2); 
     ab = reshape(ab,nrows*ncols,2); 

     nColors = 3; 
     % repeat the clustering 3 times to avoid local minima 
     [cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ... 
               'Replicates',3); 


     pixel_labels = reshape(cluster_idx,nrows,ncols); 
     figure; 
     imshow(pixel_labels,[]), title('image labeled by cluster index'); 


     segmented_images = cell(1,3); 
     rgb_label = repmat(pixel_labels,[1 1 3]); 

     for k = 1:nColors 
      color = he; 
      color(rgb_label ~= k) = 0; 
      segmented_images{k} = color; 
     end 

     figure 
     imshow(segmented_images{1}), title('objects in cluster 1'); 

     figure 
     imshow(segmented_images{2}), title('objects in cluster 2'); 

     figure 
     imshow(segmented_images{3}), title('objects in cluster 3'); 
    end 

Iは、茶色、青と緑の色の38枚の異なる画像を有します。私は3つの異なる変数でそれらを区別したい、そしてそれはこのコードがやっていることです。

唯一の問題は、どちらがどれであるかを知る必要があることです(たとえば、最初のセルは常に青、2番目は茶色、最後は緑色になります)が、通常はランダムな順序で取得されます。

アイデア?

+0

少なくとも「終了」がありません。また、MATLABでは38 * 3の画像をプロットするのが遅くなります。 – Adriaan

+0

'end'私は行方不明です私のコピー/貼り付けから間違いです...これらの数字をすべてプロットすることはテストのためであり、私の問題ではありません。私の問題は、私はいつも茶色の青緑色の数字を同じ順序で取得しているとは限らないことです。それは無作為で、私が避けたいものです。 –

+0

[mcve]を読んでください。問題に関連する投稿コードのみ。投稿を編集して不要なコードを削除してから動作させてください。 – Adriaan

答えて

1

k-meansアルゴリズムは、重心がどこにあるかについての開始推測を必要とします。通常はランダムに選択されます。問題が合理的に定式化されている場合、開始点の選択はラベルが異なる順序であることを除いて、最終結果に影響しません。

開始点を自分で定義して、毎回シャッフルされるエンドラベルであるランダム性を取り除くことができます。 Matlabのk-meansアルゴリズムでは、開始点を `Start 'パラメータに渡すことでこれを行うことができます。これがどのように行われるかの例はhereです。

重心が茶色、青色、緑色に対応すると思われる場合は、これらのrgb値を開始重心として渡すことをお勧めします。満足している解決策に収束しないスタート重心を不都合に選択するかもしれないことに注意してください。もしそうなら、あなたの推測を幾分変えてください!

関連する問題