「画像処理応用」

九州大学 大学院システム情報科学研究院
情報知能工学部門
データサイエンス実践特別講座
備瀬竜馬, Diego Thomas, 正井克俊

本日の内容 画像応用類似度

クラスタリング画像情報の定量化＋データ解析（検定）

2

画像応用
類似度

画像のベクトル表現(vector representation of image) 2値画像画像の場合の例

x  0, 0 ,1,1,1,1, 0, 0,1,...,1, 0

T

7×7画像

49次元ベクトル 多値画像画像の場合の例

x  0, 0, 255, 213,182, 0, 0,...,0

T

7×7画像

49次元ベクトル4

“画像空間” (image space)
N×N画像

ゴール

(17, 128, 72, ....., 153)

N2次元ベクトル
第2画素
72

スタート
第N2画素

128

17

第1画素の明るさ 5画像空間:任意の１点＝1画像

x

第1次元A point in the image space corresponds to an image
6

画像空間

第10000画素

100x100画像

第1画素
任意の100ｘ100画像は10000次元空間で表せる！

7

画像空間で遊ぶ(play with image space) 近い画像を探す (範囲探索)
search for similar images

画像空間で遊ぶ（つづき）
 最も近い画像を探す (最近傍探索)
search for the most similar image (the nearest neighbor)※ 画像認識の原理

練習１
 下記の画像をラスタ走査

 類似度を求める

10テンプレートマッチング
 最も近い画像を探す (最近傍探索)
search for the most similar image (the nearest neighbor) クエリ―画像と最も近い領域を探す
クエリ―
画像テンプレートマッチング
クエリ―
画像

 画像の中から最も近い画像を探す
 クエリ―画像と同じ大きさの画像(パッチ)を切り取り、画像間の距離を測る。
 少しづつ切り取る場所をずらして、一番距離が近い場所を求める

画像間の距離(似てる具合)
256 × 256

256 × 25665536次元ベクトル 𝒙65536次元ベクトル 𝒚

画像間距離𝒙−𝒚
numpy.linalg.norm(x-y)
38574.86
13

正規化相関 なんかcos 𝜃 も出てきたような...

→ その通り．これ↓をつかって内積計算もできます．

𝒙∙𝒚= 𝒙𝒚 cos 𝜃𝒙∙𝒚cos 𝜃 =𝒙 𝒚𝒙

𝒚
長さ= 𝒚

𝜃

長さ= 𝒙

 もっと大事なのは： －１ ≤ cos 𝜃 ≤ １
 𝜃 が0度（同じ向きのベクトル）：
14

思い出そう：内積 一定の大きさのベクトル𝒚を回転させながら𝒙と内積を取ると... 𝒙 ∙ 𝒚 = 𝟎𝒚𝒙
𝒙 ∙ 𝒚 →最小

𝒙と𝒚が同一方向なら大きい
逆方向なら小さい𝒙 ∙ 𝒚 →最大

𝒙と𝒚の類似度に使えそう!

15テンプレートマッチングhttp://scikit-image.org/docs/stable/auto_examples/16テンプレートマッチング
Lennaの画像サイズを取得
テンプレート画像サイズを取得
Lennaと同じサイズの画像（2次元配列）を初期化

D：距離行列S：類似度行列

テンプレート画像を一次元配列に変換
各画素ごとに距離と類似度を算出
着目画素周辺のテンプレート画像と同じ大きさのパッチ画像を取得
パッチ画像をベクトルへ変換
距離類似度

17

テンプレートマッチング

ユークリッド距離

正規化相関

18

テンプレートマッチング

19

テンプレートマッチング

20

練習２
 “lenna_template2.bmp”でテンプレートマッチング

 ユークリッド距離可視化
 緑でテンプレートマッチング可視化

21

画像応用
クラスタリングクラスタリング(clustering)＝
データの集合をいくつかの部分集合に分割する(グルーピング) 各部分集合＝「クラスタ」と呼ばれる

23

代表的なクラスタリング法：
K-means法（0）初期代表パターン
例えばランダムに与える24代表的なクラスタリング法：
K-means法（1）学習パターン分割

代表パターンのファンクラブ
（支持者集合）25

代表的なクラスタリング法：
K-means法（2）代表パターン更新

この中の学習パターンの平均に移動26

代表的なクラスタリング法：
K-means法（1）学習パターン分割

27

代表的なクラスタリング法：
K-means法（2）代表パターン更新

以後，代表パターンが動かなくなるまで反復
28

K-means：プログラミング アルゴリズムステップ0繰り返し•代表点の選択•代表点の更新•終了チェック

Err = 0.1
dd = 10000;
maxittr = 100
itt = 0while itt < maxittr:
end_flag = True
preCList = CList# 指示クラスタの決定
CIList = selectCluster(vlist,CList)# クラスタ中心の更新
CList = updataCenter(vlist,CIList,K)# 更新の際の移動距離の算出
for j in range(len(CList)):cc = CList[j]pre = preCList[j]dd = np.linalg.norm(cc-pre)if dd > Err:
end_frag = False
itt += 1
if end_flag == True:
break

29

K-meansクラスタリング30

K-meansクラスタリング

31

K-meansクラスタリング

32

K-meansクラスタリング

33

K-meansクラスタリング

34

K-meansクラスタリング35画像中の色のクラスタリング（1/4）
 K-meansを使って画像中の色を分けてみよう！
 ‘hestain.png’画像中の色を3つに分けよう

