使用ImageMagick“Diff”图像

时间:2011-02-27 10:46:55

标签: image image-processing imagemagick diff difference

如何区分两张图片?我有原始图像。有人写过原始图像的精确副本。现在,我需要比较原始图像和书面图像,并提取图像格式的文字。

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

ImageMagick可以实现吗?我知道有办法获得图像之间的统计差异,但这不是我想要的。

2 个答案:

答案 0 :(得分:290)

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

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

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

生成的diff文件显示红色不同的所​​有像素。未改变的那些看起来是白色的。

短而甜蜜。

请注意,您的图片需要 属于同一类型。您甚至可以在一种情况下混合JPEG,TIFF,PNG:图像应该具有相同的大小(图像尺寸,以像素为单位)。输出格式由输出文件名的扩展名决定。

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

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

插图示例

以下是对上述命令的变化的结果的一些说明。 注意:比较的两个文件甚至是 PDF文件 ,所以它也适用于这些(只要它们是1页)! / p>


左:带文字的图片居中:原始图片右:红色像素的差异(=文字)。 Red difference pixels only; identical pixels are white

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

这与我上面提到的命令相同。


左:带文字的图片居中:原始图片右:'seagreen'像素的差异。 Seagreen difference pixels only; identical pixels are white

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

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


左:带文字的图片居中:原始图片右:蓝色差异(但是w。某些背景背景) Blue difference pixels only; first of the compared images as a lightened-up background L

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

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

答案 1 :(得分:46)

虽然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 compose运算符组成,这实际上意味着采用最小值。

因此,两张照片中都是白色的东西都是白色的。两张照片中黑色的东西都保持黑色。在第一张图片中是白色而在第二张图片中是黑色的东西是红色的,而在第二张中是白色而在第一张中是黑色的东西是绿色的。

结果为您提供了一个漂亮的彩色编码图像,您可以轻松地将绿色与第一个输入相关联,红色与第二个输入相关联。这是一个例子,我用它来比较LaTeX的输出和KaTeX的输出(在fixed some bug之前使其更好):

enter image description here

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