画像のセグメンテーション[Graph Based Image Segmentation]


はじめに

ばら積みされたタオルから3Dカメラを使用した把持位置認識の際にGraph Based Segmentationのアルゴリズムが使用されていました。

今回はそのGraph Based Segmentationについて知識を深めるために、画像に対してそのアルゴリズムを使用したものを試してみました。

準備

1.まずソースコードを以下のサイトからダウンロードします。

2.入力画像の取得

入力する画像を決めるのですが、入力する画像はppm形式でなくてはいけません。
jpgなどを使用したい場合は次のようなサイトでppm形式に変換します。

今回自分が使用したのは次のようなペンギンの写真です。

使ってみる

それでは使ってみます。

1.ビルド

cd segment
make

2.実行

READMEに記載があるのですが実行する際に引数を入れる必要がありその順番は次のようになります。

segment sigma k min input output

それぞれのパラメータの意味は以下の通りです。

sigma:セグメンテーションをする前の平滑化に使用
k:しきい値関数の値
min:最小の領域サイズ
input:入力画像
output:出力画像

それでは実行してみます。

./segment 0.5 500 50 pengin.ppm pengin2.ppm

生成された画像は次のようになりました。

次に、しきい値の値を500から200に下げて実行してみます。

./segment 0.5 500 50 pengin.ppm pengin2.ppm

より細かい領域に分割されました。

そして次にmin(最小コンポーネントサイズ)を50から20に減らしてみます。

./segment 0.5 500 50 pengin.ppm pengin2.ppm

結果はこのようになり、更に細かい領域が出現しました。

さいごに

Graph Based Image Segmentationというアルゴリズムを使用した画像のセグメンテーションを行いました。
今後は3Dカメラから取得した点群に対してもこのアルゴリズムを適用できるよう,今回使用したソフトウェアの内部のグラフセグメンテーション部分についての知識を深めていきたいです。

参考