概要:CUI環境での画像比較自動化
LinuxのCLI環境において、2枚の画像ファイル間に存在する視覚的・数値的な差異を即座に検出できる強力なツールがcompareコマンドです。本稿では、差分ハイライト画像の出力方法をはじめ、ピクセル誤差をメトリクスとして数値化する手法、さらにはCI/CDや自動テストスクリプトへの組み込みを想定した実務テクニックを分かりやすく解説します。
1. ImageMagickの導入とcompareコマンドの環境確認
まずは検証環境を整えるため、APTリポジトリ情報を最新化し、compareコマンドを含むimagemagickスイートをシステムに導入します。

compareはImageMagickが提供する画像差分解析ユーティリティであり、ピクセル単位での比較や数学的な誤差判定、差分可視化ファイルの生成を担います。
インストールが完了したら、compare -versionを実行してバージョン番号やサポートされている機能、ビルド構成を確認しておきましょう。
⚙️ [頻出主要オプション一覧]
-metric : 差分の算出に使用する評価メトリクス(AE、RMSE、PSNRなど)を指定します。-fuzz : 軽微な色変化を同一ピクセルとして処理するための許容誤差率(例: 5%)を設定します。-highlight-color : 不一致となったピクセルを強調表示するカラーコード・色名を指定します。-lowlight-color : 両画像で一致しているピクセル部分の表示色(背景トーン)を指定します。-compose : 差分をオーバーレイレンダリングする際の合成アルゴリズムを選択します。

2. 検証用画像の生成と差分(Diff)ハイライトの出力
差分検出のテストを行うため、まずは比較元(オリジナル)となる画像を作成します。白背景(200x200)の中央に赤い矩形を配置したbase.pngを用意します。

続いて、変更後のサンプルとしてbase.pngの中央部分に青い矩形を重ね描きしたmodified.pngを生成します。

2つの画像が準備できたら、compareを実行して変更箇所を視覚化したdiff.pngを出力してみましょう。
デフォルト設定では、完全一致するエリアが半透明で控えめに描画され、変更のあったピクセル群が鮮やかな赤色でマーキングされます。

生成された一連の画像ファイルが正常にディスクへ保存されたか、ls -lh base.png modified.png diff.pngでファイルサイズとともに出力状況をチェックします。

3. -metricオプションによる不一致ピクセル数・誤差の数値化
差分画像を物理ファイルとして書き出さず、純粋に「何ピクセル変化したか」という数値データだけを取得したい場合は、compare -metric AE base.png modified.png null: 2>&1を実行します。AE(Absolute Error:絶対誤差)は色の異なるピクセル数をダイレクトにカウントする指標です。出力先をnull:に設定することで無駄なディスクI/Oを省き、標準エラー出力経由で解析結果のカウント数のみを即座に取得できます。

さらに、色のズレ具合までを含めた統計的なばらつきを捉えたい場合は、compare -metric RMSE base.png modified.png null: 2>&1を用いて二乗平均平方根誤差を測定します。RMSE(Root Mean Squared Error)メトリクスを用いると、画像全体のピクセル規模に応じた正規化誤差値が返されるため、自動回帰テストや品質評価スクリプトでのしきい値判定(閾値チェック)に非常に適しています。

4. 許容誤差(-fuzz)の調整と差分ハイライト色のカスタマイズ
レンダリング環境の違いによる僅かな色ブレや圧縮アーティファクト(ノイズ)を差分として扱いたくないケースでは、許容誤差を指定する-fuzzオプションが重宝します。ここでは5%の許容マージンを設定し、compare -fuzz 5% base.png modified.png diff_fuzz.pngを実行します。-fuzzを適切にチューニングすることで、人間の目では判別できないような微細な誤差をカットし、クリティカルなレイアウト崩れや実質的な変更点のみをdiff_fuzz.pngとして抽出可能です。

デフォルトの赤色ハイライトが見づらい場合や、背景色と同化して差分箇所の視認性が悪いときは、compare -highlight-color magenta -lowlight-color gray base.png modified.png diff_custom.pngで表示色をカスタマイズします。
不一致箇所をマゼンタ(-highlight-color magenta)、一致領域をグレー(-lowlight-color gray)に切り替えることで、変更箇所のコントラストが際立ち、一目で差異を識別できるdiff_custom.pngが生成されます。

カスタムオプションを付与して生成された各ファイルの保存状況を、ls -lh diff_fuzz.png diff_custom.pngを実行して確認します。

本稿では、Ubuntuのターミナル上でImageMagickのcompareコマンドを駆使し、画像差分の視覚化からメトリクスによる数値判定までを行う手順を解説しました。
今回紹介した各種オプションをシェルスクリプトやCIパイプラインに組み込むことで、リグレッションテストをはじめとする画像検証業務を大幅に効率化できます。プロジェクトの要件に合わせてぜひ活用してみてください。