ランレングスコーディング

ランレングスエンコーディング

ランレングス符号化 (RLC) は、ランレングス符号化、ランレングス符号化、可変長符号化などとも呼ばれ、統計符号化の一種です。主な手法は、ビットまたは文字の繰り返しシーケンスを検出し、それらが出現した回数に置き換えることです。バイナリ画像のエンコードには適していますが、日常生活の写真などの連続階調画像の圧縮には適していません。より良い圧縮結果を達成するために、ランレングス エンコードが他のエンコード方法と混合されることがあります。

このエンコードは可逆圧縮エンコードであり、ラスター データ圧縮の重要なエンコード方法です。バイナリ イメージに有効です。この圧縮符号化技術は非常に直感的で経済的であり、操作が非常に簡単であるため、解凍速度が非常に高速です。RLE 圧縮エンコーディングは、コンピュータで生成されたグラフィックス イメージに特に適しており、ストレージ容量の削減に非常に効果的です。

RLC の基本原理は、同じ値を持つ連続するシンボルをシンボル値または文字列の長さに置き換えることです (連続したシンボルは連続した「ラン」を構成します。ランレングス符号化はこれにちなんで命名されています)。これにより、シンボルの長さが長さよりも短くなります。元のデータの長さ。

基本的な紹介

ランレングス符号化は、同じ値が連続する文字列を代表値と文字列長に置き換えるという比較的単純な符号化技術です。たとえば、文字列「aaabccdddddd」があり、ランレングス エンコード後は「3a1b2c5d」で表すことができます。画像符号化では、特定の方向に同じグレー値を持つ隣接するピクセルをラウンドとして定義でき、その継続長は連続ランと呼ばれ、ランまたはランと呼ばれます。たとえば、同じグレースケール N を持つ水平方向に M 個のピクセルの文字列がある場合、ランレングス エンコード後、M 個のグレースケール値 N を置き換えるために 2 つの値 (N, M) だけを渡すことができます。 M ピクセルの。

このモードでは、2 バイトごとに情報単位が形成されます。最初のバイトは、それに続くピクセル数を示します。2 番目のバイトは、これらのピクセルによって使用されるカラー インデックス テーブルへのインデックスを与えます。例: 情報ユニット 03 04、03 は後続のピクセルの数が 3 であることを示し、04 はこれらのピクセルがカラー インデックス テーブルの 5 番目の項目の値を使用することを示します。圧縮データを展開すると、04 04 04 になります。同様に、04 05 を 05 05 05 05 に展開することもできます。情報単位の最初のバイトが 00 になることもあります。この場合、情報単位は存在しません。はデータ単位を表しますが、何らかの特別な意味を表します。これらの意味は通常、情報単位の 2 番目のバイトの値によって説明されます。
ランレングス符号化は伝送エラーに非常に敏感です。シンボルの 1 つでエラーが発生すると、符号化シーケンス全体の正確さに影響し、ランレングス符号化では元のデータを復元できなくなります。そのため、行同期と列同期方法は通常、行と列内でエラーを制御するために使用されます。

例1

例: 5555557777733322221111111。ストロークのエンコーディングは次のとおりです: (5, 6) (7, 5) (3, 3) (2, 4) (l, 7)。ランレングス エンコーディングの桁数は、元の文字列の桁数よりもはるかに少ないことがわかります。

例 2

画像データを符号化する際、一定方向に並んだ同じ階調値を持つ画素を連続した記号とみなすことができ、この連続した記号を単語列に置き換えることでデータ量を大幅に削減できます。ランレングス符号化は連続的で正確な符号化です。送信プロセス中にシンボルの 1 つでエラーが発生すると、符号化シーケンス全体に影響があり、ランレングス符号化では元のデータを復元できなくなります。

ここに画像の説明を挿入します

