2010-12-30 3 views
4

ねえ、私はpngquantというプログラムを使って24ビットPNGを8ビットPNGに変換しています。すべてがうまくいくように見えますが、あまりにも多くの色が含まれていないアイコンやその他の画像の品質が低下することはありません。今では色数が多いPNG写真をフィードすると、品質の低下が見られるPNG8が生成されます。PNG24に変換されたPNG24が無損失であるかどうかを確認するにはどうすればよいですか?

プログラムで品質低下を判断したいと思います。私はPNG24をPNG8に変換するのが安全かどうかを知りたいです。 Webpagetest.orgの機能 - PNG8に変換して品質を落とさない限り、この特定の画像のサイズが小さくなることを伝えます。

アイデア?

ありがとうございました。

+0

256ピクセル(つまり16x16)未満のものは、無損失で256色に変換できます。 –

答えて

2

かなり単純です。 PNG24からPNG8に変換する画像が256色以上ある場合は、品質が低下します。私は何かを逃したのですか?

+0

256色以上の色がある場合、品質の低下が起こることは間違いありません。ただし、画像の内容によっては品質の低下の程度が異なります(たとえば、ピクセルの色が量子化されるほど、品質の低下が顕著になります)。 – misha

+0

私はあなたに同意します。しかし、「PNG8に変換して品質を落とさない限り、この特定の画像はサイズが小さくなる」との質問があります。それにタイトルに "ロスレス"の外観を付け加えてください。私はOPが "許容可能な"品質の損失ではなく、全く品質の低下があるかどうかを知りたいと確信しています。 Btw、あなたの答えとリンクは非常に興味深いです。 –

+0

ああ、そうだ。私は少し急いで、タイトルのロスレスビットを逃した。ありがとう。 – misha

3

これは完全な参照image quality assessmentの問題のようです。

これに最も簡単な方法は、PSNRをPNG24とPNG8の画像の間で計算することです。これは、2つの画像の差の尺度です。 PSNRが高いほど、画像の差は小さくなります。カラー量子化ソフトウェアを使用した後、PSNRがある閾値を上回っているかどうか(経験的に判断しなければならない)を確認し、そうであれば量子化が「安全」であることを確認します。

PSNRは、人間の視覚システムがどのように動作するかに常に対応しているわけではないという事実(例えば、空間的およびコントラストのマスキング現象を無視する)があります。別のメトリックSSIMは、この問題を処理しようとしますが、計算するのが少し難しいです(ただし、OpenCV implementationです)。上記で説明したスレッショルドアプローチでは、PSNRの代わりにSSIMを使用できます。

ここには役に立つと思われるanother threadがあります。

0

私はmy own SSIMツールを使用していますが、OpenCVベースのツールはガンマ補正やアルファチャンネルを正しくサポートしていないようです。

pngquant -vを実行すると、MSE=nというエラーが出力されます(nは平均平方誤差 - 0は完全な品質です)。

最新バージョンは、最小必要品質を設定できるように、--quality設定があります。それを達成できない場合は、ファイルを保存しません。