1 PGM画像の書式について説明して下さい.余裕のある人は についても

PGM 画像の書式について説明して下さい.余裕のある人は PPM
についても調べて下さい.
1
1.1
PGM 画像
pgm とはグレースケールの画像データを扱うためのフォーマットである.pgm にはアスキーと
バイナリーの 2 種類のフォーマットがある。ヘッダーのマジックナンバーが P2 の時はアスキー、
P5 の時はバイナリーになる。マジックナンバーに続いて 10 進数で幅,高さ,グレースケールの最
大値が記述される.
¶
PGM 画像の書式の例
³
マジックナンバー
幅 高さ
グレースケールの最大値
画像データ
µ
1.2
´
PPM 画像
PPM 形式 (Portable PixMap file format) は RGB カラー画像を扱うためのフォーマットで,
「へッ
ダ+画像データの羅列」で表現できます.へッダはテキスト形式,画像データはテキスト/バイナ
リを選択できる.データ圧縮などはない.
PPM 形式は以下の順にデータを並べる.
• 文字列”P3”.PPM 形式を表すための「マジックナンバー」である.
• 区切り文字.スペースまたはタブまたは改行である.
• 画像の幅.10 進数のテキストで出力する.
• 画像の高さ.10 進数のテキスト.
• R,G,B 値の最大値.10 進数のテキスト.
• 画像データ.R,G,B の順に 10 進数のテキストで並べる.もちろん値と値の 間には区切り文
字が必要.また,1 行が 70 文字を越えてはいけない.
なお,#̈で̈始まる行はコメントとして扱われる.
また,PPM にはバイナリ形式もある.
• マジックナンバーを”P3”の代わりに”P6”にする.
• 画像データは 10 進数のテキストの代わりにバイナリデータ (8bit) を 並べる.もちろん区切
り文字は必要ない.
• バイナリデータは 8bit なので,R,G,B の値の最大値は 255 までしかとれない (テキスト形式
だとこの制約はありません).
1
2
共通課題:輝度を正規化 (0∼HIGH(=255) に伸長) するプログ
ラムを作成して下さい.
次の線形変換によって輝度の正規化を行います.
0
gij
=
gij − low
× HIGH
high − low
(f or all
i, j)
但し,g,high,low はそれぞれ入力画像の画素値,輝度最大値,輝度最少値,g’,HIGH は変換後の画
素値,輝度最大値です.次の 3.2 では,正規化後の画像を使って画像処理を行って下さい.復元画
像についても正規化を行ってから原画像と比較しましょう.
図 1: PGM 原画像 (左図)
図 2: 正規化後 PGM 画像 (右図)
[考察]
原画像と正規化後の画像を主観評価すると正規化後の画像は明暗の差がはっきりしていて認識しや
すい画像に変換できたことが分かる.特に明るい部分 (白い部分) がより強調されている画像を得
られた.理論的にも各輝度値を最大値 HIGH(=255) で伸長しているので値の小さい点 (暗い点) は
輝度最大値を掛けた正規化後もあまり変化はみられないが,値の大きい点 (明るい点) は正規化に
よりさらに値が大きくなり,結果暗い点との差がより強調される結果となる.この予想通りの結果
が得られた.
また,客観評価の基準として次の式を使用する.
XX
|a(x, y) − b(x, y)|
D(A, B) =
x
y
この式によって得られた正規化前後の画像を比較する.
D(原画像,正規化後画像)=2722356
2
選択課題:カラー画像
3
3.1
代表的なカラー画像表現に RGB と CMY(K) があります.それぞれについ
て調べましょう
どちらも色の3原色のこと。RGB とは、R(Red)
・G(Green)
・B(Blue)で、
“ 加色の3
原色 (光の3原色) ”とも云い、画面に色を出すとき使われる。CMYKは、こちらは“ 減色の3
原色 (絵具の3原色) ”で、C(Cyan)
・M(Magenta)
・Y(Yellow)
・K(blacK)のことである。
印刷に利用される。
3.1.1
RGB
例えばR・G・Bが共にゼロというのは、どの色も発色させないことなので、真っ暗闇─即ち
《黒》になる。 逆に、3原色とも最も強く発光させた時の色が《純白》である。 つまり3原色
を同量混ぜていくと、真っ黒から真っ白に変わっていく。 最近のソフトウェアの多くには、任意
の色を作成できるツールが付いているが、R・G・Bの強さを、各々0から255まで256段階
設定できるようになっている。 代表的な色の配合割合を例示する.
Blue
Gray
Green
Purple
Cyan
Olive
Yellow
R(ed)
0
128
0
128
0
128
255
G(reen)
0
128
128
0
255
128
255
B(lue)
255
128
0
128
255
0
0
3.1.2
CMYK
ところで、
“ 減色の ”3原色というのは、文字どおり3原色を全て加えた《白色 (W)》 から、ひ
とつづつ原色を引いたもので、以下の式で表される。
C yan = W−R = (R+G+B) −R = G+B
M agenta = W−G = (R+G+B) −G = R+B
Y ellow = W−B = (R+G+B) −B = R+G
つまり、C () は 青と緑を混ぜたような色 で、M () は 赤と青を混ぜた赤紫のような色 になる。 また、3原色C・M・Y を混ぜれば理論的には黒になるのだが、実際には鮮やかな黒にならないた
め、黒は専用のインクを使っている。以上より画面への“ 表示 ”と プリンタへの“ 印刷 ”とは、
全く正反対の配合法で色を作っていることがわかる。
3
3.2
PPM 形式の画像フォーマットについて調べ,PPM 画像の入出力プログラ
ムを作成して下さい.PGM 同様,アスキー,バイナリどちらにも対応する
プログラムを作成しましょう.
図 3: PPM 原画像 (左図)
図 4: 正規化後 PPM 画像 (右図)
[考察]
PGM 画像の正規化は RGB 各々について最大値最小値を求め別々に正規化した.PGM 画像は RGB
をそれぞれ独立して輝度値を伸長すると RGB のバランスが変わり,画像の色のバランスもくずれ
てしまうのではないかという疑問もあったが,正規化後の画像を確認すると明るさだけが変化し,
色のバランスは保たれていた.これは独立に伸長しているとはいえ各々がほぼ同じ比率で伸長され
ている証拠ではないかと思う.
原画像と正規化後の画像を主観評価すると PGM 画像と同様に正規化後の画像は明暗の差がはっき
りしていて認識しやすい画像に変換できたことが分かる.やはり明るい部分がより明るく強調され
ている結果を得られた.
また,客観評価によって正規化前後の画像を比較する.
D(原画像,正規化後画像)=7836730
4
3.3
色成分ごとに PGM 形式で画像を示して下さい
図 5: PPM 画像赤成分 (左図)
図 6: PPM 画像緑成分 (中図)
図 7: PPM 画像青成分 (右図)
[考察]
PPM 画像から RGB 成分をそれぞれ取り出し各々について原画像と同じサイズの PGM 画像を作
成した.この画像により顔画像の RGB のバランスが視覚的に確認することができる.
三枚の画像を主観的に比較すると赤成分が比較的明暗がはっきりしていて認識しやすいので赤成分
が比率的に大きい,この結果から人間の顔は赤成分が強いということがよく分かる.それに対して
青成分は明暗差があまりなく顔部分が暗く認識しずらいことから青成分が小さいことが分かる.緑
成分はその中間である.
5
3.4
顔画像から肌色成分を抽出して下さい.まず,LBG アルゴリズムを用い,顔
画像から 64 色のコードブック (代表色の集合) を作成します.次に,作成し
たコードブックから肌色を思われる色を (主観) で選びます.最後に,原画像
の各座標の色成分から対応する代表色を求め,肌色として選択した代表色な
らそのまま,そうでない場合は白色を与えることで肌色成分を抽出します.
図 8: PPM 原画像 (左図)
図 9: 肌色抽出画像 (右図)
図 10: 64 色コードブック
図 11: 肌色代表色コードブック
6
[考察&感想]
LBG アルゴリズムとは結果が初期値に左右されやすいという k-mean 法の短所を改良したアルゴ
リズムである.
LBG アルゴリズムの理論を以下に示す.
1. 初期コードブックを定める.
2. データの点それぞれについて最適分割を行い最適なコードブックの領域に属させる.
3. 各コードブックについて属している点により新たな点を求め移動させる
4. コードブックの変化が目的値以下になるまで2,3を繰り返す.
• 最適分割:各点 xi は d(xi ,yj ) ≤ d(xi ,yk )
(j6=k | k is all) を満たす yj の領域に移動させる.
• コードブック移動:各コードブック yi は,そのコードブックに属した点 xi の重心へと移動さ
せる
この課題は徳田先生の講義で学んだ知識をもとに作成しました.
抽出画像をみると結構正確に肌色成分を抽出できたのではないかと思う.ただ,服のいろが赤
色だったことにより,光のあたり具合で肌色成分として抽出してしまった部分がある.今回の初期
コードブックは RGB それぞれについて領域を4分割し,その領域の中間点である,32,96,160,224
の4点を RGB の組み合わせで 44 =64 点分作成しただけでサンプル画像のデータをまるで参考にし
ない初期コードブックを作成した.そのせいか最適分割されるコードブックが偏ってしまい,いま
いち正確さに欠けるサンプリングとなった.この問題点を解決するために初期コードブックをもっ
と的確な位置に配置することが必要になる.初期コードブックを設定する方法としては,RGB の
3次元領域をいくつかの細かいブロックに分割してサンプル画像のそれぞれの点の所属率の高いブ
ロックを上から 64 ブロック分選択し,そのブロックの重心を初期コードブックとする方法などが
考えられる.
今回,主観でコードブックから代表色を選択したが,肌色というよりもむしろ茶色に対応していた
ようだ.今回の課題で LBG アルゴリズムの理解に苦しんでいた時に宇藤君に色々説明してもらい
ました,宇藤君ありがとう.画像に親しむで楽しく課題に取り組めました.これから一年間頑張ろ
うと思います.
7