[[SJE2007]]

*画像をベクトルとして扱おう part2 [#kb999fde]

-サンプルデータ(学内アクセス限定,このデータはこの数理情報演習以外の用途で使ってはいけません)[[face96x96x100>http://tortoise1.math.ryukoku.ac.jp/~takataka/course2007/sje/gakunai/face96x96x100]]
-Javaのプログラム(学内アクセス限定)
[[Mat2PGM.java>http://tortoise1.math.ryukoku.ac.jp/~takataka/course2007/sje/gakunai/Mat2PGM.java]]


**行列から画像群へ [#l0c1b38f]

-上記のサンプルデータとJavaのプログラムをダウンロードし,次のように実行してみなさい.
 $ java Mat2PGM face96x96x100 96 96 100 0 hoge
-上記を実行すると,カレントディレクトリに hoge000.pgm 〜 hoge099.pgm という100枚の画像ができる.確認しなさい.
-Mat2PGMを引数なしで実行すると,引数の説明が表示される
#pre{{
$ java Mat2PGM

usage: java Mat2PGM fnmat width height nimg mode

fnmat:  filename of the input data matrix   → 入力となる行列データのファイル名
width:  width of the output image           → その1行を画像に変換する際の画像の幅
height: height of the output image          → 同じく画像の高さ
nimg:   number of the images                → 画像の枚数
mode:   0: scaling OFF, 1: scaling ON       → スケーリングするかしないか
fnimg:  filename of the output images       → 出力するPGMファイルの名前(の先頭部分)
}}
スケーリングをONにすると,行列の各成分が正の値も負の値もとると仮定し,0が画素値127になるように,行毎の絶対値の最大値が0または255になるように定数倍する処理を行う.単位固有ベクトルを画像に変換する際などに必要となる.

**octaveで平均顔を作ってみよう [#he6c4a68]

-face96x96x100 を octave で読み込み,どんなサイズの行列か確認しなさい
-そこから平均ベクトルを求めてファイルに出力し,PGM画像に変換してみなさい
-face96x96x100 の最初の50枚は女性,残りの50枚は男性である.以下を参考に,女性平均顔,男性平均顔を作ってみなさい.
#pre{{
octave:17> a = [11,22,33,44; 55,66,77,88; 99,10,11,12]
a =

   11   22   33   44
   55   66   77   88
   99   10   11   12

octave:19> a(2:3, :)
ans =

   55   66   77   88
   99   10   11   12

octave:20> a(:, 2:3)
ans =

   22   33
   66   77
   10   11
}}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS