作成したプログラム |
|||||||||||||||||
alpha.zip
上のzipファイルを解凍後 "alpha" または "kaisou" フォルダに移動し、makeコマンドを実行すればコンパイルできます。
使用ライブラリ
middlebury callege 1 |
|||||||||||||||||
アルゴリズム |
|||||||||||||||||
※グラフの初期化の際に用いる
※今回の結果画像は初期値は全て0で計算
・success=0とする
・α拡張のとき →0〜64
・階層グラフカットのとき→0〜αの配列の行数
・階層グラフカットの場合、αの配列中で現在のピクセル値に最も近いものをαとする
・ノードを追加し、ソース側にD(βp)、シンク側にD(αp)を設定
・階層グラフカットの場合、隣接する2つのピクセル値に最も近いものをα配列の中から選びそれぞれα1、α2とする
・階層グラフカットの場合、もしα1==α2かつβp==βqであるならノード、エッジの追加は行わない(無駄を除去) ・α拡張の場合、もしβp==βqであるならノード、エッジの追加は行わない ・各隣接点ノードについてソース側にV(βp,βq)、シンク側にV(αp,αq)を設定 ・隣接するピクセルに対して適切な重みのエッジを設定する
・全てのピクセルノードについて
もしそのピクセルノードがSOURCE側に割り振られていたなら値をαに更新する
※D(β) = | β - I | (Iは入力画素値)
※V(α,β) = c | α - β | (cは定数) |
|||||||||||||||||
実行環境 |
|||||||||||||||||
|
|||||||||||||||||
実行結果 |
|||||||||||||||||
画像一覧 (サイズは全て450×375のものを使用) |
|||||||||||||||||
左目画像
|
|||||||||||||||||
性能評価 |
|||||||||||||||||
階層グラフカットを用いた結果画像よりも、α拡張グラフカットを用いたものの方がうまく出来ているといえる。
実行速度は階層グラフカットを用いた実装のほうが約3倍高速であった。 |
|||||||||||||||||
考察 |
|||||||||||||||||
どちらの手法を用いた場合もほぼ同じくらいの画質になると予想していたが、実際はα拡張グラフカットを用いたものの方が綺麗な画像を生成できた。原因として、α拡張グラフカットの場合、αの値を1つずつ増やしていく手法であるのに対し、階層グラフカットでは現在の出力画像の値によってαの値をとばしとばし決定しているため、多少大雑把になってしまうのではないかと考えられる。また階層グラフカットの場合、上記の理由から初期値に依存しやすいともいえる。 実行時間については、階層グラフカットを用いた手法のほうがかなり短かった。これは、ループの回数の違いが顕著に表れた結果であると考える。 |