狠狠撸

狠狠撸Share a Scribd company logo
画像分類
@asmsuechan
はじめまして
? 末永良太
? rails書き
2
発表内容
? クラスタリング
? 階層的凝集型クラスタリング
? 画像をベクトルに変換
? 実践画像分類
何をやるのか
画像を2つのグループに分ける
クラスタリングという手法を使います
クラスタリング
? 階層的凝集型クラスタリングという手法を使います
? ざっくり言うと、「近くにあるものを1つのクラス
タにする」アルゴリズムです
? ここでは2つのグループに分类することを考えます
近いものを繋げる
階層的凝集型クラスタリング
阶层的凝集型クラスタリンク?による画像分类
书いてから数直线でやったほうがわかりやすいことに気づいた
画像をベクトルに変換
画像のカラーヒストグラムを求めてベクトル化します
カラーヒストグラムとは、何px分の色が画像に含まれ
ているか表したものです
例えば、64色の画像だったら
histgram[64]
という64次元のベクトルになります。
画像の色を減らす
RGBは(0,0,0)~(255,255,255)の範囲で色を表すので、
その色数は256の3乗(=16777216)
このままだと16777216次元のベクトルになってしま
います
多い!
画像の色を減らす
R,G,Bそれぞれ0~31のとき0、32~63のとき1のように
32個間隔で4つにします
これで色数は4の3乗(=64色)になります
変換するとこんな感じ
256の3乗色 4の4乗色
まあいけるっしょ
ヒストグラムってなんぞや
例:3色(3次元)、3×3(9px)の画像
[0] [1] [2]histgram
9
0
3本の値の和は9
画像ベクトル間の距離
Histogram Intersection法を使います
なんだかこんな式
ヒストグラムの各色の小さい方を足していく
新しいクラスタの代表値
算術平均
足して2で割る
実装
? クラスタリングと画像変換の実装をしました。
詳しくはブログに書きました
? ライブラリは甘え
設計
画像変換クラス クラスタリングクラス
c++で書きました
デンドログラム求める
距離を求める
中央値を出す
デンドログラムから
クラスタ作る
減色
ヒストグラム生成
opencvに甘えた
画像分类をする
分类(1)
(1) リンゴ×3
(1) オレンジ×3
(1)入力データ
0 1 2
3 4 5
(1)デンドログラム
0 1 2 3 4 5
(1)出力データ
クラス1
クラス2
分類成功!!
分类(2)
(2)入力データ リンゴ×3
(2)入力データ 椎名林檎
(2)入力データ:リンゴと椎名林檎
0 1 2
3 4 5
(2)デンドログラム
0 1 2 3 4 5
(2)出力データ
クラス1
クラス2
ああ!
そもそも椎名林檎同士が似ている判定されていない
分类(3)
(3)入力データ リンゴ×3
(3)入力データ リンゴ×3
(3)入力データ:リンゴとリンゴ
0 1 2
3 4 5
(3)デンドログラム
0 1 2 3 4 5
(3)出力データ
クラス1
クラス2
分類成功!!
そりゃあ白黒とカラーなら分類できるよね
分类(4)
(4)入力データ ザク×3
(4)入力データ シャアザク×3
(4)デンドログラム
0 1 2 3 4 5
(4)出力データ
クラス1
クラス2
なぜだ!!
まとめ
欠点
カラーヒストグラムの特性上、全く別のものでも色さ
え似ていれば同じものと分類される
例えば、このプログラムにはリンゴとイチゴは同じに見える
改善点
特徴量の抽出方法を見直す
つまり、色だけでなく形も見るなどする
Bag-of-feature法とかいうのがあるらしい
参考図書
黄色い本と緑の本
ブログ
? http://hyottokoaloha.hatenablog.com/entry/2016/01/
16/192847

More Related Content

阶层的凝集型クラスタリンク?による画像分类