使用ImageMagick“比较”图像

我怎样才能得到两个图像的区别? 我有原始图像。 有人写了一个原始图像的确切副本。 现在,我需要比较原来的图像和写在图像格式提取只是写作。

例如:我有一张房子的照片。 有人拿了一个副本,并在副本上写下“你好!”。 我想以某种方式比较两张照片,删除房子,留下一个“你好!”的图像。

这可能与ImageMagick? 我知道有办法获得图像之间的统计差异,但这不是我所期待的。

我自己的最爱是这两个:

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

上述两个命令之间的唯一区别在于:第一个命令将两个图像之间的视觉差异显示为PNG文件,第二个显示为PDF。

得到的差异文件显示红色不同的所​​有像素。 没有改变的那些显示为白色。

简短而甜蜜。

请注意,您的图片不必是相同的types。 您甚至可以在一个条件下混合使用JPEG,TIFF,PNG – 图像应该具有相同的大小(像素的图像尺寸)。 输出格式由输出文件名的扩展名决定。

如果出于某种原因需要比默认分辨率(72 dpi)更高的分辨率 – 那么只需添加一个适当的-density参数:

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

说明的例子

以下是上述命令变体结果的几个例子。 注意:比较的两个文件甚至是 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 

此命令添加一个参数,以使差异像素的“seagreen”而不是默认的红色。


左图:带有文字的图像中心:原始图像右:蓝色差异(但有一些背景背景) 仅蓝色差异像素;首先比较的图像作为一个亮起的背景

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

这个命令删除-compose src部分 – 结果是compare的默认行为,它保持为2个差异图像中的第一个的-compose src背景。 (这一次添加了参数,使diff像素显示为蓝色。)

虽然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都转换为灰度。 然后将第一个作为结果图像的红色通道,第二个作为绿色通道。 蓝色通道由这两个使用darken组合运算符组成,这基本上意味着取最小值。

所以两幅图像都是白色的东西保持白色。 两幅图像都是黑色的东西保持黑色。 第一个图像是白色的,第二个是黑色的是红色的,第二个是白色的,第一个是黑色的,是绿色的。

结果为您提供了一个很好的颜色编码的图像,您可以轻松地将绿色与第一个input关联,红色与第二个input轻松关联。 下面是一个例子,我使用它来比较来自LaTeX的输出与KaTeX的输出(在我修正一些错误之前,使其更好):

在这里输入图像说明

您可以将这些方法结合起来,使用compare来查看更改的内容,然后使用上述内容更详细地查看更改内容。