上に示したラスター データの場合、次のランレングス エンコーディングを行方向に沿って実行できます: (9,4)、(0,4)、(9,3)、(0,5)、(0,1)( 9,2)、(0,1)、(7,2)、(0,2)、(0,4)、(7,2)、(0,2)、(0,4)、(7、 4)、(0,4)、(7,4)、(0,4)、(7,4)、(0,4)、(7,4)。ランレングス符号化ではデータを表すのに 40 個の整数しか使用しませんが、前述の直接符号化を使用すると、それを表すのに 64 個の整数が必要となり、ランレングス符号化がデータを圧縮するのは非常に効果的かつ簡単であることがわかります。実際、圧縮率はグラフの複雑さに反比例します。変更が多い部分では実行数が多くなり、変更が少ない部分では実行数が少なくなります。グラフが単純であればあるほど、圧縮率は高くなります。圧縮効率。

ラスター暗号化にランレングス符号化を使用すると、データ量があまり増加せず、圧縮効率が高く、検索、重ね合わせ、結合などが容易で、操作が簡単で記憶容量の少ないマシンに適しています。複雑さを避けながら圧縮する必要がある大量のデータのエンコードおよびデコード操作により、処理時間と操作時間が増加します。

ランレングスコーディングが適用されるシナリオ

アルゴリズムの基本的な考え方は、繰り返される連続した文字を圧縮し、より短い方法で記述することです。この方法はコリオリの複雑さに基づいています。それで、コリオリの複雑とは何ですか? たとえば、 3 つの文字列があり、その長さはすべて 100 です, 最初のものは 100 個の A、2 番目のものは 99 個の A と 1 個の B、そして 3 番目のものは 100 個の完全にランダムな文字です。可能な限り短い言語で記述しようとします。元の文字列については、最初の文字列を説明するときに、 「これは 100 個の A です」と言うことができ、2 番目の文字列を説明するときは「これは 99 個の A で、次に B です」と言うことができますが、3 番目の文字列を説明するときは何と言えばよいでしょうか? 「これはランダムな100文字だ」と考えるのが簡単で問題なさそうですが、ここでより重要なのは、記述情報がそのような条件を満たしている必要があり、文字列の記述が別途与えられている場合です。 , 説明に基づいて復元できます。元の文字列の内容によると、100 A と 99 A、その後に B は問題ありませんが、100 個のランダムな文字は一般的すぎて明らかに受け入れられません。この説明情報の長さは次のとおりです。この例では、最初のコリオリ複雑度が最も小さく、次に 2 番目、3 番目のものが順に続きます。

では、さまざまな状況下でこのエンコーディングはどのような影響を与えるのでしょうか? 連続出現数を記述するのに 1 バイトの固定長が使用され、1 文字が 1 バイトを占める場合、記述するのに必要なスペース (連続出現数、特定の文字) は 2 バイトですが、連続出現数が 2 より大きい限り、スペースを節約できます。たとえば、AAA は 3 バイトを占有し、エンコード (3,A) は 2 バイトを占有し、これにより 1 バイトのスペースを節約できます。連続して出現する回数が多いほど、圧縮効果が高まり、保存される領域が大きくなることがわかります。文字をエンコードすることで節約できる領域は、 = 連続出現数 - 2 となります。 AA が 2 バイトを占有し、エンコードは (2,A) であり、依然として 2 バイトを占有しているなど、連続出現数が 2 に等しい場合に占有されるスペースが変化していないことは容易に推測できます。エンコードするリソースが無駄になります。しかし、スペース節約の効果は得られません。さらに悪い状況は、連続出現数が常に 1 であることです。このとき、圧力はますます大きくなります。たとえば、A は 1 バイトを占有し、エンコーディングは (1, A) で、元のファイルより 1 バイト多い 2 バイトを占有します。この状況は非常に悲惨です。1M のファイルが一度に 2M に圧縮される可能性があります (効果は本当に素晴らしいです)。これは、ファイルの各バイトの前に余分なバイト 0X01 を挿入するのと同じであり (このバイトは連続発生を示します。次数は 1)、この状況はランレングス コーディングが適切ではないことを示します。実際、ほとんどのデータの特性は 3 番目の状況に属し、ランレングス符号化は適していません。

おすすめ

転載: blog.csdn.net/ProgramNovice/article/details/128159362