0

私は512x512イメージを持っていて、再圧縮しようとしました。ここでの手順はハフマン符号化はどのようにしてdct係数から画像(jpeg)を構成しますか?

は、JPEGファイルに画像を再圧縮するため
1) convert rgb to YCrCb 
    2) perform down sampling on Cr and Cb 
    2) convert YCrCb to DCT and Quantized according to chosen Quality 
    3) perform Huffman Encoding on Quantized DCT 

だ。しかし、ハフマン符号化前の私は、DCT係数の数をカウントし、それが64によってそれによる393216.ディングは私のDCTブロック(8×8)の数を告げるとなるだろうbe be 6144.

ピクセルドメインの8x8ブロックの数を数えようとしました。 512/8 = 64は、私に水平方向に64ブロック、垂直方向に64ブロックを与えます。 64×64 = 4096で、ピクセル数は512x512 = 262144と同じではありません。

私の質問は、ハフマンエンコーディングが393216係数を262144ピクセルにマジック変換して各ピクセル値を取得する方法と、圧縮された画像のサイズ(512x512)(jpeg)。

ありがとうございます。 :D

+0

実際にホフマンエンコーディングを手動で行ったのですか、ライブラリを使用していますか? –

+0

私は全体の圧縮プロセスにライブラリを使用しました –

答えて

1

画像がカラーサブサンプリングなしでエンコードされている場合は、8x8係数ブロックと8x8カラーコンポーネントブロックの比率が1:1になります。各MCU(最小符号化単位)は、8×8ピクセルであり、3つの8×8係数ブロックを有する。 512×512ピクセル= 64×64 8×8ブロック×3(Y、CrおよびCbについて1つ)= 12288係数ブロック。

あなたは色をサブサンプリングしたと言いました(私は両方向であると仮定しています)ので、各MCUに6つの8×8ブロックがあります。下の図では、左端の図は色のサブサンプリングがない場合を示し、右端の図は両方向のサブサンプリングを示しています。この場合のMCUサイズは16x16ピクセルになります。各16×16ブロックのピクセルは、それを定義するために6つの8×8係数ブロックを必要とする(4Y、1Cr、1Cb)。イメージを16×16のMCUに分割すると、32×32個のMCUがあり、MCUあたり6個の8×8ブロック= 6144個の係数ブロックがあります。あなたの質問に答えるために、ハフマンエンコーディングは係数の数を変更するものではなく、カラーサブサンプリングです。 JPEG画像でカラーサブサンプリングを使用することから生じる圧縮の一部は、人間の視覚システムの特徴を利用している。私たちの目はクロミナンスよりも輝度の変化に敏感です。

enter image description here

0

ハフマン符号化は、ピクセルまたはそのような何かに変換係数をしません。少なくとも私が考えているハフマン符号化ではない。すべてのハフマンエンコーディングは、トークンのリストを取り、トークンの頻度に基づいてより少ないビットでそれらを表現しますか?

例:あなたが持っているA、B、C、及びDは

今、圧縮されていない、自分のトークンの各々が2ビットを必要とするであろうトークン(00、01、10、および11)。

のが= 00、B = 01、C = 10としましょう、そしてD = 11

aabaccda0000010010101100 16ビット

としてではなく、ハフマンあなたが少ないビットでaを表現したいコードで表現されますなぜなら、それはより一般的だ、と彼らはの範囲まであまり一般的なものだから、あなたがより多くを持つbdを表したい:

= 0、B = 110、C = 10、D = 111、その後

aabaccda00110010101110 14ビット

0

あなたの画像は512×512ピクセル はY成分が512×512したがって262144画素が Cb、Crの成分が2によってダウンサンプリングされ、したがって256×256画素が65536 DCTになっ262144のDCT係数に回転されているように表現されますそれぞれの係数。 すべてのDCT係数の合計は262144 + 65536 + 65536 = 393216です。 ハフマンはこれとは関係ありません。

関連する問題