はじめに
「アセンブラの知識は必要か否か?」という議論をたびたび目にします。これに明確な解答があるわけではなく、時代背景や個人の嗜好、携わっている業務内容によって意見は異なるでしょう。知らないよりは知っていた方が当然よいだろうと思っていても、技術が日に日に進化する今のような時代では、結局勉強は後回しになったままという方も多いのではないのでしょうか。
「知らなくても問題のないこと」や「知りようのない物」は、俗に「ブラックボックス」と呼ばれます。それはライブラリやOS、CPU、コントローラチップであったり、さらには物理現象や人間の仕組みであったりもします。技術のどこまでをブラックボックスとして黙って受け入れ、どこからを「中身を知っておくべきこと」とするのかは、なかなか難しい問題です。
確立された技術を“受け入れ”た上でそれに自分の価値を上乗せするというやり方は、仕事をする上でも大切です。ですが、確立された技術に対して理解を深めるという意味で、また先人たちの功績に敬意を払うという意味も込めて、改めてブラックボックスの中を掘り下げてみることも、私は楽しいと感じます。
ブラックボックスとして取り扱っていたことを掘り下げて調べてみると、当然だと思っていたことがどのような理屈の上に成り立っているのか、その理屈がどの範囲を網羅しているのか、どの範囲には弱いのか、またその仕組みの余力と限界はどれほどなのか、がよく見えてきます。そして、それはブラックボックス内の理解を深めると同時に、改良すべき点などの未来を私たちに示してくれるかもしれません。
趣旨
JPEGは、今やデジカメや携帯電話の写真保存フォーマットとしてお馴染みです。JPEGフォーマットで画像を保存すると、BMP形式などに比べてファイルサイズがかなり小さくなることは、経験上ご存知だと思います。JPEG(Joint Photographic Experts Group = ITU-T T.81)という言葉は、正確には圧縮フォーマットの詳細ではなく、そのざっくりとした枠組みを指します。JPEGフォーマットで保存する場合、現在は一般にJFIF(JPEG File Interchange Format)というフォーマットを使用しています。この連載では、このフォーマットをJPEGとして話を進めていきます。
さて、JPEGはどんな技術をベースに成り立っているのかご存知ですか? JPEGの仕組みの中にはいろいろな技術がちりばめられていますが、大きく「色変換」「直交変換」「ジグザグスキャン+量子化」「エントロピー圧縮」の4つに分けられます。本連載では、各技術についてそれぞれ取り上げていく予定です。
ただし、解説のアプローチはほかの記事とはひと味違います。通常のJPEGの解説ですとそれぞれの実装内容に焦点を当てていますが、この連載では実装内容ではなく、その根底に流れる数学や実験則に焦点を当てます。そのため、おかしなことですがJPEGに関する知識をある程度お持ちの方が読みやすいと思います。
解説のポイントは次の通りです。
- 色変換
- そもそも「色」とは何か
- RGBという表現は何を意味しているのか
- YCbCrという表現は何を意味しているのか
- なぜ色変換を行うのか
- 直交変換
- 直交変換とは何か
- なぜDCTが選ばれたのか
- DCTがベストな選択なのか
- なぜ8×8単位で処理するか
- ジグザグスキャン+量子化
- なぜジグザグに並べるのか
- 量子化とは何か
- エントロピー圧縮
- そもそも「圧縮」とは何か
- 情報量とは何か
- ハフマン符号とは何か
- ハフマン符号がベストな選択なのか
今回はこれらのうち、最初の「色変換」の前半として、「色」について説明します。