Octave での k-means クラスタリングの例
statistics パッケージの kmeans() 関数を使い、k-means クラスタリングを行なってみます.
* statistics パッケージではなくて、 Octave 言語で独自に作成した k-means クラスタリングのソースコードは、別の Web ページに載せています
前準備
Octave のインストール
その他
- statistics パッケージをインストールしておくこと.
◆ インストール操作手順例
echo "pkg install -global -forge statistics" | sudo octave
実行方法と実行結果の例
- Octave を起動
- 次の Octave プログラム実行
<プログラムの要点>
- statistics パッケージの kmeans() 関数を使用
- 画像を元に、(R,G,B) の3つを1行とする行列を作る。この行列の行数は元の画像の画素数に一致する。
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);
元画像の例
クラスタリングの結果の例
次の結果が出る