Top / SJE2007 / 1210

SJE2007

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

  • サンプルデータ(学内アクセス限定,このデータはこの数理情報演習以外の用途で使ってはいけません)face96x96x100
  • Javaのプログラム(学内アクセス限定) Mat2PGM.java

行列から画像群へ [edit]

  • 上記のサンプルデータとJavaのプログラムをダウンロードし,次のように実行してみなさい.
    $ java Mat2PGM face96x96x100 96 96 100 0 hoge
  • 上記を実行すると,カレントディレクトリに hoge000.pgm 〜 hoge099.pgm という100枚の画像ができる.確認しなさい.
  • Mat2PGMを引数なしで実行すると,引数の説明が表示される
    $ 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で平均顔を作ってみよう [edit]

  • face96x96x100 を octave で読み込み,どんなサイズの行列か確認しなさい
  • そこから平均ベクトルを求めてファイルに出力し,PGM画像に変換してみなさい
  • face96x96x100 の最初の50枚は女性,残りの50枚は男性である.以下を参考に,女性平均顔,男性平均顔を作ってみなさい.
    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
Last-modified: 2014-08-13 (水) 13:45:19 (1770d)