画像フォーマット

画像フォーマット

画像データは矩形領域の左上を起点に、左から右へ、右端に来たら 次の行を左から右へ、というように並んでいる。

幅 N, 高さ M の画像の場合,

0,               1, .....      N-1,
N,             N+1, .....     2N-1,
....
N*(M-1), N*(M-1)+1, ... N*(M-1)+N-1 (=N*M-1)
データのある各点(画素)をピクセル(pixel)と呼ぶ。

PBM, PGM, PPM

Portable {Bit, Gray, Pix}Map

形式

PNM ... Portable aNy-Map

例:bitmap ascii
P1
# feep.pbm
24 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

例:graymap ascii
P2
# feep.pgm
24 7
15
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  3  3  3  3  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0 15  0
0  3  3  3  0  0  0  7  7  7  0  0  0 11 11 11  0  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0  0  0
0  3  0  0  0  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

例:pixmap ascii
P3
# feep.ppm
4 4
15
 0  0  0    0  0  0    0  0  0   15  0 15
 0  0  0    0 15  7    0  0  0    0  0  0
 0  0  0    0  0  0    0 15  7    0  0  0
15  0 15    0  0  0    0  0  0    0  0  0

例題: 右方向のドット位置を x 下方向を y として、画素値が 16 * x + y で表されるような 16 × 16 の pgm 画像を作成しなさい。

回答例
以下のPythonプログラム(grayscale.py)を作成。
# grayscale.py ... output 16x16 grayscale pgm

print 'P2'
print '16 16'
print '255'
for y in range(16):
    for x in range(16):
        print '%3d ' % (16 * x + y),
    print ''

% python grayscale.py > gray.pgm
gray.pgm にリダイレクトで作成

圧縮画像ファイル形式

上の例で作成した p[bgp]m ファイルを GIF に変換したもの

Netpbm コマンド群

各種の画像フォーマットから pbm, pgm, ppm への変換。pbm, pgm, ppm, pnm 画像の演算。pbm, pgm, ppm, pnm から各種画像フォーマットへの変換などを行う。

~/.cshrc

set path = (/pub/sol8/netpbm/bin $path)
setenv MANPATH /pub/sol8/netpbm/man:$MANPATH
を入れておく。

pbm, pgm, ppm, pnm の man を読む。

pbmtext
文字列(ASCII)を pbm ファイルにする
icontopbm
Sunのアイコンエディタで作成したiconファイルを pbm形式に変換する
xbmtopbm
X window の xbm形式を pbm形式に変換する
pbmtopgm
pbm形式を pgm形式に変換する(gray mapになる)
rgb3toppm
3つのpgmファイルをそれぞれ r,g,b に割り当てたカラー画像を作る
pnmarith
画像間で演算をおこなう
ppmquant
カラーの減色をおこなう
ppmtogif
GIF形式の画像に変換する
cjpeg (pnmtojpeg)
JPEG形式の画像に変換する
giftopnm
GIFから PBM/PGM/PPM へ変換
djpeg (jpegtopnm)
JPEGから PGM/PPM へ変換