果物識別 補足資料 1
やりたい事 入力された画像内に映っている果物が何かを自動判 別するプログラムを組むこと 識別器 りんご です
簡単化の為の制約 テストで送られてくる画像には果物は1つしかない 果物画像の背景は単純背景 果物は { りんご, レモン, バナナ } と定義する
学習・識別器作成までの流れ 識別器 りんご です 学習器 ・・・・ 学習用画像 テスト用画像 各果物毎の 特徴 参照
学習器作成 学習器 画像読み込み 画像から特徴量取得 得た特徴を何らかの変数に保存 未学習の画像はあるか? 学習した果物クラスの平均ベクトルと 分散共分散行列を求め外部ファイルに保 存 YES NO
特徴ベクトル 赤み 円形度 円形度=(4 π *(面積))/(周囲長*周囲長) 赤み 円形度 りん ご レモ ン バナ ナ テス ト画 像 01.0 特徴ベクトル : ( 赤み, 円形度 )
vector の使い方 #include int main{ vector v; v.push_back(1); v.push_back(2); for(int i = 0 ; i < v.size() ; i++){ std::cout << v[i] << “ ”; } return 0; } 出力結果 1 2 格納する要素の型を指定 格納する要素 格納されている要素の個数 格納されている要素にアクセス
果物識別 補足資料2
識別 入力したテスト画像と各ク ラスタとの距離で、入力さ れた画像がどのクラスタに 分類されるかを判定する。 未学習の画像はあるか? 学習した果物クラスの平均ベクトルと 分散共分散行列を求め外部ファイルに保 存 NO 赤み 円形度 りんご レモン バナナ 01.0 識別作業のイメージ テスト画像
平均ベクトルと分散共分散行列を求める なぜ求めるのか? テスト画像がどのクラス ( りんご, レモン, バナナ ) に最も近 いかを判断するためにマハラノビス距離を用いる。 マハラノビス距離の算出式は以下のとおりである。 マハラノビス距離 テスト画像の 特徴量空間での座標 対象クラスの平均ベクトル 対象クラスの分散共分散行列 の逆行列
平均ベクトルと分散共分散行列を求める 前提 学習で入力されたデータ: 平均ベクトル 分散共分散行列 ( Covariance Matrix ) n は画像の番号 x は赤み, y は円形度
クラス辞書作成例 ( 数値はテキトーです ) 1/3 学習したりんごのデータ :( 赤み, 円形度 ), N = 3 (0.9, 0.7), (0.7, 0.8), (0.8, 0.9) 平均ベクトル =(0.8, 0.8)
クラス辞書作成例 ( 数値はテキトーです ) 2/3 学習したレモンのデータ :( 赤み, 円形度 ), N = 3 (0.6, 0.5), (0.7, 0.4), (0.5, 0.3) 平均ベクトル =(0.6, 0.4)
クラス辞書作成例 ( 数値はテキトーです ) 3/3 りんご レモン 平均ベクトル分散共分散行列の逆行列 (0.6, 0.4) (0.8, 0.8)
識別器のアルゴリズム テスト画像読み込み テスト画像から特徴量抽出 抽出した特徴と各クラスとの マハラノビス距離を計算 距離最小のクラスを探す 結果を表示 識別器
識別例 ( 数値はテキトーです ) 1/1 テスト画像xの特徴 (0.7, 0.9) りんごとの距離 レモンとの距離 なので、テスト画像xはりんごであると推測できる