実践コンピュータビジョン 9章 画像の領域分割

50
実践コンピュータビジョン 9章 画像の領域分割

Upload: yaju88

Post on 25-Jun-2015

5.327 views

Category:

Technology


4 download

DESCRIPTION

静岡Developes勉強会のコンピュータビジョン9章の資料です。

TRANSCRIPT

Page 1: 実践コンピュータビジョン 9章 画像の領域分割

実践コンピュータビジョン

9章 画像の領域分割

Page 2: 実践コンピュータビジョン 9章 画像の領域分割

はじめに

本資料は静岡Developes勉強会「コンピュー

タビジョン vol.9」のための資料です。

オライリー社の実践コンピュータビジョン

www.oreilly.co.jp/books/9784873116075/

を教科書として使います。

Page 3: 実践コンピュータビジョン 9章 画像の領域分割

自己紹介

やじゅ@静岡・・・漢字名は「八寿」

平口 八寿人(https://www.facebook.com/yasuhito.hiraguchi)

アラフォーエンジニア、元MSMVP(Visual Basic)

静岡県島田市のSL(大井川鉄道)が走っている所に在住

Twitter:yaju はてなID:Yaju3D

http://blogs.wankuma.com/yaju/

http://yaju3d.hatenablog.jp/ (数学と物理を基礎からやり直す)

http://www.slideshare.net/yaju88/presentations (スライド)

Page 4: 実践コンピュータビジョン 9章 画像の領域分割

開発環境

共通開発環境

python 2.7 (3.x系では本書に沿わないのでNG)

環境変数 Path

「C:¥Python27;C:¥Python27¥Scripts;」を追加

Page 5: 実践コンピュータビジョン 9章 画像の領域分割

開発環境

私の開発環境

OS Windows 8.1

IDE pyCharm 3.0.2 (Community Edition FREE)

http://www.jetbrains.com/pycharm/download/

Page 6: 実践コンピュータビジョン 9章 画像の領域分割

開発環境

別の開発環境

IPython NoteBook

ブラウザ上で対話的にPythonを実行できるツール

Windows版導入方法 http://www.aoki.ecei.tohoku.ac.jp/~ito/python_windows.html

Mac版導入方法 http://slowquery.hatenablog.com/entry/2013/04/01/010927

Page 7: 実践コンピュータビジョン 9章 画像の領域分割

事前準備 その1

サンプルソースコード

実践コンピュータビジョンのWebサイトの関連ファイ

ルタブからダウンロードしてください。

画像データ

原著者のサイトから pcv_data.zip をダウンロード

してください。

Page 8: 実践コンピュータビジョン 9章 画像の領域分割

事前準備 その2

NumPy、Matplotlib、SciPy、 PILインストール(Windows)

NumPy、Matplotlib、 SciPyのインストール

http://qiita.com/mojaie/items/995661f7467ffdb40331

PIL インストール Python2.7用

http://www.pythonware.com/products/pil/index.htm

easy_installのインストール(Windows)

https://pypi.python.org/pypi/setuptools/1.1.5#installing-and-using-setuptools

setuptools-1.1.5.tar.gzを解凍し、ez_setup.pyをダブルクリック

C:¥Python27¥Scripts内にeasy_install関連のファイルが入る。

pipのインストール(Windows)

http://www.lifewithpython.com/2012/11/Python-package-setuptools-pip.html

easy_install pip をコマンドプロンプト上で入力する。

Page 9: 実践コンピュータビジョン 9章 画像の領域分割

事前準備 その3

サンプルソースコードと画像データを展開

PycharmProjects (私の場合のフォルダ構成)

├─pcv_data (画像データ pca_data.zipを展開)

├─chap8

├─chap9 (サンプルソース pcv_j.zipを展開)

Phython-graphパッケージのインストール

http://code.google.com/p/python-graph/ からDLするより

「easy_install python-graph-core」でインストールが簡単

Page 10: 実践コンピュータビジョン 9章 画像の領域分割

事前準備 その4

pca_data.zipから、empire.jpgを展開してカレントディレクトリ

(chap9)に置きます。

http://research.microsoft.com/en-

us/um/cambridge/projects/visionimagevideoediting/segmentat

ion/grabcut.htmの「Ground truth database」の「Labelling -

Rectangle」をクリックし、boundary_GT_rect.zipをダウンロード

カレントディレクトリ(chap9)に展開します。

376043.bmp 兵隊用、86016. bmp 庭用、 153077. bmp 水泳用

Page 11: 実践コンピュータビジョン 9章 画像の領域分割

事前準備 その5

http://www.eecs.berkeley.edu/Research/Projects/CS/vision/

grouping/segbench/の「Downloads Segmentation Dataset」の

[images]をクリックして、BSD300-images.tgz をダウンロード

BSD300/images/test/の下記ファイルをchap9内に展開します。

376043.jpg 兵隊、86016.jpg 庭、 153077.jpg 水泳選手

8章から「Sebastien Marcel Static Hand Posture Database」の

shp_marcel_test.tar.gzから下記ファイルをchap9内に展開します。

C/uniform/C-uniform03.ppm

Page 12: 実践コンピュータビジョン 9章 画像の領域分割

事前準備 その6

IPython notebook を使う場合

Windows版では、コマンドプロンプトにてカレントディレクトリ(自

分の場合は、PycharmProjects¥chap9)にしてから「iPython

notebook」を入力して実行。

Page 13: 実践コンピュータビジョン 9章 画像の領域分割

基礎知識

画像の領域分割

グラフ

グラフカット

ベイズの定理

スペクトルグラフ理論

ラプラシアン行列

Page 14: 実践コンピュータビジョン 9章 画像の領域分割

画像領域の分割

画像を意味のある領域に分割する処理のこと

例 犬のいる背景画像から、犬の領域を取り出す

Page 15: 実践コンピュータビジョン 9章 画像の領域分割

グラフ

グラフは主に、2つ以上の要素(人物、駅、場所など)を結んで行

き、節点同士の関連性を見いだすことに用いられます。

下図の線の数値は各地点を移動にかかる時間(分)である。

線に時間などの重みを持ったグラフを「重み付きグラフ」と言う。

Page 16: 実践コンピュータビジョン 9章 画像の領域分割

グラフ

A地点→C地点に速く着くには?

A地点からC地点に速く着く時間を考えてみる。

今回の場合、4通り行き方があるのでその全てを列挙してみる。

A(上)→Cまでかかる時間:17分

A(下)→Cまでかかる時間:19分

A(左)→B→Cまでかかる時間:5分+11分=16分

A(右)→B→Cまでかかる時間:7分+11分=18分

Page 17: 実践コンピュータビジョン 9章 画像の領域分割

グラフカット

カットとは

点を2つのグループに分ける

1. 始点を含むグループ

2. 終点を含むグループ

始点を含むグループから終点を含むグループへ

向かっている有向枝の集合をカットとよぶ

カットに含まれる枝の容量の合計を

カットの容量とよぶ

Page 18: 実践コンピュータビジョン 9章 画像の領域分割

グラフカット

大名の最大流問題

富士山から江戸までなるべくたくさんの氷を送りたいどのように

運ぶ? ※道が広く(例 8)なっても運ぶ量(例 5)は変化しない

s

t1

2 3

5

8

2

8

5

6

飛脚が運べる量(容量)

最大で12個(5 + 2 + 5)しか運べない

8

5

2 5

25

5

Page 19: 実践コンピュータビジョン 9章 画像の領域分割

グラフカット

最大フロー=最小カット (最大フロー最小カット定理)

最大12個運べるのは最後まで調べなくても、最小カットで分かる

Page 20: 実践コンピュータビジョン 9章 画像の領域分割

ベイズの定理

条件付き確率に関し、イギリスの数学者トーマ

ス・ベイズ(1702~1761)によって示された定理

で、コンピュータ上ではスパムメールフィルター

として活用されるようになった。

http://blog.oscarbonilla.com/2009/05/visualizing-bayes-theorem/

Page 21: 実践コンピュータビジョン 9章 画像の領域分割

ベイズの定理

ベイズ推定の例題とその解

喫煙者の推定の問題 http://www.yasuienv.net/BayesExamples.htm

問題:「男性10人、女性7人が一室でパーティーを開いた。男子の喫煙者は5人、女性は3人である。部屋に

入ったら煙草の吸殻が1本、灰皿の上にあった。このとき、吸った人が女性である確率を求めなさい(煙草の

吸い回しはしていないと仮定する)」。

解法: (a) ベイズの定理による解法

吸った人が女性である確率を求めるということは、P(女性|喫煙者)を求めることである。

ベイズの定理によって、下記式を求めることになる。

P(喫煙者|女性)・P(女性)

P(女性|喫煙者) = ---------------------------

P(喫煙者)

P(喫煙者|女性) = 3/7

P(女性) = 7 / (7+10) = 7/17 P(喫煙者) = (3+5) / (7+10) = 8/17

上式に代入して、

P(女性|喫煙者) = (3/7 × 7/17) / (8/17) = 3/8 (答)

Page 22: 実践コンピュータビジョン 9章 画像の領域分割

ベイズの定理

解法 (b)集合論による解法

次の図のような状況であった。吸殻を残したのは喫煙者の誰かであり、喫煙者が女性である確

率は、図から明らかに3/8である。

Page 23: 実践コンピュータビジョン 9章 画像の領域分割

スペクトルグラフ理論

グラフを解析する手法

グラフの隣接行列(のようなもの)の固有値・固有ベクトルが、

元のグラフの何らかの性質を物語っている。

参照:スペクトラルグラフ理論入門

Page 24: 実践コンピュータビジョン 9章 画像の領域分割

ラプラシアン行列

グラフの構造を行列で表したもので、対角成分で頂点の価数を、その他の

成分で隣接関係を表す。

具体的には、成分(i, j)の値は次のように決まる。

・i = j のとき:頂点 i に接続する辺の数

・i≠j のとき:頂点 i と頂点 j が辺でつながっていれば-1。そうでなければ0

参照:ラプラシアン行列 - 大人になってからの再学習

Page 25: 実践コンピュータビジョン 9章 画像の領域分割

ラプラシアン行列の作り方 その①

ラプラシアン行列

A

B

C

D

E

Page 26: 実践コンピュータビジョン 9章 画像の領域分割

ラプラシアン行列の作り方 その②

ラプラシアン行列

上-下

Page 27: 実践コンピュータビジョン 9章 画像の領域分割

第3章の目次

9.1 グラフカット

9.1.1 画像からグラフを構成する

9.1.2 ユーザー入力を用いた領域分割

9.2 クラスタリングを用いた領域分割

9.3 変分法

9.4 演習問題

Page 28: 実践コンピュータビジョン 9章 画像の領域分割

実行ファイル説明

9.1.graphcut.py 小さなグラフの最大フロー/最小カットを計算

9.1.1.graphcut.py empire.jpgを使って、グラフを作成する

9.1.2.graphcut.py グラフカットによる画像領域を行う

9.2.ncut.py クラスタリングを用いた画像領域分割を行う

9.3.chanvese.py Chan-Veseモデルの最小化による画像領域分割を行う

Page 29: 実践コンピュータビジョン 9章 画像の領域分割

9.1 グラフカット

グラフカットとは

有向グラフを2つの部分集合に分離すること

有向グラフ・・・辺が向きを持つグラフ

無向グラフ・・・辺が向きを持たないグラフ

グラフカットは、ステレオ画像の奥行き復元、画像のステッチン

グ(つなぎ目を滑らかにする)、画像の領域分割などにコン

ピュータビジョンのさまざまな問題を解決するのに使うことが出

来る。

Page 30: 実践コンピュータビジョン 9章 画像の領域分割

9.1 グラフカット

有向グラフを2つに分離とは

点を2つのグループに分ける

1. 始点(ソース S)を含むグループ

2. 終点(シンク T)を含むグループ

始点を含むグループから終点を含むグループへ向かっている

有向枝の集合をカットと呼ぶ

カットに含まれる枝の容量の合計をカットの容量と呼ぶ参照 大人になってからの再学習 グラフカット(Graph Cut)

Page 31: 実践コンピュータビジョン 9章 画像の領域分割

9.1 グラフカット

9.1.graphcut.py の実行

※python-graphパッケージは、「easy_install python-graph-core」でインストール

小さなグラフの最大フロー/最小カットを計算

ノード0:始点(ソース)

ノード3:終点(シンク)

flow is: {(0, 1): 4, (1, 2): 0, (1, 3): 4, (2, 3): 3, (0, 2): 3}

cut is: {0: 0, 1: 1, 2: 1, 3: 1} … 戻り値は、0と1のみ

Page 32: 実践コンピュータビジョン 9章 画像の領域分割

9.1 グラフカット

最大フローとは

始点0から終点3に最も多く物を流すことを考える

flow is: {(0, 1): 4, (1, 2): 0, (1, 3): 4, (2, 3): 3, (0, 2): 3}

0→1に4個、1→3は1→2により多く流せるから1→3に4個

1→2は流す物がなくなったので0個になる。

0→2に3個、2→3はそのまま3個流す。

(2→3は5だが、流す物は3個しかない)

Page 33: 実践コンピュータビジョン 9章 画像の領域分割

9.1 グラフカット

最小カット

cut is: {0: 0, 1: 1, 2: 1, 3: 1} … 戻り値は、0と1のみ

1. 始点(ソース S)を含むグループ

0: 0

2. 終点(シンク T)を含むグループ

1: 1, 2: 1, 3: 1

最小コストは、赤の線で7になります。

赤の線でカットすると、4 + 3 = 7

青の線でカットすると、4 + 5 = 9

Page 34: 実践コンピュータビジョン 9章 画像の領域分割

9.1.1 画像からグラフを構成する

最も単純な4近傍(きんぼう)ピクセルを用い、2つの画像領域

(前景と背景)に分ける。4近傍とはピクセルの上下左右です。

(左)モデルの学習に用いるラベル画像。

(中)画像に重ねた訓練データ領域。(右)領域分割結果

Page 35: 実践コンピュータビジョン 9章 画像の領域分割

9.1.1 画像からグラフを構成する

ベイズの定理によって、スパムメールを振り分けるみたいに

画像に応用して前景と背景を判定させる。

ベイズ決定則は最大事後確率則,最小誤識別率則(誤りを最小化)

グラフの辺(エッジ)の重みを、下記の式で求める

グラフカットにより、前景と背景を切り取る(下図はイメージ)

Page 36: 実践コンピュータビジョン 9章 画像の領域分割

9.1.1 画像からグラフを構成する

9.1.1.graphcut.py の実行

実行すると自分の環境では、40分かかったので画像を小さく

するといいかも。

また、実行した場合に0割エラーが発生したので、下記を修正しました。

grapchut.py

# 正規化

for i in range(vim.shape[0]):

n = linalg.norm(vim[i])

if n !=0:

vim[i] = vim[i] / n

Page 37: 実践コンピュータビジョン 9章 画像の領域分割

9.1.1 画像からグラフを構成する

変数kappaは、近傍ピクセル間のエッジの相対的な重みを決定するものです。

kappaを変化させたときの影響を下図となります。

値が増えるにつれ、領域分割の境界は滑らかになり詳細が失われていきます。

Page 38: 実践コンピュータビジョン 9章 画像の領域分割

9.1.2 ユーザー入力を用いた領域分割

ユーザーが四角形領域や「投げ縄」ツールで領域選択して、前

景と背景を指定するのを模擬した情報をグラフカットに適用して、

ユーザー入力による領域分割を模擬します。

自動ではまだ限界がある、ある程度ユーザーが領域を指定するInteractive Foreground Extraction using GrabCut Algorithm 【動画】Grabcutを実装してみた

Page 39: 実践コンピュータビジョン 9章 画像の領域分割

9.1.2 ユーザー入力を用いた領域分割

ユーザーが四角形領域や「投げ縄」ツールで領域選択して、

前景と背景を指定するのを模擬した「注釈情報」をグラフカット

に適用して、ユーザー入力による領域分割を模擬します。

注釈情報は下記のようなピクセル値を持つビットマップ画像

として符号化されています。

Page 40: 実践コンピュータビジョン 9章 画像の領域分割

9.1.2 ユーザー入力を用いた領域分割

9.1.2.graphcut.py の実行

86016.jpg 庭、 376043.jpg 兵隊、 153077.jpg 水泳選手

PDFが出力されるだけなので、

savefig('labelplot.pdf')

の下に下記を追加

axis('off')

show()

Page 41: 実践コンピュータビジョン 9章 画像の領域分割

9.2 クラスタリングを用いた領域分割

「正規化カット(Normalized Cut:Ncut)」アルゴリズムは、スペク

トラルグラフ理論に基づき、ピクセルの類似度と空間的近接性

を組み合わせて画像を領域分割する手法です。

その考え方はグループのサイズを考慮したコストを定義するも

ので、コストをグループのサイズで「正規化」します。

参照:スペクトラルグラフ理論入門

Page 42: 実践コンピュータビジョン 9章 画像の領域分割

9.2 クラスタリングを用いた領域分割

正規化カット法を使った画像の領域分割

Static Hand Posture Databaseの手話画像(詳細は8.1節を参照)を用い、k =

3とします。領域分割結果と上位4個の固有ベクトル

(上)原画像と3 クラスの領域分割結果

(下)グラフ類似度行列の上位4 個の固有ベクトル

Page 43: 実践コンピュータビジョン 9章 画像の領域分割

9.2 クラスタリングを用いた領域分割

正規化カットを用いた2クラスの画像の領域分割

(左)原画像。(右)領域分割結果

Page 44: 実践コンピュータビジョン 9章 画像の領域分割

9.2 クラスタリングを用いた領域分割

9.2.ncut.py の実行

自分の環境では、エラーで実行できなかった。

Page 45: 実践コンピュータビジョン 9章 画像の領域分割

9.3 変分法

変分法とは

関数について最適化する問題を「変分問題」といい、このような

問題を解くアルゴリズムを「変分法」といいます。

Chan-Vese領域分割モデル

分割する画像領域に対して区分定数画像モデルを仮定します。

ここでは、前景と背景という2つの領域の場合に着目しますが、

このモデルは多領域に拡張することもできます。

Page 46: 実践コンピュータビジョン 9章 画像の領域分割

9.3 変分法

Chan-Vese領域分割モデル

曲線の集合画像を2つの領域1と2に分割するとき、次のような

Chan-Veseモデルのエネルギーの最小値を求めることで領域

分割できます。

Page 47: 実践コンピュータビジョン 9章 画像の領域分割

9.3 変分法

9.3.chanvese.py の実行

ROFノイズ除去を用いたChan-Veseモデルの最小化

による画像領域分割

(左)原画像。

(中)ROFノイズ除去後の画像

(右)最終的な領域分割

Page 48: 実践コンピュータビジョン 9章 画像の領域分割

9.4 演習問題

1.グラフカットを最適化するために、エッジの数を減らせば計算を高速化すること

ができます。このようなグラフの構築法が文献[16]の4.2節で解説されています。

これを試して、本書の単純な構築法と、グラフの大きさや領域分割にかかる時間

を比較してください。

2.グラフカットによる領域分割のために、ユーザーインタフェースを作るか、ユーザ

ーが領域を選択するのを模擬してください。それから、重みに大きな値を設定して

、強制的に背景と前景を設定してください。

3.グラフカットによる領域分割において、特徴量ベクトルをRGB値のベクトルから

他の記述子に変更してください。領域分割結果を改善できますか?

4.現在の領域分割結果を次の前景と背景のモデル学習に用いる「繰り返し型の

領域分割」を実装してください。本章で用いた画像について領域分割の品質を向

上できますか?

Page 49: 実践コンピュータビジョン 9章 画像の領域分割

3.4 演習問題

5.マイクロソフトリサーチのGrabCutデータセットには、領域分割の正解デ

ータが含まれています。領域分割の誤差を測定する関数を実装して、設

定の違いや演習問題1.~4.のアイデアを評価してください。

6.正規化カットのエッジの重みのパラメータを変更して、固有ベクトルと領

域分割結果にどのような影響があるか調べてください。

7.正規化カットの第1固有ベクトルに画像勾配を計算してください。この勾

配画像を組み合わせて物体の画像輪郭を検出してください。

8.Chan-Vese領域分割のノイズ除去画像の閾値を線形探索するプログラ

ムを実装してください。閾値ごとにエネルギーE(Γ)を保存して、最小値に

なる場合の領域分割を選びます。

Page 50: 実践コンピュータビジョン 9章 画像の領域分割

終了

ご清聴ありがとうございました!