197

我怎样才能得到两个图像之间的差异?我有原图。有人在原始图像的精确副本上写了字。现在,我需要将原始图像与写在图像上的内容进行比较,并仅提取图像格式的文字。

示例:我有一张房子的照片。有人拿了一份并写了“你好!” 副本上。我想以某种方式比较这两张照片,移除房子,然后留下一张带有“你好!”字样的图像。

ImageMagick 可以做到这一点吗?我知道有一些方法可以获得图像之间的统计差异,但这不是我想要的。

4

2 回答 2

349

我自己最喜欢的是这两个:

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

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

生成的差异文件显示所有红色不同的像素。未更改的显示为白色。

短而甜。

请注意,您的图像不必同一类型。您甚至可以混合使用 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

这与我之前建议的命令相同。


左:带有文本      的图像 中原始图像      右: “海绿”像素的差异。 仅海绿差异像素; 相同的像素是白色的

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 个不同图像中的第一个保持为浅色背景。(这次添加了参数以使差异像素显示为蓝色。)

于 2012-07-06T12:24:18.613 回答
68

虽然compare对许多应用程序都做得很好,但我发现有时我更喜欢不同的方法,特别是在比较主要是灰度的图像时:

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

思路如下:将file1.png和都转换file2.png为灰度。然后将第一个作为结果图像的红色通道,第二个作为绿色通道。蓝色通道是使用 compose 运算符从这两个通道中形成的darken,这实际上意味着取最小值。

所以两个图像中都是白色的东西保持白色。两个图像中黑色的东西都保持黑色。在第一张图像中为白色但在第二张图像中为黑色的事物变为红色,在第二张图像中为白色但在第一张图像中为黑色的事物变为绿色。

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

在此处输入图像描述

您可以结合这些方法,使用compare来查看发生了什么变化,然后使用上面的方法更详细地了解它是如何变化的。

于 2015-11-12T14:12:19.017 回答