2016-05-11 8 views
0

私は現在、非常に単純な画像をさらに圧縮しようとしています。画像は2セットの色と1ピクセルの "ピクセル"を使用します。色の各セットは16のオプションのうちの1つであってもよい。このため、私は既に、両方の色を両方とも表す1ピクセルあたり1バイトにまとめました。私は既にRLEを支援するためにMTFとBWTエンコーディングメソッドを実装しました。私はそれよりいくつかの圧縮を得ることができますが、私はどのアルゴリズムを使用するかわからない肯定的です。私はハフマンを試しましたが、画像がすでに小さい傾向があり、エントロピーの欠如のためにRLEがほとんど圧縮しているため、ハーフマンはファイルのデコードテーブルを追加することによってサイズを増やします。これは遅いシステムでも実行されるので、本当に重いアルゴリズムも動作しないことに注意してください。低エントロピー画像のための良い圧縮アルゴリズム

+0

カスタムメイドの圧縮アルゴリズムを使用していますか?非常にユースケース固有の問題のようです。 – apokryfos

+0

これはオプションである可能性がありますが、実際にはこのためのカスタムアルゴリズムを実際に作成する専門知識はありません。 – HDeffo

+0

私は "2セットの色を使用する"とは理解していません - それぞれのピクセルが2つの色を持っていることを意味しますか?または、各ピクセルは、セット#1またはセット#2(合計で32個の可能性がある)のいずれかである単一の色を有するか?後者の場合、1バイトの代わりに5ビットしか必要ありません。 –

答えて

1

まず、背景と文字のカラー画像を別々に圧縮する必要があるようです。次に、「色があまりにも頻繁にピクセルからピクセルに変わることはありません」と言います。いくつかの色は他の色よりも「近い」色ですか?すなわち、色xから色が変化するとき、残りの色の小さな部分集合に変化する可能性がより高いか?そうであれば、変更する可能性の高いものに近い色にマップし、コーディングする前に差をとることができます。その後、同じ色のランが0のランとなり、「次の」色への変化が1になります。

実行回数が多く、バイト値の発生確率が歪んだ一連のバイトとして適切な表現ができたら、たとえば、次のようになります。 zlibとgzipを適用して、明らかな冗長性とスキューを利用してください。

+0

両方の色を別々に圧縮する理由を説明できますか?限り、私はそれらを一緒に組み合わせることができます私は主要なアルゴリズムを試みる前に少なくとも50%の圧縮率を約束します – HDeffo

+0

私は画像を見ていないが、説明 "背景"と "文字"から、彼らは相関しないと思う。それらが相関していない場合、圧縮は混合されたものとは別により効果的になります。バイトへのパッキングに関しては、それがzlibのためのものです。 0..15の値だけを含むバイトシーケンスは、zlibによってバイトあたり約4ビットに圧縮されます。 –

+0

それは無相関ではありません。 「文字」は、各ピクセルに「背景」を重ね合わせます。それぞれ16文字の1文字にすることができるためです。これは最大で15ビットまたは1111ビットであるため、最大11111111バイトまたは1バイトであることができます。これらは両方とも一緒に変化する傾向があるので、現在のRLEメソッドを少しでも節約できます。残念ながらzlibの場合は、現在の圧縮方法が実装されていないプラットフォームでこれをやっているので、私はすべてを実装したり再実装しなければなりません。 – HDeffo