JPEG サイズを 8px または 16px の倍数にすることで、品質、ファイル サイズ、またはその他の利点はありますか?

StackOverflow https://stackoverflow.com/questions/74892

質問

JPEG 圧縮エンコード プロセスは、特定の画像を 8x8 ピクセルのブロックに分割し、将来の非可逆圧縮および可逆圧縮でこれらのブロックを処理します。 [ソース]

また、画像が複数の 1MCU ブロック (最小符号化単位として定義され、「通常は両方向に 16 ピクセル」) である場合、JPEG へのロスレス変更を実行できることにも言及されています。 [ソース]

製品画像を扱っているのですが、最終的な画像サイズに 16 の倍数を使用する場合 (たとえば、サイズ 480 ピクセル x 360 ピクセルの画像を使用する場合) と、16 の倍数以外 (484x362 など)。この例では、最終イメージのさらなる変更、編集、または再圧縮には興味がありません。

大部分が一般性があるはずであることがわかっている特定の答えに近づこうとするには、次のようにします。64K で Photoshop で最高品質で保存された 480x360 画像があるとします。 [例]:

  • 484x362 の画像から品質が低下することは期待できますか?
  • ファイル サイズの追加はどの程度になると予想されます (この例では、追加のスペースは白いピクセルになります)。
  • 8px グリッドよりも大きくすることによる他のデメリットはありますか?

この特定の例を使用するのは任意であることは承知していますが、非 8 ピクセルのグリッドを破る際にどのレベルの妥協点に対処する必要があるのか​​を理解するためには (私や、おそらく画像サイズを検討している他の人にとって) 役に立ちます。

ここでの重要な問題は、8 ピクセルで割り切れる画像が 8 ピクセルで割り切れない画像よりも高画質であるかどうかという、私が行った議論です。

役に立ちましたか?

解決

8 ピクセルがカットオフです。その理由は、JPEG 画像は単に 8x8 DCT ブロックの配列であるためです。画像解像度が両方向とも mod8 でない場合、エンコーダーは次の mod8 解像度まで側面をパディングする必要があります。実際には、これはビット単位でそれほど高価ではありません。さらに問題なのは、画像にブロック境界にない鋭い黒い線がある場合 (レターボックス画像など) です。これはビデオエンコーディングにおいて特に問題となります。これが問題となる理由は、鋭い線の周波数変換が係数のガウス分布であるため、コード化するビット数が膨大になるためです。

興味のある方のために説明すると、イントラ圧縮 (JPEG 画像など) でエッジをパディングする最も一般的な方法は、エッジの前のピクセルのラインをミラーリングすることです。たとえば、3 行をパディングする必要があり、行 X がエッジである場合、行 X+1 は行 X と等しく、行 X+2 は行 X-1 と等しく、行 X+3 は行 X- と等しくなります。 2.これにより、余分なラインの変換係数のコストが非常に効果的に最小限に抑えられます。

ただし、インターコーディングでは、ビデオ圧縮などのインター圧縮ではミラー方式がうまく機能しないため、パディング アルゴリズムは通常、最後のラインを単純に複製します。

他のヒント

サブサンプリングのために、8 ピクセル境界ではなく 16 ピクセル境界を使用する必要がある場合があります。2 番目のピクセルはエンコード プロセス中に破棄され、これらの 8x8 DCT ブロックは 16x16 として開始され、デコードされて 16x16 に戻されます。最高品質設定では問題ありません。

画像のサイズが 8 または 16 の倍数であることは、ディスク上のサイズにあまり影響しませんが、繰り返しパターンがある場合や、視覚的なコンテンツを 8x8 ピクセルのグリッドに揃えることができれば、劇的な節約が可能になります。画像のテクスチャです。

サイズが 8 の倍数の JPG も、品質を損なうことなく回転/反転できます。たとえば、gthumb は Linux 上でこれを行うことができます。

トメツキー 言った。正しい倍数がない場合、可逆反転および回転アルゴリズムは機能しません。これは、無視しても安全な右/下のパディングが、無視できない左/上になってしまうためです。

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