3

だから私は簡単な bmp から jpeg への画像変換プログラムを書こうとしています。ご存じかもしれませんが、jpeg 圧縮、DCT、量子化、およびエントロピー エンコーディングには、3 つの主要なステップが含まれます。これらの各中間段階で計算された値をファイルに書き込みたいと思います。

私の質問は、各ピクセルの RGB 値を YUV 形式に変換し、それを 3 つの別々の 2-D 配列に格納した後です。DCT はこれらの配列のそれぞれで計算されますか? したがって、DCT が適用された 3 つの異なるアレイが得られますか? それが正しければ、次のステップは、Y、U、および V に対応する各配列を量子化することです。次に、これらの 2 次元配列のそれぞれにエントロピー エンコーディングを適用する必要があります。

これらの 3 つの配列は、.jpeg ファイルとして読み取ることができるように、どのように結合/ファイルに書き込まれますか?

4

1 に答える 1

3

まず、jpeg 仕様をダウンロードすることをお勧めします。

カラー チャネルごとに個別に DCT を計算する必要があります。そのため、YUV カラー スペースでは、Y 8x8 ブロックごとに 1 つの DCT を計算する必要があります。1 つは U チャネル用、もう 1 つは V チャネル用です。

ほとんどの場合、U チャネルと V チャネルはサブサンプリングされます。これは、U と V ごとに 2 つまたは 4 つの Y ブロックがあることを意味します。

DCT が適用された後、各 DCT を量子化できます。通常、異なるチャネルには異なる量子化テーブルが必要です (jpeg 仕様は正しいテーブルを示唆しています)。

量子化の結果は、ハフマン アルゴリズムを使用してエンコードされます。各カラー チャネルをインターリーブ モード (1 ~ 4 個の Y ブロックの後に 1 個の U ブロックと 1 個の V ブロックが続きます) またはリニア モード (最初にすべての Y ブロックが続きます) で jpeg ストリームにダンプできます。 、次にすべての U、次に V)。

jpeg ストリームには、バイトが失われた場合にデコードを再同期する RST タグが含まれている場合があります。

ただし、このタスクを完了するには jpeg 仕様が必要です。

于 2012-11-18T01:37:58.260 に答える