質問

Iイメージスキャナが後グレースケール画像に組み立てられる16ビットピクセルのストリームを送出する埋め込みアプリケーションを有しています。私はローカルでこのセーブデータの両方に必要なネットワークインタフェースに転送したように、私は必要なストレージ容量とネットワーク帯域幅を削減するために、データ・ストリームを圧縮したいと思います。

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

私は、最初の2つの連続したピクセル間の差を計算した後、ハフマン符号を用いて、この差を符号化すると考えます。残念ながら、画素は差分が範囲-65535 .. 65535のどこにでもできるように、符号なし16ビット量は、その潜在的に巨大な符号語の長さをもたらします。いくつかの本当に長いコードワードが行で発生した場合、私は、バッファオーバーフローの問題に実行されます。

アップデート:私のプラットフォームは、FPGAである

役に立ちましたか?

解決

PNG の標準を使用して、標準形式でフリー、オープンソース、可逆画像圧縮を提供ツール。 PNGは、その圧縮の一環としてzlibを使用しています。 libpngもあります。お使いのプラットフォームには、の非常にの珍しい、それはそれにハードポートに、このコードではありません。

でない限り

他のヒント

どのように多くのリソースにあなたの組み込みプラットフォーム上で利用可能なのですか?

あなたはポート zlibのの可能性があり、gzipで圧縮していますか?でも、限られたリソースで、あなたはかのようなポートのものにできるはずですLZ88するます。

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

は、可逆圧縮の目標は、前のピクセルに基づいて、次の画素を予測すること、及びその後、あなたの予測画素の実際の値との差を符号化することができることです。これは、あなたが最初の考えをどうするかですが、一つだけ、前のピクセルを使用し、次の画素が同じになるという予測を作っていた。

以前のすべてのピクセルを持っている場合、あなただけの前のピクセルよりも多くの関連情報を持っていることに留意してください。あなたはXの値を予測しようとしている場合つまり、あなたがOのピクセルを使用する必要があります:

.. OOO ...
..OX

また、あなたは以下の状況でXを予測する流れの中、前のピクセル、Bを使用したいとは思わないでしょう。

OO ... B < - 行の終わり
X < - 次の行の最初

その代わりに、OS上で、あなたの予測のベースになるだろう。

どのように「ロスレス」あなたが必要なのでしょうか?
これは実際のスキャナである場合、帯域幅/分解能に限界がそうあることが+/- 64Kの値を送信することができる場合であっても、隣接する画素が複数言うよりも8ビットの差を有することが非物理的であってもよい。

あなたは、各行の開始画素値を行い、その後、各画素間の差分を行うことができ、その場合には、

これはピークを不鮮明になりますが、それは任意のピークがよりN'bits」よりとにかくノイズであることを。

かもしれ

ベルやwwhistlesとの良好なLZ77 / RLEハイブリッドはかなり速い解凍にある素晴らしい圧縮を得ることができます。彼らはまた、ライブラリーのオーバーヘッドが不足しているため、小さなファイルにbadderコンプレッサー大きくなります。良いが、これのGPLdのimplentationについては、 PUCrunch の<チェックアウト/ P>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top