我如何得到两个图像之间的区别?我有原始图像。有人在一模一样的原图上写了字。现在,我需要将原始图像与图像上的文字进行比较,并提取图像格式的文字。
例子:我有一张房子的照片。有人抄了一份,写道:“你好!在副本上。我想以某种方式比较这两张照片,去掉房子,留下一个单词“Hello!”的图像。
ImageMagick能做到吗?我知道有很多方法可以得到图像之间的统计差异,但这不是我想要的。
我如何得到两个图像之间的区别?我有原始图像。有人在一模一样的原图上写了字。现在,我需要将原始图像与图像上的文字进行比较,并提取图像格式的文字。
例子:我有一张房子的照片。有人抄了一份,写道:“你好!在副本上。我想以某种方式比较这两张照片,去掉房子,留下一个单词“Hello!”的图像。
ImageMagick能做到吗?我知道有很多方法可以得到图像之间的统计差异,但这不是我想要的。
我自己最喜欢的是这两个:
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页)!
左:带有文本的图像中间:原始图像右:红色像素的差异(=文本)。
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
该命令添加了一个参数,使像素差变为“绿色”,而不是默认的红色。
左图:带有文本的图片中图:原始图片右图:蓝色差异(但是w.一些背景) l
compare \
porsche-with-scratch.pdf porsche-original.pdf \
-highlight-color blue \
diff-compose-default.pdf
这个命令删除了-compose src部分——结果是compare的默认行为,它保留了2张不同图像中的第一张作为浅色背景。(这一次添加了参数,使差异像素显示为蓝色。)
虽然比较对许多应用程序都很有效,但我发现有时我更喜欢不同的方法,特别是在比较大多数灰度图像时:
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都转换为灰度。然后将第一个通道作为生成图像的红色通道,第二个通道作为绿色通道。蓝色通道由这两个组成,使用暗合成算子,这本质上意味着取最小值。
所以在两幅图像中都是白色的东西仍然是白色的。在两幅图中都是黑色的东西仍然是黑色的。在第一幅图中是白色而在第二幅图中是黑色的东西变成红色,而在第二幅图中是白色而在第一幅图中是黑色的东西变成绿色。
结果为您提供了一个漂亮的彩色编码图像,您可以轻松地将绿色与第一个输入联系起来,将红色与第二个输入联系起来。下面是一个例子,我用它来比较来自LaTeX的输出和来自KaTeX的输出(在我修复了一些bug以使其更好之前):
您可以结合使用这两种方法,使用compare查看更改的位置,然后使用上述方法查看更改的更详细信息。
在ImageMagick 6.3.4中,您可以使用-compose ChangeMask(参见“移除已知背景”和后面的部分)。 例如,使用IM7和这些图像stone.png, diamond_ore.png和netherrack.png:
magick diamond_ore.png stone.png -fuzz 15% -compose ChangeMask -composite diamond_ore_overlay.png给出:
magick netherrack.png \(diamond_ore.png stone.png -fuzz 15% -compose ChangeMask -composite +compose \) -composite nether_diamond_ore.png给出: