色差情報埋めこみによるカラー復元可能なグレースケール画像変換法の提案

Author: Zinnia

1. 概要

グレースケール変換は、カラー画像から輝度階調(Y)のみをとりだす処理であり、 カラー画像に含まれていた色差階調(Cb(U)、Cr(V))は失われてしまう。

本稿では、グレースケール変換の際、Y成分に色差の情報を埋めこみ、 またその色差の情報を利用してカラー画像に復元する方法の概要を述べる。

2. 原理

2.1. 冗長さについて

音声、画像などのデータは、そのディジタル化の際の損失を最小とするような 方法で符号化されているため、冗長な部分がかなり存在する。 この冗長さを可能な限り少なくするのが、圧縮(高能率符号化)である。 高能率符号化の過程は一般に可逆であり、符号化過程においてさらに 情報が損失することはない。

一方、符号化過程において多少の損失を認め、さらに高い符号化利得を 得る符号化形式も存在する。この際、なるべく(人間の感覚における)品質の低下が ないような方法で情報量を落としてゆく必要がある。

一般に、人間の視覚や聴覚は、低い周波数成分の変化に対して敏感で、 高い周波数成分の変化には鈍感とされている。 画像においては、色の変化の緩やかな部分に乗るノイズと、 輪郭の部分に乗るノイズでは前者の方がより目立つということになる。

その他、聴覚に独特な性質であるマスキング効果(大きな音と同時に 出ている小さな音には気付きにくい)や、 視覚に独特な性質である色差に対する感覚の鈍さなどが 情報量を落とす際に利用されることが多い。

2.2. 色情報とその圧縮について

色は、赤(R)、青(B)、緑(G)の3つの成分によってあらわすことができるのは 周知の通りである。しかし、RGB形式が色を表現するための唯一の 形式ではない。CMY(Cyan, Magenta, Yellow)、HSB(Hue, Saturation, Brightness)、 YUV形式など、様々な形式がある。重要なのは、色というのは3つの独立なベクトルに よって表現される3次元の量だということである。

色表現に対する様々な形式(基底と言いかえてもよい)は、それぞれに 要請があって誕生したものである。例えばRGBは加算混合(光の混合)における 三原色であり、CMYは減算混合(絵の具などの混合)における三原色である。

今回扱うYUV形式(YCbCr形式ともいう)は、輝度(Y)と 色差(Cb, Cr)によって色を表現するものであり、 以下の変換式によってRGBと相互変換できる。

YCbCr形式は、輝度の変化には敏感であるが色差の変化には鈍感であるという 人間の視覚の特性を利用した情報量削減をする際に便利である。 例えば、JPEG圧縮などでは、各種符号化の前にまず CbとCr成分をそれぞれ縦横に1/2に間引き、全体的に情報量を 半分にしてしまう。

カラー画像 色差信号を1/4に間引いた画像

本稿でも、JPEG圧縮と同様に、色差信号を1/4に間引いたものを 「色情報」として利用する。

2.3. データ埋めこみ

目的のデータとは無関係なデータを埋めこむ操作も符号化の一種である。 高能率符号化と同様に、感覚的な劣化をおさえることが要求される。

いくら人間の視覚が画像の明るさ(輝度)に敏感だといっても、 プラスマイナス1くらいの変化はほとんど気付かない、という事実を利用し、 輝度値の下位1ビットを別のデータを埋めこむために利用する方法がある。 もちろん下位2ビットでも4ビットでも構わないわけだが、 あまりビットを増やすと埋めこんだデータの影響による輝度の変化が 多くなり、それだけ気付かれやすくなってしまう。

あるいは、周波数成分に分解した後に、同様な処理で下位ビットに 別のデータを埋めこむという方法も考えられる。高域に埋めこめば 気付かれづらいし、低域に埋めこめばJPEG符号化などをされても 情報があまり失われないという利点がある。

3. 処理手順

3.1. 符号化

符号化、復号化の処理単位は2x2のブロックとなる。 まず、カラー画像をYCbCrに変換する。その後、CbCr成分を それぞれ1/4に間引く。 これで1ブロックあたりの情報量は、Yについて32ビット、 CbとCrについてそれぞれ8ビットになる。

CbとCrの情報をYに埋めこむわけであるが、 このままでは1ピクセルあたり4ビット必要になるので さらに情報量を減らすためにCbCrを16階調に再量子化する。 たとえば、Cbが25、Crが100という値を持っていた場合、 再量子化によってCbは1、Crは6となる。この再量子化により、 CbとCrの情報量はそれぞれ4ビットとなり、 1ピクセルあたりの埋めこみ量は2ビットとなる。

ブロックの左上、右上、左下、右下のピクセルに、それぞれ Cr上位、Cb上位、Cr上位、Cb下位の2ビットずつを埋めこみ、 グレースケール画像として出力する。

3.2. 復号化

グレースケール画像を2x2のブロック単位で読み込み、 それぞれの下位2ビットからCbとCrの情報を復元する。 CbとCrをそれぞれ16倍することにより、0〜255の(正確には0〜240だが)値にし、 各ピクセルのCb、Crの値とする。

こうして復元されたY、Cb、Crの情報から、PPM画像(RGBのビットマップデータ)を 出力する。

4. 実験結果

上記のアルゴリズムによる符号化と復号化の結果を以下に示す。 順番に、オリジナルのカラー画像、 色差情報を埋め込んだグレースケール画像、復元されたカラー画像となっている。

オリジナル画像 符号化画像 復号化画像
オリジナル画像 符号化画像 復号化画像

5. 考察

符号化されたグレースケール画像に、見た目の劣化はまったく感じられない。 一方、復号化されたカラー画像には、 色差情報不足による多少の色調の変化、色の滲みが見られるが、 上記のような単純な埋めこみによってもかなりの程度の 再現性を得ることができることがわかった。

しかし、1ピクセルあたり2ビットといえば、全体のデータの 1/4は色差情報のために利用されていることになる。そう考えると、 1/4も使っておいてこの程度の画質かと思えてくるが、 例えば色差情報を圧縮した後に埋めこむというような処理を加えれば さらに画質がよくなることが期待される。

今回挙げた再量子化のプロセスも一種の圧縮であるが、 このような大雑把な量子化では失われる情報も馬鹿にならない。 ところで、Cr、Cbプレーンの空間的な相関はYプレーンと同様に高いことが 期待されるので、JPEGのようにDCTを用いた圧縮をCr、Cbプレーンそれぞれで 行えば、損失を軽減したうえに再量子化に迫るビットレートを得ることが できるであろう。

また、周波数領域において効果的な埋め込みをすれば、色差情報をさらに 増やすことができ、結果として得られる復元画像の再現性は かなり高くなると考えられる。

これらの方法を組み合わせることによって、JPEGが達成しているのと 同程度の色再現性を実現できるのではないかと考えている。

6. ソースコード

7. 参考文献

RGBとYCbCrの変換に関して、 「マルチメディア技術の基礎DCT入門」(貴家仁志、村松正吾著・CQ出版社)を参考にした。