金子邦彦研究室プログラミングOctave の活用Octave での k-means クラスタリングの例

Octave での k-means クラスタリングの例

statistics パッケージの kmeans() 関数を使い、k-means クラスタリングを行なってみます.

※ statistics パッケージではなくて、 Octave 言語で独自に作成した k-means クラスタリングのソースコードは、別の Web ページに載せています 

前準備

Octave のインストール

その他

実行方法と実行結果の例

  1. Octave を起動
  2. 次の Octave プログラム実行

    <プログラムの要点>

    function retval = image_quantize (fname, k)
      [rgb, immap, alpha] = imread(fname);
      rvec = reshape( rgb(:,:,1), size(rgb)(1) * size(rgb)(2), 1 );
      gvec = reshape( rgb(:,:,2), size(rgb)(1) * size(rgb)(2), 1 );
      bvec = reshape( rgb(:,:,3), size(rgb)(1) * size(rgb)(2), 1 );
      V = [rvec gvec bvec];
      [idxk, centersk] = kmeans (double(V), k);
      Vk = centersk(idxk,:); 
      rgbk(:,:,1) = reshape( Vk(:,1), size(rgb)(1), size(rgb)(2) );
      rgbk(:,:,2) = reshape( Vk(:,2), size(rgb)(1), size(rgb)(2) );
      rgbk(:,:,3) = reshape( Vk(:,3), size(rgb)(1), size(rgb)(2) );
      retval = zeros(size(rgb)(1), size(rgb)(2), size(rgb)(3));
      retval = uint8(rgbk);  
    endfunction
    
    
    rgb2 = image_quantize("/usr/local/share/OpenCV/samples/c/fruits.jpg", 8);
    imshow(rgb2);
    

    元画像の例

    [image]

    クラスタリングの結果の例

    次の結果が出る

    [image]