2つの画像間で何が変わったのかを正確に知るにはどうすればよいですか?


28

たとえば、JPEG圧縮に関する最近の会話では、2つのJPEG(1つは圧縮レベル100、もう1つは圧縮レベル95)の間で変化したピクセルごとに比較したかったのです。

面倒なカスタムソフトウェアプログラミングを行わずに、変化したものの優れた視覚的マップを生成するにはどうすればよいですか


2
:それはおそらく写真のために実行可能な解決策ではないですが、GitHubの(プログラマのサイトは)画像を比較するいくつかの興味深い方法を持っているような答えとしてこれを提出していないgithub.com/cameronmcefee/Image-Diff-View-Modes/commit/...は、クリックしてみてください「2アップ」、「スワイプ」、「オニオンスキン」、「差異」。
ヘンリックN

回答:


35

Photoshop +レイヤーFTW。(はい、Gimp、または同じ機能を持つ他の編集ソフトウェアを使用することもできます。)

ベース画像から始めます。上記の場合、jpeg品質の100画像を使用しました。

  1. その上に新しいレイヤーを作成します
  2. 2番目の画像をそのレイヤーに貼り付けます
  3. レイヤースタイルを「差分」に設定します(下の1番目の画像の左のピンクの矢印を参照)
  4. その上にエフェクトレイヤーを作成します(レイヤー>新しい調整レイヤー>しきい値)
  5. 効果をしきい値に設定します(下の最初の画像の右ピンク矢印を参照)
  6. しきい値を1に設定します

結果の画像では、2つの画像間で何らかの違いがあるピクセルは白になります。しきい値を変更することで、「少し違う」ように調整できます。

Lightroomのjpeg 92と100のLOTの違いを示す例。 Photoshopレイヤーを使用したLRのjpeg 92と100の比較

95と100の間でまったく違いがないことを示す例。 Photoshopレイヤーを使用したLRのjpeg 95と100の比較

それは単に「変更されたかどうかのない」バイナリを表示しているだけではありません。たとえば、カラーチャンネルごとに、それがどの程度変更されたかの詳細を知りたい場合はどうでしょうか。

  1. しきい値調整レイヤーを曲線調整レイヤーに置き換えます。
  2. 曲線を編集する
  3. クリッピングを表示する
  4. 入力可能な白いハンドルを右下隅の下に持って行き、左にドラッグしてください。
  5. クリッピングが表示されなくなるまでゆっくりと右に戻ります(プレビュー画像はすべて黒です)
  6. クリッピングをオフに戻し、曲線の変更を保存します

結果のピクセルが明るいほど、その色はより大きくなります。マイナス面は、多くの灰色の泥になってしまうことです...そのため、違いがある場所を確認するためにしきい値を設定する方が簡単な場合があります。そのため、両方を作成し、どちらを表示するかを切り替えます。

違いのより説明的なビュー


初心者の質問ですが、手順4の「その上にエフェクトレイヤーを作成する」方法はありますか?どこにも見つかりません。それから7年後、おそらく名前を変えたのかもしれませんが、最新バージョンを使用していますか?
ホイットニーランド

14

Photoshopを使用している場合、次のようにします。

2つの別々のレイヤーで、2つのjpegを同じpsdファイルに入れます。寸法が同じであるため、それらは正確に重なり合う必要があります。(どれが上にあるかは関係ありません)。

レイヤーの描画モードを「差分」に設定します。ほとんど黒の結果が表示されます。2つの元のレイヤーの品質の違いによって、多少のノイズが見られる場合があります。

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


そのような大きな黒いボイドが残っている場合、違いだけではあまり役に立ちません。:)
cabbey

@cabbey確かに、100%から95%を比較すると、おそらく黒一色になります。しかし、それはあなたの質問が尋ねていたことですよね?所有者の回答では、比較対象の元の値を変更しているため、元の圧縮設定がなくなります。
ジン

