---
title: ImageMagick内部入門第十五回、画像比較
tags:  #imagemagick  
author: [よや](https://convert.docswell.com/user/yoya)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/L73RPRMGJ5.jpg?width=480
description: ImageMagick内部入門第十五回、画像比較 by よや
published: March 22, 24
canonical: https://convert.docswell.com/s/yoya/KJLDVN-imagemagick-15
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/L73RPRMGJ5.jpg)

ImageMagick 内部入門
第十五回 (compare 〜 画像比較)
2024/03/22(金) “よや” &lt;yoya@awm.jp&gt;


# Page. 2

![Page Image](https://bcdn.docswell.com/page/87DYLY6N7G.jpg)

内部入門シリーズ
•
(第一回) 全体構成
•
(第二回) データ構造
•
(第三回) Magick API 〜 MagickWand / MagickCore
•
(第四回) 画像形式処理 〜 Coders と Delegate
•
(第五回) メタデータ
•
(第六回) システム設定 〜 policy.xml 等
•
(第七回) 減色
•
(第八回) ビットdepth 〜 depth 変換
•
(第九回) 2値化 〜 threshold
•
(第十回) ディザリング 〜 組織 (拡散ディザは延期)
•
(第十一回) ICCプロファイル 〜 RGB  CMYK 色空間
•
(第十二回) 色フィルタ
〜 Colorize ColorMatrix
•
(第十三回) 色modulate
〜 modulate (変調)
•
(第十四回) WebP 画像
•
(第十五回) 画像比較
〜 Compare
•
(第十六回) Displace
〜 Displace map
•
(第十七回) 分散処理
〜 OpenMP, distribute-pixel-cache
•
(第N回) 各画像処理 (畳み込み、モルフォロジー)
〜 ImageList, ImageInfo
〜 XMP, Profile
〜 ColorCube
← ☜ 今回の話


# Page. 3

![Page Image](https://bcdn.docswell.com/page/VJP626YNE8.jpg)

目次
• 画像比較とは？
• ImageMagick compare
• 機能概要
• 実装概要
• compare metrics
• AE(absolute error) / MSE
• PSNR
• SSIM
• おまけ (ImageMagick は未実装)
• SSIM 亜種、CW-SSIM
• Butteraugli


# Page. 4

![Page Image](https://bcdn.docswell.com/page/2EV3D3GY7Q.jpg)

画像比較とは
• 主に二つ。
サイゼリアの間違い探し
• 差異を強調表示
• 間違い探し
• 差異(又は類似度)を数値化
• 画質劣化評価
(c) https://www.saizeriya.co.jp/entertainment/


# Page. 5

![Page Image](https://bcdn.docswell.com/page/57G3Y38WJL.jpg)

画像比較 〜 差異の強調
• compare コマンドで差異が取れる
% compare left.png right.png diff1.png
% compare –fuzz 50% left.png right.png diff2.png


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4EQ5M59QJP.jpg)

画像比較 〜 差異の数値化
• compare -metric 〜 で数値化できる
• magick –list metric で一覧表示
• よく使われるのは PSNR と SSIM
% magick -list metric
AE
DSSIM
Fuzz
MAE
MEPP
MSE
NCC
PAE
PHASH
PSNR
RMSE
SSIM


# Page. 7

![Page Image](https://bcdn.docswell.com/page/KJ49V9XY71.jpg)

ImageMagick の compare コマンド機能
• A.png と B.png の差分画像を C.png で生成
• 少しでも差があると表示するので、-fuzz で削っていく
% compare –fuzz 50% A.png B.png C.png
• A.png と B.png の差分を数値化
% compare –metric PSNR A.png B.png NULL:
• 備考。-metric を指定しても一応差分画像が生成されるが
metric を無理した差分画像が出る。NULL: で無視を推奨。
% compare –metric PSNR A.png B.png C.png


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LE1K3KNNJG.jpg)

ImageMagick の compare コマンド機能
• 色を変更できる。デフォルトの赤が苦手な人向け。
% compare –fuzz 50% left.png right.png diff1.png
% compare -define compare:highlight-color=blue \
–fuzz 50% left.png right.png diff2.png


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GEWDPPMMJ2.jpg)

ImageMagick の compare 実装
• ImageMagick/MagickCore/compare.c


# Page. 10

![Page Image](https://bcdn.docswell.com/page/47ZGKKQME3.jpg)

ImageMagick の compare 実装
• 二乗誤差が一定以上の時に色を塗る。 透明度 (Sa,Da)も考慮


# Page. 11

![Page Image](https://bcdn.docswell.com/page/YJ6YQQ657V.jpg)

画像比較 〜 差異の数値化
• compare –metric 指定
% compare –metric AE left.png right.png NULL: ; echo
169316
% compare –metric MSE left.png right.png NULL: ; echo
2235.04 (0.0341045)
% compare –metric PSNR left.png right.png NULL: ; echo
14.6719 (0.146719)
% compare –metric SSIM left.png right.png NULL: ; echo
0.796407


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GJ5GRR6GJ4.jpg)

AE (Absolute Error、絶対値誤差)
• 対応するピクセル輝度の差の絶対値を合計する。(単純な手法)
• 画像サイズが大きいと、値も大きくなる。
% compare –metric AE left.png right.png NULL: ; echo
169316
% magick left.png –sample 200% left2.png
% magick right.png –sample 200% right.png
% compare –metric AE left-2.png right-2.png NULL: ; echo
677264
% expr 169316 \* 4
677264


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LE3RPPQP75.jpg)

MAE (Mean Absolute Error、AE平均)
• 画像サイズで変わらないよう平均をとる。(面積で割る)
% compare –metric MSE left.png right.png NULL: ; echo
2235.04 (0.0341045)
% magick left.png –sample 200% left2.png
% magick right.png –sample 200% right.png
% compare –metric MSE left-2.png right-2.png NULL: ; echo
2235.04 (0.0341045)


# Page. 14

![Page Image](https://bcdn.docswell.com/page/8EDYLL93EG.jpg)

MSE (Mean Square Error、平均二乗誤差)
• 対応するピクセル輝度の差の二乗をとる。
• 絶対値よりは感覚に合う
• 詳細は後述する &gt; p-norm の議論
% compare –metric MSE left.png right.png NULL: ; echo
2235.04 (0.0341045)


# Page. 15

![Page Image](https://bcdn.docswell.com/page/V7P622ZPJ8.jpg)

PSNR (Peak Signal-to-Noize Ratio)
• 逆数に対数をとる (よくある MAX は 255、もしくは 1.0)
% compare –metric PSNR left.png right.png NULL: ; echo
14.6719 (0.146719)
# 同一のときは 0
% compare -metric PSNR left.png left.png NULL: ; echo
0 (0)


# Page. 16

![Page Image](https://bcdn.docswell.com/page/2JV3DDWVEQ.jpg)

SSIM (Structural Similarity Index Measure)
• 処理内容
• Blur をかける
• (重たいので省略する事もある)
• 局所領域をスライドしながら
右の計算を行う
• 領域サイズとスライド幅は
ツールによる。_(┐「ε: )
• それらの平均をスコア値にする
• α,β,γ,c1,c2,c3 は推奨値は
あるが任意の値。
• 結果ツールにより値が異なる。


# Page. 17

![Page Image](https://bcdn.docswell.com/page/5EG3YYD17L.jpg)

SSIM のセールスポイント
• MSE/PSNR vs SSIM の比較画像紹介
• https://qiita.com/yoya/items/510043d836c9f2f0fe2f


# Page. 18

![Page Image](https://bcdn.docswell.com/page/4JQ5MM1N7P.jpg)

おまけ (ImageMagick は未対応)
• n-norm, p-norm
• SSIM いろいろ
• Butteraugli


# Page. 19

![Page Image](https://bcdn.docswell.com/page/K749VVR3E1.jpg)

p-norm もしくは n-norm(ミンコフスキー
ノルム)
• 二乗和は p=2 (の平方根無しバージョン)
• 全体的に均一に劣化する場合は、これで良さそう
• 最大値は p=∞相当
• 特定の場所が劣化する間違い探しはこっち
• n-norm (ミンコフスキーノルム)で
一般化すれば、2〜 の間を
パラメトリックに
トレードオフ調整できる


# Page. 20

![Page Image](https://bcdn.docswell.com/page/LJ1K33QZ7G.jpg)

p-norm もしくは n-norm(ミンコフスキー
ノルム)
• 人の感覚的には p=3 以上 が良さそう。p=2 では足りない
• https://twitter.com/yoya/status/1280144453672374274


# Page. 21

![Page Image](https://bcdn.docswell.com/page/GJWDPPM672.jpg)

SSIM いろいろ
• SSIM は欠点が多く、改善版が沢山ある。
•DSSIM: Structural Dissimilarity
•MSSIM mean SSIM
•MS-SSIM: Multi-Scale SSIM
•CW-SSIM: Complex Wavelet SSIM
•Y-SSIM
•RGB-SSIM
•IW-SSIM
•SSIMplus
•StatSSM
•SSIMULACRA


# Page. 22

![Page Image](https://bcdn.docswell.com/page/4EZGKKQRJ3.jpg)

CW-SSIM (Complex Wavelet SSIM)
• https://ieeexplore.ieee.org/document/5109651
• 無印 SSIM は回転や拡大縮小といった操作に敏感すぎる。
• CW-SSIM はその手の歪みへの耐性がある
• 参考) https://denshika.hatenadiary.org/entries/2009/09/24
• 蛇足)
• Complex Wavelet は 2012年頃まで画像認識での常連技法
• その後、DeepLearning に呑まれてあまり聞かなくなった印象。


# Page. 23

![Page Image](https://bcdn.docswell.com/page/Y76YQQ61EV.jpg)

Butteraugli (1/2)
• https://github.com/google/butteraugli 画像類似度ツール
• ちなみに、既存の方法の弱点。
• R,G,B を同じように扱う。RGB 色空間は視覚特性とズレるのに！
• 例えば、B は色合いに影響が強いが、輝度方向は違いが目に映りずらい
• 二乗平均(2-norm)で良いのか？ p-norm (p=3) 以上が良いはず
• そもそも平均だと、一箇所特大の差異があるのと、10箇所極小の差異があるのが
同じ評価になる。画質評価として微妙。


# Page. 24

![Page Image](https://bcdn.docswell.com/page/G75GRR6L74.jpg)

Butteraugli (2/2)
• https://arxiv.org/abs/1703.04421v1 解説
• 色空間を視覚特性に合わせて変換
• L,M,S 特性に合わせて補正 &gt; Xyb 色空間
• 2-norm でなく
-norm (= max) で評価
• 一箇所でも差異が目に映るならアウト
• マスキングの考慮
• 色の組み合わせでコントラスト評価を変える？


# Page. 25

![Page Image](https://bcdn.docswell.com/page/9J2YDDM3JR.jpg)

参考URL
• Image Similarity Comparison
• https://imagemagick.org/script/compare.php
• ImageMagick で画像比較 (Compare)
• https://qiita.com/yoya/items/2021944690bd9c0dafb1
• MSE/PSNR vs SSIM の比較画像紹介
• https://qiita.com/yoya/items/510043d836c9f2f0fe2f


