0

私はあなたが明確にすることができることを望んでいるいくつかの問題を抱えています. 私は、Mpeg2 に似たビデオ エンコーディング プロセスを独学で学びました。プロセスは次のとおりです。

  1. RGBA イメージを 4 つの個別のチャネル データ メモリ ブロックに分割します。したがって、すべての R 値の配列、G 値の個別の配列などです。

  2. 配列を取得して 8x8 ピクセル データのブロックを取得し、離散コサイン変換 (DCT) を使用して変換します。

  3. 事前に計算された量子化行列を使用して、この 8x8 ブロックを量子化します。

  4. 量子化ステップの出力をジグザグ符号化します。だから私は連続した数の証跡を取得する必要があります。

  5. ジグザグ アルゴリズムからの出力をランレングス エンコード (RLE) します。

  6. RLE ステージの後のデータをハフマン符号化します。事前に計算されたハフマン テーブルからの値の置換を使用します。

  7. ステップ 2 に戻り、すべてのチャネル データがエンコードされるまで繰り返します。

  8. ステップ 2 に戻り、チャンネルごとに繰り返します。

最初の質問は、プロセスが機能するために RGBA 値を YUV+A (YCbCr+A) 値に変換する必要があるか、それとも RGBA を使用し続けることができるかということです。RGBA->YUVA 変換は負荷が高く、できれば避けたいのでお願いします。

次の問題。RLE ストアを 0 だけで実行する必要があるのか​​、それとも配列内のすべての値に拡張できるのか疑問に思っています。以下の例を参照してください。

 440000000111 == [2,4][7,0][3,1]   // RLE for all values
 or
 440000000111 == 44[7,0]111        // RLE for 0's only

最後の質問は、ハフマン段階に関して単一のシンボルは何でしょうか? 置き換えられるシンボルは 2 や 4 のような値になるか、シンボルはたとえばランレベル ペア [2,4] になります。

ここで読んで助けてくれてありがとう。私は多くの論文を読み、多くの YouTube ビデオを見てきましたが、個々のアルゴリズムを理解するのに役立ちましたが、それらがすべてリンクしてコード内のエンコード プロセスを形成する方法については理解できませんでした。

4

2 に答える 2

1

1) はい、YUV に変換する必要があります... より高い圧縮率を実現するには、色の大幅な損失を「見逃す」という人間の目の能力を利用する必要があります。通常、Y プレーンを同じ解像度に保ちますが (おそらく A プレーンも)、U プレーンと V プレーンを 2x2 ダウンサンプリングします。たとえば、640x480 を実行している場合、Y は 640x480 で、U および V プレーンは 320x240 です。また、U/V プレーンに異なる量子化を選択することもできます。この変換のコストは、DCT や DFT に比べて小さいです。

2) RLE を実行する必要はありません。直接ハフマン コードを実行できます。

于 2013-01-18T13:28:45.740 に答える
1

(これは MPEG-2 というよりも JPEG に似ているようです。ビデオ形式は、単なる画像圧縮ではなく、フレーム間の違いを圧縮することを目的としています)

YUV ではなく RGB で作業する場合、おそらく同じ圧縮率や品質は得られませんが、必要に応じてそれを行うことができます。色空間変換は、アルゴリズムの残りの部分と比較して、ほとんど負荷がかかりません。

通常、この種のアプリケーションではゼロを RLE します。これは、多くの繰り返しを取得する要素であるためです (また、各ブロックの最後に、単一のマーカー値に置き換えることができる適切な数値も含まれることを願っています)。それほど反復的ではありませんが、他の値の反復を期待する場合は、YMMV だと思います。

はい、ハフマン エンコーディングで RLE ペアを単一のシンボルとしてエンコードできます。

于 2013-01-18T12:03:30.953 に答える