ImageMagickを使用して画像を「比較」する


178

2つの画像の違いを取得するにはどうすればよいですか?元の画像があります。元の画像の完全な複製に誰かが書いています。今、私はオリジナルを書かれたイメージと比較し、イメージ形式のライティングだけを抽出する必要があります。

例:私は家の写真を持っています。誰かがコピーを取って「Hello!」と書いた コピーに。どういうわけか2つの写真を比較し、家を削除して、「こんにちは」という言葉のイメージを残したいと思います。

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


8
ImageMagick使用ガイドのこのセクションをお試しください!
Benoit

1
私はこの質問がImageMagickに関するものであることを知っていますが、不可知論的な解決策を求めている可能性のある「因果関係のある」サーチャーのために、Resemble.jsへのリンクを含める必要がありました。
brichins

最初の画像から2番目の画像のピクセルを減算して2つの画像を比較するツールを誰かが知っていますか?自分で書いたくない。
MarcusJ

Imagemagick 7には、不変の画像モーメントを使用する技術である知覚ハッシュがあります。それは同じ回転後であっても、樽型歪み、リサイズ、ガンマの変更、ノイズの導入、透かし...ハッシュという意味で、それのnice
v.oddou

1
@ v.oddou、ありがとう。私はドキュメントを読み、さらにいくつかのテストを行いました。人口密度が非常に低く、ピクセル密度が非常に低い線画では、パフォーマンスが低下するようです。ピクセル密度がPHASHで類似性を識別するためのキーのようです。
BReddy

回答:


320

私自身のお気に入りは次の2つです。

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

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

結果の差分ファイルには、赤色が異なるすべてのピクセルが表示されます。変更されていないものは白く表示されます。

短くて甘い。

画像は同じタイプである必要ありません。JPEG、TIFF、PNGを混在させることもできます-1つの条件下で:画像は同じサイズ(ピクセル単位の画像寸法)である必要があります。出力形式は、出力ファイル名の拡張子によって決まります。

何らかの理由で、デフォルトよりも高い解像度(72 dpi)が必要な場合は、適切な-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

これは、前に提案したのと同じコマンドです。


左:テキスト付きの       画像中央:元の画像       右:「シーグリーン」ピクセルの違い。 シーグリーン差分ピクセルのみ。 同一のピクセルは白です

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つを明るい背景として保持します。(今回は、diffピクセルを青色で表示するためのパラメーターを追加しました。)


この比較cliがどこから来たのか理解できませんか?imagebrickの一部ですか?Windowsで利用できますか?
クリシュノム

2
@クリシュノム:「imagebrick」のようなものはありません。ImageMagickのことですか?
カートファイファイ

2
@クリシュノム:ImageMagickソリューションについて明示的に尋ねられた質問。ImageMagickのv6.xソフトウェアスイートの一部には、という独立したCLIツールがありました'compare'。ImageMagickのv7.xの場合は、'magick compare'代わりに実行する必要があります。
カートファイファイ

私の悪い。修正していただきありがとうございます(imagebrick-> imageMagick)。やってみます。一括画像を比較するツールも探しています。再度助けてくれてありがとう
クリシュノム

@クリシュノム:「バルク画像」が何であるか私は知りません。しかし、ImageMagickの一連のツールを使用すれば、望みどおりの結果が得られると私は確信しています。
カートファイファイ

53

一方でcompare、多くの用途のために良い仕事をしていません、私は主にグレースケールある画像を比較する場合は特に、時々私は、別のアプローチを好むことがわかりました。

convert '(' file1.png -flatten -grayscale Rec709Luminance ')' \
        '(' file2.png -flatten -grayscale Rec709Luminance ')' \
        '(' -clone 0-1 -compose darken -composite ')' \
        -channel RGB -combine diff.png

アイデアがある、次のとおりです。両方の変換file1.pngfile2.pngグレースケールにします。次に、最初の画像を結果の画像の赤のチャネル、2番目の画像を緑のチャネルとして扱います。青チャネルは、darken構成演算子を使用してこれら2つから形成されます。これは、基本的に最小値を取ることを意味します。

したがって、両方の画像で白いものは白のままです。両方の画像で黒いものは黒いままです。最初の画像では白であるが2番目の画像では黒であるものは赤に変わり、2番目の画像では白であるが最初の画像では黒であるものは緑に変わります。

結果は、うまく色分けされた画像を提供します。ここでは、緑を最初の入力に、赤を2番目の入力に簡単に関連付けることができます。これを使用して、LaTeXからの出力をKaTeXからの出力と比較する例を示します(これを改善するためにいくつかのバグ修正する前)。

ここに画像の説明を入力してください

あなたは使用して、アプローチを組み合わせることができますcompare参照してくださいどこより詳細に見るために、上記を使用して、次に何かが変更され、どのようにそれを変更しました。


2
いいね!やり取りが必要だったので、Gimpでメソッドを複製しました。参考:1)画像をレイヤーとして読み込む、2)色->両方のレイヤーの彩度を下げる、3)レイヤータブで両方のレイヤーからアルファチャンネルを削除する、4)1つのレイヤーでG + Bチャンネルを選択し、すべてを選択してチャンネルをクリアする黒色、2番目のレイヤーのR + Bチャンネルと同じ、4)[レイヤー]タブで上位レイヤーの画面モードを設定します。
マテイSMID

1
@Palmstrom:ありがとう!もともとはGimpを使用してこれらの画像比較を行いましたが、入力画像に直接「粒子抽出」レイヤーモードを使用しいたため、共通領域は灰色になり、差分は一方向に黒、もう一方の方向に白になります。読みにくいが、生成が速く、色情報を含めることができる。「画面」の代わりに「暗くするだけ」を使用していて、未使用のチャネルの色を黒ではなく白にすると、コマンドをより厳密に一致させると思います。
MvG 2016

1
一部の PDF入力では、何らかの理由でグレースケール変換後に画像が反転します。-colorspace gray代わりにを使用すると-grayscale Rec709Luminance修正されますが、これにより構成がめちゃくちゃになります。それを処理-respect-parenthesesするための最初のオプションとして追加しますconvert
Brecht Machiels 2016年

このメソッドを使用して2つのPDFをページごとに視覚的に比較するスクリプトは次のとおりです:gist.github.com/brechtm/891de9f72516c1b2cbc1pdfdiffディレクトリ内のPDFのページごとに1つのJPGを出力し、さらに2つのPDF間で異なるページの数を印刷します。
Brecht Machiels

1
ImageMagick v6.7.7-10では-grayscaleサポートさ-colorspace grayれていないようです。@ BrechtMachielsの提案どおりに使用する必要がありました
austinmarton
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.