2013-03-07 36 views
5

複数のJPEG画像を1つの大きな画像としてまとめて保存する際に、保存容量を減らすという問題を検討しています。基本的な直感は、画像が(同じ場所または同じ時点で撮影されたもののような)類似点を持つ傾向があり、この類似性を利用して空間を節約できるかどうかです。JPEG画像圧縮

全体的な流れは以下のとおりです。入力JPG画像 - >似たRGBタイルを一緒に再編成 - - >再びJPG形式に変換>各画像はRGB画像タイルに変換します。当然、画像を取り込むときには、の逆処理が必要になります。

タイル再構成の類似度としてY成分のDC係数を使用して、10画像に対して約8%のスペース節約を得ました。私が100枚の画像に対してこれを行うと、節約は約3%に減少します。

  • タイル再編成後の節約、つまりJPEGエンコード処理のどの部分がこの画像タイルの再編成を利用するのですか?

    は、他のいくつかのあります:代わりにY成分のDC係数の

  • 、あなたがそれについて考えることができ、いくつかの他のメトリックより良い


改訂JPEGエンコードによって悪用されますがあります JPG以外の画像フォーマットは、この種の類似性を利用することができます複数の画像を集約するとより良いですか?例えばPNGのように?これは可能でしょうが - あなたは次の画像の縁が無い不連続と完全に一致する場合は特に(お互いに類似の領域を置くとき、

まず:あなたがメリットが表示されますどこ

答えて

5

エンコードにはおそらくJFIFを使用しています。

このメソッドがどのように機能するのかよくわかりません。私が正しく理解していれば、イメージをタイルに分割し、それらを1つのメガイメージに集約します。類似のタイルはお互いに近接して配置されます。

AFAIK、JPEG実装では、マクロブロックと呼ばれる画像内の個々の8x8タイルごとに個別のDCTを実行します。言い換えれば、JPEGは、隣接するマクロブロック間のコヒーレンスを利用することはできません(これは、圧縮技術の基本的な仮定のようです)。

タイルがマクロブロックより大きい場合、イメージヘッダー領域の節約以上の改善は見られません。

例:JPGイメージヘッダー10個を1に置き換えると、スペースが90%節約されますが、ヘッダーにはのみが含まれます。ファイル全体を見ると、ヘッダーはファイル全体の小さな部分なので、スペースを節約するのは貧弱です。 100個のイメージヘッダーを1つ置き換えると、99%が保存されますが、ヘッダーにのみが再度保存されます。どちらの場合も、すべてのマクロブロックは以前と同じようにエンコードされ、正確に保存されます。

+0

ありがとう、それはたくさんの意味があります!私は、libjpegを使ってエンコードとデコードを行います。 JPEGは8×8マクロブロック内でDCTを行うので、タイル間の類似度(マクロブロックよりも大きい)はおそらくあまり役​​に立ちません。しかし、私は、隣接するマクロブロックのDCT係数が比較的に符号化されていると思います。これは、このタイルの再編成によってある程度向上する可能性があります。私は私の質問を改訂しました。どうぞご覧ください。 – user655617

+0

うれしいことを明確にするのに役立ちます。はい、libjpegはJPEG規格のIJGのリファレンスJFIF実装です。デルタエンコーディング(隣接マクロブロックの間で)を使用してDCT係数を覚えていません。 AFAIRでは、すべてのマクロブロックが係数の単一の8x8マトリックスになり、デシメーションされます(これを保存するために必要なビット数を減らすために分割されます)。これは損失圧縮の「損失」が発生する場所です) -zagファッション。この順序付けにより、0の長いランが生成されます。これは、ランレングスエンコーディングによって効率的に圧縮されます(17の0を格納する代わりに、17,0を格納します)。 –

2

二つの領域があります。非常にまれである)、jpegアルゴリズムのDCT(周波数空間)部分は、大きな領域の近似と複数のより小さな領域との間の誤差を調べることによって、より多くのローカライゼーション修正を行うことができます。

あなたの画像が非常にであるか、または非常に小さい(そのエッジに比例して長くなるように)限り、この効果は小さいと思われます。同じビットパターンがトークン複数のサブ画像に現れる、と同一の(短い)で圧縮されるので、第二

、JPEG圧縮のHuffman coding一部)の利益を見ることができます。

この画像は、同じ画像内にある限り、画像をどのように配置するかには依存しません。

+0

ありがとうございました!私はあなたの最初の部分については分かりません。しかし、私は、ハフマンコーディングがこれを悪用して、最終的な出力を複数の画像に分割して、それぞれが類似のタイルで分割すると思っています。しかし、私はそれが私が得るスペース節約を説明するとは思わない。私は私の質問を言い換えました - 一度見てください。 – user655617