24ビットの画像は、R、G、Bにそれぞれ8ビットを使用することを知っています。これは、RGBカラースペース専用です。24ビットJPEG画像のYCbCr色空間で、ビットはどのように配分されますか?
24ビットの画像は、R、G、Bにそれぞれ8ビットを使用することを知っています。これは、RGBカラースペース専用です。24ビットJPEG画像のYCbCr色空間で、ビットはどのように配分されますか?
回答:
YCbCrにはいくつかの形式があります。一般的に言えば、目は彩度(Cb、Cr、色)の変化よりも輝度(Y、明るさ)の変化に敏感です。したがって、画質を維持しながら、一部の彩度情報を消去することが可能です。
したがって、最も「高価な」フォーマットは4:4:4で、各輝度(Y)コンポーネントに対して1つの赤の差分(Cr)と1つの青の差分(Cb)のコンポーネントがあります。
次に、前述の原則を適用すると、4:2:2があり、2つのY成分ごとに1つのCbと1つのCrがあります。そして、それはさらに4:1:1と4:2:0などに行きます。詳細はこちら。
JPEGは、R、G、およびBチャネルごとに8ビットで開始する場合がありますが、JPEGに格納される場合は、まったく異なる「ビット深度」ではなく、値が特定の精度の周波数係数として格納されるという非常に異なる方法で格納されます。
JPEGでより重要なのは量子化率です。これは、圧縮の量子化段階で廃棄される情報量に影響を与え、各係数の精度に影響します。この量子化率は、photoshopでJPEGを保存するときの「品質」設定によって設定されます。ただし、ラスターイメージの場合のようにビット深度とは関係ありません。JPEGエンコーダー/デコーダーは24ビットで開始/終了しますが、JPEG形式ではJPEGイメージにビット深度がないと言うこともできます。ラスター画像。
JPEGの保存に関連する他の主な要素は、クロマサブサンプリングタイプです。JPEGでは、輝度(明度)チャネルに対してカラー(PrおよびPb)チャネルの水平解像度または水平解像度と垂直解像度の両方を半分にするオプションがあります。解凍すると、カラーチャネルが補間され、ほとんどの写真の主題では、それほど大きな違いはありません。
ここでは、画像がJPEGに変換される方法の大まかな概要を示します。
RGB値はY、Pb、Pr値に変換されます。YPbPr色空間は、最も詳細な輝度情報を1つのチャネルにのみ保持するため、効率的な圧縮に適しています。この変換は単純な算術演算であり、丸め誤差がある場合を除いて、完全に可逆です。
クロマサブサンプリングを使用している場合(つまり、4:4:4モード以外の何かを使用している場合)、PbチャネルとPrチャネルのみの垂直および/または水平解像度が半分になります。したがって、これらのチャネルは、輝度チャネルとは異なるピクセル寸法を持っています。これにより、カラーチャネルの解像度が永久的に失われます。
各チャンネルで、画像は8ピクセルx 8ピクセルのブロックに分割されます。これにより、各チャンネルのそのようなブロックごとに64の線形値が得られます。チャネルがいずれかの次元で8ピクセルの倍数でない場合、エッジピクセルが繰り返されます(圧縮解除するとスローされます-したがって、8ピクセルの倍数の次元ではJPEG圧縮が常に効率的です。クロマサブサンプリング)。
各ブロックの64個の値は、空間ドメインから周波数ドメインへの変換を受けます。この場合、離散コサイン変換と呼ばれます。最終的に64個の係数が得られます。各係数は、そのブロックが占める領域の特定の周波数マップの振幅を表します。最初の値は最低周波数であり、これは事実上すべてのピクセルの平均値であり、ブロックの最高周波数成分を表す最後の値までです。ブロック内の後の値よりも前の値はすべて大きくずれており、最終的な画像の外観にとってより重要です。この操作は、十分な精度を使用している限り、完全に元に戻すことができます。
次に、量子化ステップがあり、前のステップで取得した64個の係数のそれぞれが何らかの数値(量子化係数と呼ばれます)で除算され、残りが捨てられます。これは、サンプルの精度が最も影響を受ける場所ですが、ロスレス圧縮と比較して、JPEGから大幅なスペース節約を得ることができます。前回の変換以降はすべて周波数領域にあるため、この精度の低下は、この変換前にピクセルのビット深度/精度を単に下げるよりも、知覚的な画質を維持するのに最適です。この手順の逆は、係数を除算した数と同じ数を乗算するだけですが、もちろん、余りを捨てたので、係数の精度が低くなります。その結果、品質が永久的に失われ、
この量子化の後は、後の多くの係数がゼロになるのが一般的であるため、これらは破棄されます。次に、(ロスレス)可変長コーディングルーチンは、それぞれが異なる数のビットを使用する場合でも、残りのすべての係数を効率的な方法でエンコードします。
特定の量子化係数が特定のビット深度に等しいと言うことは不可能です。量子化はビット深度を減らすときのようにバンディングを与えないので、気づく部分から始めて全体的に知覚的損失を詳細に与えるからです。これは、その周波数に対して振幅が非常に小さいためです。
各チャネルで約8ビットですが、これを行うにはいくつかのわずかに異なる方法があります。詳細は、YCbCrに関するWikipediaの記事に記載されています。