Guetzli検証(その5) - 写真以外の画像編

 これまではguetzliの入力画像として写真データを用いてきましたが、本投稿では写真以外の画像データで検証を行います。また、定性的な評価のみならず、定量的な評価も行います。
 

はじめに

  • これまでの検証ではguetzliが有効と言えるサンプルが無く、どんな画像ならlibjpegより小さいか高画質が達成できるのか明らかにしたい
  • 激烈にパフォーマンスが悪いことはこれまでの検証で明らかなため、所要時間は測定しない
  • 圧縮率は出力画像サイズを元画像サイズで除した値とする(小さい値ほど高圧縮率)
  • エンコード後の画像と元画像との差分について、エントロピー、平均値、最大値を評価し、画質についての定量的な評価を行う

Test Data: Screen Shot (PC small dialog)

Application error dialog of WerFault.exe

Input Data Spec
Resolution
482x165
Bit depth
8bit
Color space
sRGB
Compression
ZIP
Result
Condition Size [Bytes] CompressionRatio Entropy of difference Mean of difference Max of difference
original PNG 7,553 100% - - -
guetzli Q84 24,739 328% 0.228286 258.052 36237
guetzli Q100 43,924 582% 0.121733 18.6327 5654
libjpeg Q84 14,210 188% 0.330291 824.776 40606
libjpeg Q100 44,728 592% 0.117031 10.805 1028
Consideration
  • PNGのままが一番小さく、JPEG化する意味が無い。

 

Test Data: Screen Shot (PC medium dialog)

Zenfone 3 Bluetooth Services dialog

Input Data Spec
Resolution
465x574
Bit depth
8bit
Color space
sRGB
Result
Condition Size [Bytes] CompressionRatio Entropy of difference Mean of difference Max of difference
original PNG 11,826 100% - - -
guetzli Q84 41,212 348% 0.173277 173.501 35209
guetzli Q100 78,635 665% 0.0817355 6.97055 1028
libjpeg Q84 25,394 215% 0.223223 429.799 34181
libjpeg Q100 79,058 669% 0.0712689 5.38406 771
Consideration
  • PNGのままが一番小さく、JPEG化する意味が無い。

 

Test Data: Screen Shot (Android)

Screen shot of Android smartphone

Input Data Spec
Resolution
720x1280
Bit depth
8bit
Color space
sRGB
Result
Condition Size [Bytes] CompressionRatio Entropy of difference Mean of difference Max of difference
original PNG 155,121 100% - - -
guetzli Q84 123,757 80% 0.361009 401.834 19532
guetzli Q100 226,399 146% 0.410174 118.969 2056
libjpeg Q84 116,859 75% 0.370609 386.882 29555
libjpeg Q100 351,144 226% 0.404799 80.8539 1285
Consideration
  • Qualityを落とせばオリジナルよりサイズが小さくなる。
  • Quality 84同士の比較ではlibjpegの方が高圧縮率を達成し、差分の平均値も小さい。差分のエントロピーはguetzliの方が小さく、最大値もguetzliの方が小さい。
  • Quality 84同士を目視確認する限りでは顕著な画質差異は感じられないが、libjpegの方がBluetoothロゴが僅かにボケている感じを受ける。
    crop image of guetzli(Q84)
    crop image of libjpeg(Q84)

 

Test Data: Graph (plot)

Magnitude timeline

Input Data Spec
Resolution
660x660
Bit depth
8bit
Color space
sRGB
Result
Condition Size [Bytes] CompressionRatio Entropy of difference Mean of difference Max of difference
original PNG 15,127 100% - - -
guetzli Q84 146,756 970% -1.#IND 372.867 65535
guetzli Q100 292,826 1936% 0.082529 15.2432 10794
libjpeg Q84 105,573 698% -1.#IND 482.193 65535
libjpeg Q100 294,624 1948% 0.128855 10.6173 771
Consideration
  • PNGのままが一番小さく、JPEG化する意味が無い。

 

Test Data: Logo

logo image
けものフレンズ ロゴジェネレータを使用しています。

Input Data Spec
Resolution
510x350
Bit depth
8bit
Color space
sRGB
Result
Condition Size [Bytes] CompressionRatio Entropy of difference Mean of difference Max of difference
original PNG 70,404 100% - - -
guetzli Q84 29,180 41% -1.#IND 433.499 65535
guetzli Q100 57,373 81% -1.#IND 271.489 65535
libjpeg Q84 26,275 37% -1.#IND 503.821 65535
libjpeg Q100 80,050 114% -1.#IND 200.869 65535
Consideration
  • オリジナルのPNGはアルファチャネル付き透過PNGであるが、(libjpeg/guetzliに依らず)JPEG化のためアルファ情報は失われる。
  • Quality 100同士の比較ではguetzliが有意に高圧縮率を達成しているが、差分の平均値はlibjpegより大きいことから、定量的には画質劣化も大きいと判断できる。
  • Quality 100同士を目視確認すると画質差異は全く感じられないが、差分画像を参照するとそれぞれエッジ部分が変化していることが判る。crop image of guetzli(Q100)crop image of libjpeg(Q100)
  • Quality 84同士の比較では転じてlibjpegの方が高圧縮率を達成するが、差分の平均値はguetzliの方が小さく、画質劣化はguetzliの方が定量的に少ないと判断できる。
  • 元も子もない話だが、オリジナルのPNGをzlib圧縮レベル9でアダプティブフィルタを指定してPNGファイルのまま可逆圧縮すると56,678byteに圧縮できた。このファイルサイズと比較すると、Quality 100ではguetzliもlibjpegもオリジナルよりファイルサイズが増えており、JPEG化する意味が無い。

 

まとめ

 これまでの検証も踏まえると、写真や細かい文字や図表を含む画像においては、guetzliを使う理由は見当たりません。
 ですが、guetzliが有効かもしれないと思えるサンプルが今回初めて見つかりました。LogoサンプルのQ100の場合のみですが。とは言え、PNG自体を適切に可逆圧縮した方が小さくなるというデータパターンでしたので、やはり積極的にguetzliを導入する理由が見当たりません。
 それでもこの画像の特性を他の画像と比較すると、グラデーションや中間色が無く、細かいテクスチャも無く、単色のベタ塗り領域が大きい画像といった特徴になるかと思います。このような画像の場合にはguetzliが効果を発揮するのかもしれないですね(同時にハフマン圧縮やzlib圧縮の効果が出やすいパターンであり、PNG自体を圧縮することを試みた方が良さそうでもあります。PNG圧縮についてはこちらに記載しています)。
 



以上。