使用ImageMagick“区分”图像
image
image-processing
imagemagick
17
0

如何获得两个图像之间的差异?我有原始图像。有人在原始图像的精确副本上写过字。现在,我需要将原始图像与图像上的文字进行比较,并仅提取图像格式的文字。

例子:我有一张房子的照片。有人抄袭并写下“你好!”在副本上。我想以某种方式比较这两张图片,搬走房子,然后留下“你好!”字样的图片。

ImageMagick有可能吗?我知道有几种方法可以得出图像之间的统计差异,但这不是我想要的。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

虽然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合成运算符从这两个通道形成的,这实际上意味着采用最小值。

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

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

在此处输入图片说明

您可以结合的方法,运用compare ,看看那里的东西改变了,然后用上面更详细地看看它是如何改变。

收藏
评论

我自己的最爱是以下两个:

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

上面两个命令之间的唯一区别是:第一个命令将两个图像之间的视觉差异显示为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

这是我上面前面建议的命令。


左:带文字的图像中心:原始图像右: “ 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个衍射图像中的第一个图像作为浅色背景。 (这次添加了参数,以使差异像素显示为蓝色。)

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题