8

JpegはHufmanコードを使用していると聞きました。ハフマンコードとは何ですか?

4

2 に答える 2

9

ハフマン コーディングは、シンボル (バイト、DCT 係数など) を受け取り、統計的確率に従って割り当てられる可変長コードでエンコードする方法です。頻繁に使用されるシンボルは、数ビットしか使用しないコードでエンコードされますが、ほとんど使用されないシンボルは、エンコードに多くのビットを必要とするシンボルで表されます。

JPEG ファイルには、これらの可変長コード (1 ~ 16 ビット) とコード値 (8 ビット バイト) の間のマッピングを定義する最大 4 つのハフマン テーブルが含まれます。これらのテーブルを作成するには、通常、各シンボル (DCT コード ワード) が画像に現れる頻度を数え、それに応じてビット ストリングを割り当てる必要があります。ただし、ほとんどの JPEG エンコーダーは、JPEG 規格で提示されているハフマン テーブルを使用するだけです。一部のエンコーダでは、これらのテーブルを最適化できます。つまり、最適なバイナリ ツリーが作成され、より効率的なハフマン テーブルを生成できます。

より深い説明については、http://www.cs.duke.edu/csed/poop/huff/info/をご覧ください。

于 2011-02-08T10:06:38.647 に答える
9

david99world からの回答を完了するだけです。

ハフマン コーディングは、jpeg 圧縮の最終段階にすぎません。重要な圧縮は、DCT に適用される量子化マトリックスから得られます。これは何ですか?DCT 変換は、画像情報を周波数で表示する方法にすぎません。次のようなピクセル値を持つマトリックスを使用する代わりに:

ここに画像の説明を入力

DCT 係数を含むマトリックスがあり、周波数情報を示し、ほとんどの情報が左上隅に集中しています。

ここに画像の説明を入力

ここで DCT 係数が得られたので、実際の圧縮ステップに入ります。これは、すべての値を人間の視覚に基づく量子化マトリックスで除算することです。このマトリックスは、人間の目に関係のない情報を含む係数をゼロにし、重要なものをほぼ同じにします。

ここに画像の説明を入力

このステップが圧縮にとって重要なのはなぜですか? ゼロがたくさんあるので、ハフマン コーディングは大量のゼロを小さなコード ワードにグループ化するため、ストレージ メモリを節約できます。

ここに画像の説明を入力

アルゴリズム全体を Matlab でプログラミングしてみると、理解が深まります。Q マトリックスを数回適用すると、より多くの圧縮 (より多くのゼロ) が得られますが、画質も低下することに注意してください。

これがあなたにとって物事をより明確にすることを願っています。

于 2011-12-26T10:32:29.183 に答える