画像比較 with perceptualdiff

Appiumなどを始めとするテストツールでは、UIの表示確認にスクリーンショットを撮影してから、期待結果とそれらを比較する、という方法が多くとられているかと思います。

そのとき使う画像比較ツールに関してのメモとなります。

私が画像比較に求めた内容は以下です。

  1. ずれが検出された場合、人の目視による確認が良い
    • すべてを機械に任せない。機械には一致/不一致のみの判定のみさせ、不一致のみ人が確認する。
  2. より単純に比較を行いたい
    • 多機能で重いツールよりも、単機能で軽いツールを使いたい
  3. コマンドラインで、複数の開発環境共通して使える

インストール

homebrewを使い、Macにperceptualdiffをインストールします。

$ brew install perceptualdiff

使用例

例えば、sample.pngとsample2.pngを比較する場合、以下コマンドにより比較することができます。
※比較はピクセル単位で行われます。

$ perceptualdiff -threshold 3000 sample.png sample2.png

PASSの場合、標準出力には何も出ません。FAILの場合、何pixel差異があるのか、ということが標準出力に表示されます。
-thresholdオプションは、PASSとFAILの閾値を指定するためのオプションです。上記の例では、3000pixelを境とし、以下ならPASS、3000pixelよりも差異が大きいならFAILとします。

詳細モード(verboseオプションあり)を指定することで、処理の内容を見ることもできます。
他のオプション要素に関しては、-hオプションの出力をご確認ください。

$ perceptualdiff -h

閾値を3000pixelとした場合

$ perceptualdiff -verbose -threshold 3000 sample.png sample2.png
Field of view is 45.000000 degrees
Threshold pixels is 3000 pixels
The Gamma is 2.200000
The Display's luminance is 100.000000 candela per meter squared
Converting RGB to XYZ
Constructing Laplacian Pyramids
Performing test
PASS: Images are perceptually indistinguishable
2186 pixels are different

閾値を1000pixelとした場合

$ perceptualdiff -verbose -threshold 1000 sample.png sample2.png
Field of view is 45.000000 degrees
Threshold pixels is 1000 pixels
The Gamma is 2.200000
The Display's luminance is 100.000000 candela per meter squared
Converting RGB to XYZ
Constructing Laplacian Pyramids
Performing test
FAIL: Images are visibly different
2186 pixels are different

imagemagickにおいても同様の検出方法になっていた一方、imagemagickは多機能で重かったので、個人的にはperceptualdiffのほうが使い易いです。

一方、画像の比較領域を限定する等が必要な場合、imagemagickにて加工した後にpdifにかける等すれば良いのかなと思います。

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.