https://jp.mathworks.com/help/images/examples/color-based-segmentation-using-k-means-clustering.html

画像中の色のクラスタリング（2/4）
 Lab色空間に変換 L：明度 a, b : 色情報bahttps://ja.wikipedia.org/wiki/Lab%E8%89%B2%E7%A9%BA%E9%96%93

画像中の色のクラスタリング（3/4）

画像中の色のクラスタリング（4/4）
 K-meansを使って画像中の色を分けてみよう！

手書き文字のクラスタリング（1/）
 0から2の手書き文字画像をK-meansでクラスタリング
 28×28の画像（784次元）

https://www.kaggle.com/c/digit-recognizer/data

練習問題：K-means

練習問題：K-means

画素数N*M次元のK個のベクトルを値をランダムに作成

規定回数まで繰り返し

支持クラスタの決定

クラスタ中心の更新
クラスタ中心の移動距離の算出
クラスタ中心の移動距離が一定以下のとき、終了

練習問題：K-means結果
 クラスタリングの代表画像の可視化

画像空間で遊ぶ
 最も近い画像を探す (最近傍探索)
search for the most similar image (the nearest neighbor)※ 画像認識の原理

最近傍探索1373

2643

2650

最近傍探索練習3 “numbers/7/number029.tif”,“numbers/1/number1-08.tif”,“numbers/3/number015.tif”, “numbers/4/number014.tif”の画像を読み込んで

 “7” の画像の最近傍探索を行う

47

画像応用
画像情報の定量化＋データ解析

コインの粒度分布測定
 画像中のコインのサイズ分布を計算しよう！
コインをセグメンテーションして、コインの大きさを定量化

2つの画像のコインサイズを比べよう
coins1

http://scikit-image.org/docs/stable/auto_examples/

coins2

Segmentation 閾値処理＋Fill#Segmentation
segmented_img = np.zeros(coins1.shape)mask = coins[:,:] > 0.43*255
segmented_img[mask] = 255# fillfrom scipy import ndimage as ndi
fill_coins = ndi.binary_fill_holes(segmented_img)

 小さい領域（ノイズ）の除去# labeling and remove small and large blobs
from scipy import ndimage as ndi
label_objects, nb_labels = ndi.label(fill_coins)sizes = np.bincount(label_objects.ravel())
print(sizes)
mask_sizes = np.zeros(sizes.shape)for i in range(len(sizes)):mask_sizes[i] = 100<sizes[i] and sizes[i]<5000labeled_coins1 = mask_sizes[label_objects]
labeled_coins1, N1 = ndi.label(labeled_coins1)

サイズを測定

ラベルごとに座標を取得

小さすぎるのはノイズとして除去

小さすぎるのはノイズとして除去
51

サイズの分布

coins1:
mean: 1622.625 , var: 286133.567708
coins2:
mean: 1863.0 , var: 374745.5

52平均の差の検定～実際の攻め方
K大学の母集団

L大学の母集団
母平均は異なる＝母集団には有意差がある
この差は「母平均が等しい」という仮説下ではあり得ない

標本𝑥෤𝐾 と𝑥෤𝐿 の差
標本平均𝑥෤𝐾

標本平均𝑥෤𝐿

標本53

標本平均の差をテストしたいんです：
t分布する二つの値の「差」も，やはりt分布
K大学
t分布の場合も同様でよかったー

L大学

標本平均の差の分布(t分布)

2𝜎𝐾𝜎𝐿2+𝑁−1 𝑁−1𝜇𝐾 − 𝜇𝐿 標本平均𝑥෤𝐾 − 𝑥෤𝐿
標本平均の分布(t分布)

標本分散𝜎𝐾2𝑁−1𝜇𝐾

標本平均𝑥෤𝐾

母平均(未知)𝑥෤𝐾 と𝑥෤𝐿 の差をチェックしたい

標本平均の分布(t分布)

標本分散𝜎𝐿2𝑁−1𝜇𝐿標本平均𝑥෤𝐿

母平均(未知)54

Python で t 検定
 Python で実行するのはとても簡単！
1.
2.
3.
4.
5.

差があるか確認したいデータを２つ用意
有意水準を決定：5%
2つのデータを関数に放り込む
t, p値が出る
p値が0.05(5%)以下なら、有意に差がある
t分布

t値

95%
p値
赤い区間に入る確率：p値055

サイズの差の検定（t検定）

t値：-1.5409266009999318
P値：0.13035168300344802
5％棄却域で有意差なし

56

演習問題

演習１：テンプレートマッチング
 最も近い画像を探す (最近傍探索)
search for the most similar image (the nearest neighbor) クエリ―画像と最も近い領域を探す
クエリ―
画像

coin_template.tif

coins1.tif

演習２：k-means data.immunohistochemistry()で読み込んだ画像の色を3色にクラスタリングしよう！

59

演習３：粒度分布測定
 画像中の粒子のサイズ分布を計算しよう！
 粒子をセグメンテーションして、大きさを定量化
 2つの画像のサイズの差の検定を行おう
 ヒント：閾値は170(particles1)、200(particles2)を使おう※）切れない場合でも取り合えず、そのまま検定してみよう。
particles1.tif

particles2.tif

演習4：主成分分析
 0から9の手書き文字画像を主成分分析
 28×28の画像（784次元）

https://www.kaggle.com/c/digit-recognizer/data