statistics パッケージの kmeans() 関数を使い、k-means クラスタリングを行なってみます.
※ statistics パッケージではなくて、 Octave 言語で独自に作成した k-means クラスタリングのソースコードは、別の Web ページに載せています
◆ インストール操作手順例
echo "pkg install -global -forge statistics" | sudo 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);
元画像の例
クラスタリングの結果の例
次の結果が出る