如何获得两个图像之间的差异?我有原始图像。有人在原始图像的精确副本上写过字。现在,我需要将原始图像与图像上的文字进行比较,并仅提取图像格式的文字。
例子:我有一张房子的照片。有人抄袭并写下“你好!” 在副本上。我想以某种方式比较这两张图片,移走房子,然后留下“ Hello!”字样的图片。
ImageMagick有可能吗?我知道有几种方法可以得出图像之间的统计差异,但这不是我想要的。
如何获得两个图像之间的差异?我有原始图像。有人在原始图像的精确副本上写过字。现在,我需要将原始图像与图像上的文字进行比较,并仅提取图像格式的文字。
例子:我有一张房子的照片。有人抄袭并写下“你好!” 在副本上。我想以某种方式比较这两张图片,移走房子,然后留下“ Hello!”字样的图片。
ImageMagick有可能吗?我知道有几种方法可以得出图像之间的统计差异,但这不是我想要的。
Answers:
我自己的最爱是以下两个:
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”,而不是默认的红色。
左:带有文本的 图像中心:原始图像 右:蓝色差异(但带有某些上下文背景) l
compare \
porsche-with-scratch.pdf porsche-original.pdf \
-highlight-color blue \
diff-compose-default.pdf
该命令删除了该-compose src
部分-结果是其默认行为compare
,将2张衍射图像中的第一个图像保留为浅色背景。(这次添加了参数,以使差异像素显示为蓝色。)
'compare'
。对于ImageMagick的v7.x,应'magick compare'
改为运行。
虽然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
为灰度。然后将第一个作为生成图像的红色通道,第二个作为绿色通道。蓝色通道是使用darken
compose运算符从这两个通道形成的,从本质上讲,这意味着采用最小的通道。
因此,两个图像中都是白色的东西保持白色。在两个图像中都是黑色的东西保持黑色。在第一个图像中为白色但在第二个图像中为黑色的事物变为红色,在第二个图像中为白色但在第一图像中为黑色的事物变为绿色。
结果为您提供了很好的颜色编码图像,您可以轻松地将绿色与第一个输入关联,将红色与第二个输入关联。这是一个示例,我在此示例中将LaTeX的输出与KaTeX的输出进行比较(在我修复一些错误以使其变得更好之前):
您可以结合的方法,用compare
看哪里的东西改变了,然后用上面更详细地看怎么它改变。
-colorspace gray
而不是-grayscale Rec709Luminance
修复该问题,但这会使结构混乱。添加-respect-parentheses
为第一个选择来convert
解决这个问题。
pdfdiff
目录中PDF的每一页输出一个JPG,并另外打印两个PDF之间不同的页数。
-grayscale
不受支持,我不得不-colorspace gray
按照@BrechtMachiels的建议使用