octave で画像処理 - 画像の読み書き・表示

GNU Octave という行列計算ソフトを使って画像処理にチャレンジしてみようといます. 今のところ特にオチは用意していないので,うまくまとまるかは不明.

とりあえず,画像ファイルの読み書きから.

画像の読み込み

imread コマンドを使います. imread の引数にはファイル名を指定します.

octave:2> [ x, m, a ] = imread ( 'DSCF0135.JPG' );

左辺値は

x
各画素の輝度値
m
カラーマップ
a
アルファチャンネル(透明度)

だそうです. m, a は読み捨てて構いません.

で,問題は x ですが,内容を表示させてみます.

x =

ans(:,:,1) =

 Columns 1 through 16:

   31   32   33   36   36   37   36   36   32   34   37   43   51   59   59   53

   36   37   37   37   37   38   39   40   38   41   40   41   46   50   52   46

   36   37   38   37   35   37   40   44   46   47   45   41   39   41   42   37

…

ans(:,:,1) というところに注目. どうやら3次元の行列になっているようです. RGBの各プレーンの輝度が

x(:,:,1)
red
x(:,:,2)
blue
x(:,:,3)
green

という割振りで格納されています.

画像の表示

imshow() コマンドを使います.

octave:11> imshow ( x )

別ウィンドウが開いて先ほど読み込んだ画像が表示されます. ただ,大きな画像の場合はフルサイズではなく,適当に縮小されて表示されるようです.

画像の保存

imwrite() コマンドを使います.

octave:15> imwrite ( x, 'foo.png', 'png' );

引数は

x
RGB の 3 プレーンが格納された 3 次元行列
foo.png
ファイル名
png
ファイル形式

です. ファイル形式は jpg なんかも指定できますが,もちろん lossy 圧縮がかかるので,保存したファイルを再度処理したい場合は利用しないほうがいいでしょう.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-04-03 (土) 22:46:49 (3854d)