Top / _Vision / 2011 / report2 / appendix

視覚認知計算特論 2011年度 レポートその二 付録 [edit]

octaveでの画像の扱い方 [edit]

2011-11-14 現在,龍大計算機室のLinux環境には GNU Octave version 3.0.5 と Octave-Forge の image パッケージがインストールされています. 以下にその簡単な使い方を示します.

入出力 [edit]

blackuni3.png

上記のサンプル画像を保存したディレクトリで次のようにすると,この画像の画素値を反転した画像を作成して hoge.png という名前で保存することができます.

octave:1> X = imread("blackuni3.png");
octave:2> size(X)
ans =

   120   170     3

octave:3> Y = 255 - X;
octave:4> imwrite("hoge.png", Y(:, :, 1), Y(:, :, 2), Y(:, :, 3));
出力時に警告が出るが,問題ない.

ここではサンプル画像が3チャンネルのカラー画像だったので,変数 X に代入される imread() の戻り値は (高さ)x(幅)x(チャンネル数)の3次元配列になっています. 一方,imwrite() に画素値の配列を渡す場合,カラー画像として出力するならば上記のようにチャンネル毎の2次元配列を引数に指定する必要があります. imwrite() の引数に2次元配列を一つだけ指定すると,グレイスケール画像として出力されます.

グレイスケール化&データ型のこと [edit]

ためしに上記のサンプル画像をグレイスケール画像に変換して出力してみましょう.

X = imread("blackuni3.png");
Y = ( X(:, :, 1) + 2*X(:, :, 2) + X(:, :, 3) ) / 4;   # R:G:B = 1:2:1 でグレイスケール化
size(Y)
imwrite("hoge.png", Y);

同じディレクトリ内に上記の内容のファイル gray.m を作成して,実行してみると…

$ octave -q gray.m
ans =

   120   170

$ file blackuni3.png   ← ファイルの種類などの情報を得るコマンド
blackuni3.png: PNG image, 170 x 120, 8-bit/color RGB, non-interlaced
$ file hoge.png                      ^^^^^^^^^^^^^^^^    
hoge.png: PNG image, 170 x 120, 8-bit grayscale, non-interlaced
                                ^^^^^^^^^^^^^^^^

hoge.png はちゃんとグレイスケール画像になっています.しかし表示してみるとおかしなことになっているのがわかります.

これは,上記のプログラム例では imread() の戻り値が「8bit符号なし」の整数型であるため,そのデータ型のままで演算して値があふれてしまったためです. この問題を回避するためには,次のプログラムのようにデータ型を変換してやる必要があります.

X_u8 = imread("blackuni3.png");
X_i32 = int32(X_u8);   # 32bit符号付き整数に

# R:G:B = 1:2:1 でグレイスケール化
Y_i32 = ( X_i32(:, :, 1) + 2*X_i32(:, :, 2) + X_i32(:, :, 3) ) / 4;

Y_u8 = uint8(Y_i32);  # 8bit符号なし整数に
imwrite("hoge.png", Y_u8);

ここでは32bit整数に変換しましたが,場合によっては浮動小数点型に変換したくなることもあるでしょう.

それから,次のことにも注意しましょう.

$ file hoge.png     
hoge.png: PNG image, 170 x 120, 8-bit grayscale, non-interlaced

octave:1> X = imread("hoge.png");
octave:2> size(X)
ans =

   120   170

画像サンプルとその扱いについて [edit]

cat.tbz (学内からのみアクセス可能)

上記のリンク先のファイルは,tar というツールで複数の画像ファイルをひとかたまりにしたもの(アーカイブ)を bzip2 というツールで圧縮したものです. tar + bzip2 なので,tbz という拡張子をつけることがよくあります. ちなみに tar + gzip で tgz というのもあり.

$ file cat.tbz
cat.tbz: bzip2 compressed data, block size = 900k

元に戻すには,bunzip2 してから tar でアーカイブを展開すればよいのですが,ほとんどの環境では tar コマンドにオプションをつけて一度に済ませることができます.

$ tar tjf cat.tbz   展開したらどんなディレクトリ/ファイルができるのか一覧
$ tar xjf cat.tbz   実際に展開

展開すると画像がたくさんできます. これらの画像は,この授業のため以外の目的には使用しないでください.


添付ファイル: fileblackuni3.png 199件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-13 (水) 13:45:19 (1255d)