DCT (離散コサイン変換) が JPEG 圧縮でピクセル値 -128 から 127 の間で動作することを意図しているのはなぜですか?
画像に DCT を適用する前に、ピクセル値に対してレベル オフセット (128 による減算) が行われるのはなぜですか?
DCT (離散コサイン変換) が JPEG 圧縮でピクセル値 -128 から 127 の間で動作することを意図しているのはなぜですか?
画像に DCT を適用する前に、ピクセル値に対してレベル オフセット (128 による減算) が行われるのはなぜですか?
ウィキペディアを読んでいますか?
各コンポーネント(Y、Cb、Cr)の各8×8ブロックは、正規化された2次元のタイプII離散コサイン変換(DCT)を使用して、周波数領域表現に変換されます。
8×8ブロックのDCTを計算する前に、その値は正の範囲からゼロを中心とする範囲にシフトされます。8ビット画像の場合、元のブロックの各エントリは[0、255]の範囲にあります。範囲の中点(この場合は値128)が各エントリから差し引かれ、ゼロを中心とするデータ範囲が生成されるため、変更された範囲は[-128、127]になります。
この手順により、次のDCT処理段階でのダイナミックレンジ要件が緩和されます。(DCTステージ内のダイナミックレンジの違いを除けば、このステップは、変換を実行した後にDC係数から1024を減算することと数学的に同等です。これは、1つの減算のみを実行するため、一部のアーキテクチャで操作を実行するためのより良い方法です。それらの64ではなく)。
これが私が理解していることです..レベルオフセットが行われていないとします。このマトリックスでDCTを取得すると、すべてのピクセル値が正であるため、DC値( Xなど)はより大きな数値になります。画像のピクセル値に対してレベル オフセットが行われると、一部のピクセル値は負になり、一部は正になります。後で、結果の行列で DCT を取得すると、DC 値 (たとえばY ) は以前のように大きな数値にはなりません。つまり、Y < Xです。したがって、このデータYを格納するために必要なビット数は、 Xに必要なビット数よりも少なくなります。
したがって、レベル オフセットが必要であり、DCT はピクセル値 -128 から 127 の間で動作することを意図しています。
DCT を適用する前に、ピクセルは 0 ~ 255 の範囲の RGB (赤、緑、青) 値で評価されます。値を 0 付近に集中させるには (値のコサインを簡単に見つけることができるため)、128 を減算します。
http://www.whydomath.org/node/wavlets/basicjpg.htmlを参照してください。
または、このように理解できます。[0,255] 256 個の値があります。256/2 = 128. 0 を中心に、範囲は [-127,127] になります。