5

イメージ スキャナが 16 ビット ピクセルのストリームを送信し、後でグレースケール イメージにアセンブルする組み込みアプリケーションがあります。このデータをローカルに保存し、ネットワーク インターフェイスに転送する必要があるため、データ ストリームを圧縮して、必要なストレージ スペースとネットワーク帯域幅を削減したいと考えています。

ピクセル データを可逆圧縮するために使用できる簡単なアルゴリズムはありますか?

最初に、連続する 2 つのピクセルの差を計算し、この差をハフマン コードでエンコードすることを考えました。残念ながら、ピクセルは符号なしの 16 ビット量であるため、差は -65535 .. +65535 の範囲のどこかにある可能性があり、コードワードの長さが巨大になる可能性があります。非常に長いコードワードが連続して発生すると、バッファ オーバーフローの問題が発生します。

更新: 私のプラットフォームは FPGA です

4

6 に答える 6

8

PNGは、標準ツールを使用して、標準フォーマットでオープンソースの無損失画像圧縮を無料で提供します。PNG はzlib圧縮の一部として使用します。もありlibpngます。使用しているプラ​​ットフォームが非常に特殊でない限り、このコードを移植するのは難しくありません。

于 2010-04-14T01:08:43.530 に答える
3

さまざまな画像圧縮ライブラリが利用可能です。たとえば、このページには、PNG 画像用のライブラリ/ツールキットのみがリストされています。どの形式/ライブラリが最適に機能するかは、作業している特定のリソースの制約 (特に、組み込みシステムが浮動小数点演算を実行できるかどうか) によって異なります。

于 2010-04-14T01:39:48.973 に答える
3

組み込みプラットフォームで利用できるリソースはいくつありますか?

zlibを移植して gzip 圧縮を行うことはできますか? リソースが限られていても、 LZ77 や LZ88などを移植できるはずです。

于 2010-04-13T14:59:54.127 に答える
2

無損失圧縮の目標は、前のピクセルに基づいて次のピクセルを予測し、予測とピクセルの実際の値との差をエンコードできるようにすることです。これは最初に考えたことですが、前の 1 つのピクセルのみを使用して、次のピクセルが同じであると予測していました。

前のピクセルがすべてある場合は、前のピクセルだけよりも関連性の高い情報が得られることに注意してください。つまり、X の値を予測しようとしている場合は、O ピクセルを使用する必要があります。

..OOO...
..OX

また、次の状況では、ストリーム内の前のピクセル B を使用して X を予測したくないでしょう。

OO...B <-- 行の終わり
X <- 次の行の開始

代わりに、O に基づいて予測を行います。

于 2010-04-16T19:13:24.090 に答える
1

どのくらい「ロスレス」が必要ですか?
これが実際のスキャナの場合、帯域幅/解像度に制限があるため、+/-64K の値を送信できたとしても、隣接するピクセルが 8 ビット以上の差を持つことは物理的ではない可能性があります。

その場合、各行の開始ピクセル値を実行してから、各ピクセル間の差を実行できます。

これによりピークがぼやけますが、「N」ビットを超えるピークはノイズである可能性があります。

于 2010-04-16T19:17:35.237 に答える
1

ベルと wwhistle を備えた優れた LZ77/RLE ハイブリッドは、非常に迅速に解凍できる素晴らしい圧縮を得ることができます。また、ライブラリのオーバーヘッドがないため、小さなファイルではより大きく、より悪いコンプレッサーになります。これの良い、しかしGPLdの実装については、PUCrunchをチェックしてください

于 2010-04-20T01:06:02.873 に答える