2017-04-05 8 views
0

画像4:2:2 HOR(YYCbCr) IはSOF0でこれを参照してください。JPEG SOF0サブサンプリング成分

Component[1]: ID=0x01, Samp Fac=0x21 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y) 
Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 1), Quant Tbl Sel=0x01 (Chrom: Cb) 
Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 1), Quant Tbl Sel=0x01 (Chrom: Cr) 

は今どこに0x21で及び0x11を値から来ていますか?

私はサンプリングファクタが次のように格納されていることを知っています:(1バイト)(ビット0-3垂直、4-7水平) 0x11が2x1に関連し0x21が1x1にどのように関連するかはわかりません。 私は0x21でなく、Yコンポーネントで0x11を見ると予想しました。 (結果として0x21を取得する方法がわかりません)。

誰かがこれらの値をどのように計算するか、例えば4:2:2の水平(16x8)を計算する方法を説明できますか?

答えて

1

JPEGそれはバサックウォークです。値は相対的なサンプリングレートを示します。 最高サンプリングレートはY(2)です。 CbとCrのサンプリングレートは1です。 最も高いサンプリングレートを使用して、ピクセルに正規化します。

2Y = Cb = Cr。Y = 1/2Cb = 1/2Cr。

その方向のYピクセルの値ごとに、CbとCrのピクセル値の1/2を使用します。

JPEG標準のようなものもあります。

4Y = 3CB = 1CR Y = 3/4CB = 1/4のCr

又は

3Y = 2CB = 1CR Y = 2/3CB = 1/3CR

しかし、ほとんどデコーダはそれを処理できませんでした。

「4:4:4」、「4:2:2」、「4:4:0」のようなラベルは、JPEG規格にないラベルです。まあまあ、私はそれらの言葉がどこから来たのか分からず、彼らは直感的ではありません(ゼロサンプリングはありません)。

この問題を別の方法で見てみましょう。しかし、最初に、JPEG標準自体は実装可能ではないことに注意しなければなりません。画像をエンコードするために必要なことは未定義であり、標準は不必要なもので広がっています。

スキャンがインターリーブされている場合(3つのコンポーネントすべて)、最小符号化単位(MCU)でエンコードされます。 MCUは、8×8の符号化ブロックで構成されています。

サンプリングレートは、MCU内の8x8ブロックの数を指定します。

あなたはCbの場合はY + 1x1、Crの場合は1x1です。これは、合計4つの8×8ブロックがMCU内にあることを意味します。上記で他の理論値を述べたが、MCUの最大ブロック数は10です。したがって、4x4 + 3x3 + 2x2は不可能です。

JPEG標準では、ブロックがイメージ内のピクセルにどのようにマップされているかについては言及していません。私たちは通常、最大値を使用し、2x1ゾーンまたは16x8ピクセルを波乗りさせます。

しかし、すごみのすべての種類は、次のような、標準の下で可能である:おそらくピクセルの16×16ブロックにMCUマップを意味するだろう

Y = 2×1、Cbの= 1×2およびCr = 1x1の

あなたのデコーダはおそらくこれをサポートしません。あるいは、MCAが16x8ブロックのピクセルにマップされ、Cbコンポーネントが8方向にさらに値を持つことを意味する可能性があります。

これを実際に見るための最終的な方法は、Y成分を基準点として使用することです。 Yは、X方向とY方向のサンプリングレートとして常に1または2(おそらくは4)を持ち、CbとCrのレートは1(と多分2)になると定義します.Yコンポーネントは常に画像内のピクセルを定義します。この偉大な詳細な回答のため

Y Cb Cr 
1x1, 1x1, 1x1 
2x2, 1x1, 1x1 
4x4, 1x1, 1x1 
2x1, 1x1, 1x1 
1x2, 1x1, 1x1 
+0

ありがとう:

これらはその後、現実的な可能性になります。 – juFo

関連する問題