1. ホーム
  2. image

[解決済み】ImageMagickを使って画像を "Diff "する。

2022-04-13 17:18:27

質問

2つの画像の差を求めるにはどうしたらいいですか?オリジナルの画像を持っています。誰かがその元画像の完全な複製に書き込みをしました。今、オリジナルと書き込まれた画像を比較して、書き込まれた部分のみを画像形式で抽出する必要があります。

例 ある家の写真があります。誰かがコピーして、そのコピーに「こんにちは!」と書きました。どうにかして2つの写真を比較し、家を消して、「Hello!」の文字の画像を残したい。

これはImageMagickで可能なのでしょうか?私は画像の間の統計的な違いを得る方法があることを知っていますが、それは私が探しているものではありません。

どのように解決するのですか?

私自身が気に入っているのは、この2つです。

 compare image1 image2 -compose src diff.png
 compare image1 image2 -compose src diff.pdf

上の2つのコマンドの唯一の違いは、最初のコマンドは2つの画像の視覚的な違いをPNGファイルとして、2番目のコマンドはPDFとして表示することです。

出来上がった差分ファイルには、異なる画素がすべて赤色で表示されます。変更されていないものは白く表示されます。

手短に言うと

注意:画像には ではなく は同じタイプでなければなりません。JPEG, TIFF, PNG を混在させることもできます。出力形式は、出力ファイル名の拡張子によって決定される。

何らかの理由でデフォルトの解像度(72dpi)よりも高い解像度が必要な場合は、適切な -density パラメータで指定します。

 compare -density 300 image1 image2 -compose src diff.jpeg


図解例

上記のコマンドのバリエーションに応じた結果のイラストをいくつか紹介します。 注:比較した2つのファイルは同じでした PDFファイル ということで、これらも動作します(1ページであれば)。


左です。 テキスト付き画像       中央 オリジナル画像       右側 赤いピクセルが差分(=テキスト)。

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
        diff-compose-default.pdf

これは、先ほど上で提案したコマンドと同じものです。


左です。 テキスト付き画像       中央 オリジナル画像       右側 seagreen」ピクセルの違い。

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
       -highlight-color seagreen \
        diff-compose-default.pdf

このコマンドは、差分ピクセルをデフォルトの赤ではなく、「海緑」にするパラメータを追加します。


左です。 テキスト付き画像       中央 オリジナル画像       右側 青色の差分(ただし、背景を一部含む) l

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -highlight-color blue \
        diff-compose-default.pdf

このコマンドは -compose src の部分 -- その結果、デフォルトの動作である compare これは、2つの差分画像のうち最初の1つを明るくした背景として保持するものです。(今回は、差分ピクセルを青で表示するパラメータを追加しています)。