1.5K Views
March 22, 24
スライド概要
ImageMagick 内部入門 第十五回 (compare 〜 画像比較) 2024/03/22(金) “よや” <[email protected]>
内部入門シリーズ • (第一回) 全体構成 • (第二回) データ構造 • (第三回) 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 ← ☜ 今回の話
目次 • 画像比較とは? • ImageMagick compare • 機能概要 • 実装概要 • compare metrics • AE(absolute error) / MSE • PSNR • SSIM • おまけ (ImageMagick は未実装) • SSIM 亜種、CW-SSIM • Butteraugli
画像比較とは • 主に二つ。 サイゼリアの間違い探し • 差異を強調表示 • 間違い探し • 差異(又は類似度)を数値化 • 画質劣化評価 (c) https://www.saizeriya.co.jp/entertainment/
画像比較 〜 差異の強調 • compare コマンドで差異が取れる % compare left.png right.png diff1.png % compare –fuzz 50% left.png right.png diff2.png
画像比較 〜 差異の数値化 • compare -metric 〜 で数値化できる • magick –list metric で一覧表示 • よく使われるのは PSNR と SSIM % magick -list metric AE DSSIM Fuzz MAE MEPP MSE NCC PAE PHASH PSNR RMSE SSIM
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
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
ImageMagick の compare 実装 • ImageMagick/MagickCore/compare.c
ImageMagick の compare 実装 • 二乗誤差が一定以上の時に色を塗る。 透明度 (Sa,Da)も考慮
画像比較 〜 差異の数値化 • 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
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
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)
MSE (Mean Square Error、平均二乗誤差) • 対応するピクセル輝度の差の二乗をとる。 • 絶対値よりは感覚に合う • 詳細は後述する > p-norm の議論 % compare –metric MSE left.png right.png NULL: ; echo 2235.04 (0.0341045)
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)
SSIM (Structural Similarity Index Measure) • 処理内容 • Blur をかける • (重たいので省略する事もある) • 局所領域をスライドしながら 右の計算を行う • 領域サイズとスライド幅は ツールによる。_(┐「ε: ) • それらの平均をスコア値にする • α,β,γ,c1,c2,c3 は推奨値は あるが任意の値。 • 結果ツールにより値が異なる。
SSIM のセールスポイント • MSE/PSNR vs SSIM の比較画像紹介 • https://qiita.com/yoya/items/510043d836c9f2f0fe2f
おまけ (ImageMagick は未対応) • n-norm, p-norm • SSIM いろいろ • Butteraugli
p-norm もしくは n-norm(ミンコフスキー ノルム) • 二乗和は p=2 (の平方根無しバージョン) • 全体的に均一に劣化する場合は、これで良さそう • 最大値は p=∞相当 • 特定の場所が劣化する間違い探しはこっち • n-norm (ミンコフスキーノルム)で 一般化すれば、2〜 の間を パラメトリックに トレードオフ調整できる
p-norm もしくは n-norm(ミンコフスキー ノルム) • 人の感覚的には p=3 以上 が良さそう。p=2 では足りない • https://twitter.com/yoya/status/1280144453672374274
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
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 に呑まれてあまり聞かなくなった印象。
Butteraugli (1/2) • https://github.com/google/butteraugli 画像類似度ツール • ちなみに、既存の方法の弱点。 • R,G,B を同じように扱う。RGB 色空間は視覚特性とズレるのに! • 例えば、B は色合いに影響が強いが、輝度方向は違いが目に映りずらい • 二乗平均(2-norm)で良いのか? p-norm (p=3) 以上が良いはず • そもそも平均だと、一箇所特大の差異があるのと、10箇所極小の差異があるのが 同じ評価になる。画質評価として微妙。
Butteraugli (2/2) • https://arxiv.org/abs/1703.04421v1 解説 • 色空間を視覚特性に合わせて変換 • L,M,S 特性に合わせて補正 > Xyb 色空間 • 2-norm でなく -norm (= max) で評価 • 一箇所でも差異が目に映るならアウト • マスキングの考慮 • 色の組み合わせでコントラスト評価を変える?
参考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