月別アーカイブ

カテゴリ別アーカイブ

Team-oyodo 公式ブログ

一覧へ戻る

JPEGの謎 -処理工程の話-

前回、JPEGでデータの圧縮を実現しているのは2つの処理だと書きました。すなわち

  1. 画像をボンヤリさせる
  2. データを並べ替える

ユーザーが直接意識する必要があるのは通常1の方で、多くの場合は「どれぐらいボンヤリさせるのか」をユーザー側である程度選べるようになっています。
例えばPhotoshopの「WEB用に保存」では101段階で画質の選択ができるわけですが…。

  • 同じ設定なら必ず同程度の画質で保存できるわけではない。
  • 設定した数値と生成された画像の綺麗さは必ずしも正比例の関係ではない。

上記のことを我々は経験則で知っています。ソフトの内部的にはいったいどのような処理が行われているのでしょうか。

ぼやかし処理は2回行われている

ハイ、前回の記事では判りやすくするために工程を強引に2段階に分けたのですが、最初にもう少し細かい工程も掲載しました。
もう一度引っ張り出してきます。

  1. 色空間をYCbCrに変換
  2. ダウンサンプリング
  3. 離散コサイン変換
  4. 量子化
  5. ジグザグスキャン・符号化

このうち、ぼやかし処理が行われるのは2箇所。「2.ダウンサンプリング」と「4.量子化」です。
言葉だけではピンと来ないと思いますので、圧縮率をユーザー側で自由に設定できるソフト「JPEG Optimizer」を使って詳細を見ていきましょう。

ダウンサンプリング

この工程は「サンプリング比」で4段階に設定できます。(図1-1)
JPEG Optimizer設定画面

  • 4:4:4とはダウンサンプリングしないという意味で、この設定のみこの段階でのぼやかし処理は行われません。
  • 4:2:2は水平方向のピクセルが半分に間引かれます。なので、1ピクセルごとに縦のストライプが入っているような画像は潰れてしまいます(図1-2)
    サンプリング比4:2:2で検証
  • 4:2:0の場合は4:2:2の場合に加えてさらに縦方向のピクセルが半分に間引かれます。なので図1-2のような画像も潰れますし、こういう画像の場合も潰れてしまいます(図1-3)
    サンプリング比4:2:0で検証
  • 4:1:1の場合は横を1/4に間引いて縦は間引かない方式で、データ量としては4:2:0の場合と同じです。

上記の説明だけですと、データ量は4:2:2が1/2、4:2:0と4:1:1が1/4になりそうですが、実際の工程では輝度と色差に分けて処理する(輝度は間引かず色差のみ間引く)のでJPEG Optimizerの記述どおり、4:2:2が2/3、4:2:0と4:1:1が1/2になるのです。
ソフトによっては「YUV444」「YUV422」などと表記されていることもありますが、それぞれサンプリング比4:4:4、4:2:2と同じ意味です。

量子化

この工程は「量子化テーブル」の項で輝度と色差をそれぞれ100段階に設定できます。直接テーブルを編集すればもっと細かく設定できますが、わかりにくくなるのでここではスライダを使います。
「テーブルに反映する」にチェックを入れてスライダを動かしてみましょう。画質を良くすればテーブルの数値は小さく、逆に悪くすればテーブルの数値が大きくなるのがわかると思います。(図2-1)
量子化テーブル設定画面
量子化ではこのテーブルの値で割り算をして余りを捨てる丸め処理を行います。1だとデータはまったく減らず、255だとものすごく減るという具合ですね。
ここで削るのはその場所の明るさや色がまわりと比べてどれぐらい違うのかという情報で、削れば削るほどまわりと似たような色になっていき、できる画像もどんどんボンヤリのっぺりしていきます。
この処理は8×8ピクセルのブロック単位で行われ、どんどん画質を下げていくと最終的には同じサイズの色違いタイルを並べたような画像になります。(図2-2)
量子化処理による劣化検証

まとめ

さて、ここまでダウンサンプリングと量子化それぞれの工程で、指定を変えると画質がどう変わっていくかを見てきたわけですが、多くのJPEG生成ソフトではここまで処理方法を細かくは指定できませんし、ユーザーもあまりしたくありません。
ユーザー側がおおまかにどれぐらいの画質で圧縮したいかを指定すれば、ややこしい部分(=ダウンサンプリングをどの設定でやって、量子化は輝度と色差にそれぞれどういうテーブルを使ってやるか)はソフトがある程度勝手に決めてあげますよという設計になっているわけですね。

ここで注意したいのは、ソフト側の基準はあくまで人間の目で見た「綺麗さ」ではなく、単純に「情報量をどれだけ削るか」であるということです。
要するに便宜上、データを極力残す設定を高画質設定、データをたくさん捨てる設定を低画質設定としているにすぎません。
例えばある画像はたくさんデータを削ってもほとんど人間の目にはわからない一方、別のある画像は少しデータを削っただけですごく目立ってしまうかもしれません。
これが、画質の設定と生成された画像の綺麗さが必ずしも正比例しない大きな理由です。

ではでは結局、ユーザー側がJPEG画像を取り扱っていく上でどのようなことを意識しておくべきなんでしょうか。
そこらへんを次回に。では、また。

(シンヲ)

カテゴリ:画像処理 2012/5/18 13:57

  • mixiチェック