差が非常に小さいため、ほぼすべての比較で実質的に黒一色になります。差分後のしきい値/曲線レイヤーは、圧縮設定に何も影響を与えません。差分が準備した黒いスープの下限の視覚化を支援するだけです。(私はあなたがその意味を100%確信していないので、そこで別の方向に向かっているかもしれません。...)
cabbey

@cabbeyは、2つの画像間の差分の純粋なビット単位の操作を要求している場合、「差分」ブレンディングモードだけでそれが得られます。しきい値/曲線を調整すると、結果は肉眼でより明確になりますが、変更内容の正確な表現ではありません。それをいつ行うかは、100%と95%を比較することではなくなります。
ジン

もちろんです。圧縮レベルは、2番目のフォトショップがディスクから内部バッファーに画像をロードすることを停止し、メモリ内の非圧縮ピクセル配列になりました...画像に正方形のブロブがあるか、アーティファクトであるため、それらのピクセルがそこに到達した場合圧縮レベルの関係はありません。
-cabbey

13

すべての画像処理パッケージでこれが簡単になります。このシステムにアクセスできる場合は、Mathematicaでそれを行う方法を紹介します。Mathematicaはプログラミング言語ですが、この種の操作は非常に簡単です。そのため、アクセスできる場合(大学のサイトライセンスなど)、ぜひ試してみることをお勧めします。

まず、画像をインポートします。

img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]

JPEG圧縮を使用して再圧縮する

img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]

Mathematicaグラフィックス

次に、ピクセル値の差を取り、最初にそれらを浮動小数点数に変換して、負の値が保持されるようにします。

diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]

Mathematicaグラフィックス

差分画像にはほとんど表示されず(差分は小さい)、負の値は黒にクリップされます。すべての値を再スケーリングして、ダイナミックレンジ全体を埋めます(最小値は0、最大値は1にスケーリングされます)。

ImageAdjust[diff]

Mathematicaグラフィックス

ImageDifference2つの画像の絶対差を与え、負の数は生成しません。これは、画像処理パッケージ、特にGUIパッケージ(Photoshop、GIMP)で見つける可能性が高い操作です。

ImageDifference[img, img2]

Mathematicaグラフィックス

また、赤などの単一のRGBチャンネルを使用して、「反対の」色を使用して正と負の違いを視覚化することもできます。

ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]], 
 ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]

Mathematicaグラフィックス

同じことがありますが、違いは5倍に増幅されています。JPEGアーティファクトは、現在より認識しやすくなっています。

ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]], 
 ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]

Mathematicaグラフィックス

プログラミング言語を使用する利点は、これを簡単に自動化し、「圧縮レベル」の違いが0.1と1.0の間でどのように変化するかを確認できることです。

Grid@Partition[Table[
   ArrayPlot[
    0.5 + ImageData[
      First@ColorSeparate[
        ImageSubtract[Image[img, "Real"], 
         Image[ImportString@
           ExportString[img, "JPEG", "CompressionLevel" -> c], 
          "Real"]], "Red"]], ColorFunction -> "RedGreenSplit", 
    ColorFunctionScaling -> False],
   {c, 0.1, 1, 0.1}
   ], 5]

Mathematicaグラフィックス


スクリプト化された/自動化されたオプションを見るのは常に良いことです!:)
jrista

5

Imagemagickコマンドラインツールを使用できます。

composite imagesrc1.jpg imagesrc2.jpg -compose difference diffs.jpg

各RGBチャンネルの差の絶対値を提供します。



0
  1. GIMPまたはPhotoshopで画像の1つを開きます。
  2. 2番目の画像を最初の画像の上に新しいレイヤーとして追加します。
  3. 最上位レイヤーのブレンドモードを「差分」に設定します

結果の画像では、黒い部分は元の画像が同じ場所を示し、それより明るい部分は違いを示します。


そのような大きな黒いボイドが残っている場合、違いだけではあまり役に立ちません。:)
cabbey

結果の画像のレベルはいつでも調整できます。この手法を使用するたびに、変更を確認できるほど十分に異なる写真がありました:)
ダン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.