使用imagemagick比较渲染图像

时间:2016-04-14 14:35:01

标签: unit-testing image-processing graphics imagemagick diff

我已经从应用程序渲染了多个图像。以下示例图像说明了两个看起来几乎与眼睛相同的图像。

img1 img2

我尝试将它们与image magick中的以下命令进行比较。

compare -metric AE img1.png img2.png diff.png
6384

这意味着即使图像相似,6384像素也不同。

我做了一些小改动,比如如果一个图案向右移动1个像素,这将给我一个不同像素数量的大错误。有没有一种很好的方法与ImageMagick做这种差异?我已经尝试了fuzz参数,但它确实对我没有帮助。 ImageMagick比较仅适用于比较摄影图像吗?是否有更好的切换到ImageMagick,可以识别移动了一些像素并将其报告为相等的文本?我应该使用其他工具吗?

编辑: 在一个看起来与人类截然不同的图像上添加一个例子,并说明我试图区分的那种差异。在这张图片中,没有多少像素被改变,但可见图案明显改变了。

img3

1 个答案:

答案 0 :(得分:0)

由于我不知道您在寻找或期待什么,因此很难给出任何详细的答案。我猜你可能需要某种 Perceptual Hash ,如果你正在寻找人们会认为相似或不相似的图像,或者可能是 Scale / Rotation / Translation Invariant 技术识别相似的图像,与调整大小,移位和旋转无关。

您可以使用ImageMagick查看Perceptual Hash和Image Moments,如下所示:

identify -verbose -features 1 -moments 1.png
Image: 1.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: PseudoClass
  Geometry: 103x115+0+0
  Resolution: 37.79x37.79
  Print size: 2.72559x3.04313
  Units: PixelsPerCentimeter
  Type: Grayscale
  Base type: Grayscale
  Endianess: Undefined
  Colorspace: Gray
  Depth: 8-bit
  Channel depth:
    gray: 8-bit
  Channel statistics:
    Pixels: 11845
    Gray:
      min: 62 (0.243137)
      max: 255 (1)
      mean: 202.99 (0.79604)
      standard deviation: 85.6322 (0.335812)
      kurtosis: -0.920271
      skewness: -1.0391
      entropy: 0.840719
  Channel moments:
    Gray:
      Centroid: 51.6405,57.1281
      Ellipse Semi-Major/Minor axis: 66.5375,60.336
      Ellipse angle: 0.117192
      Ellipse eccentricity: 0.305293
      Ellipse intensity: 190.641 (0.747614)
      I1: 0.000838838 (0.213904)
      I2: 6.69266e-09 (0.00043519)
      I3: 3.34956e-15 (5.55403e-08)
      I4: 5.38335e-15 (8.92633e-08)
      I5: 2.27572e-29 (6.25692e-15)
      I6: -4.33202e-19 (-1.83169e-09)
      I7: -2.16323e-30 (-5.94763e-16)
      I8: 3.96612e-20 (1.67698e-10)
  Channel perceptual hash:
    Red, Hue:
      PH1: 0.669868, 11
      PH2: 3.35965, 11
      PH3: 7.27735, 11
      PH4: 7.05343, 11
      PH5: 11, 11
      PH6: 8.746, 11
      PH7: 11, 11
    Green, Chroma:
      PH1: 0.669868, 11
      PH2: 3.35965, 11
      PH3: 7.27735, 11
      PH4: 7.05343, 11
      PH5: 11, 11
      PH6: 8.746, 11
      PH7: 11, 11
    Blue, Luma:
      PH1: 0.669868, 0.669868
      PH2: 3.35965, 3.35965
      PH3: 7.27735, 7.27735
      PH4: 7.05343, 7.05343
      PH5: 11, 11
      PH6: 8.746, 8.746
      PH7: 11, 11
  Channel features (horizontal, vertical, left and right diagonals, average):
    Gray:
      Angular Second Moment:
        0.364846, 0.615673, 0.372224, 0.372224, 0.431242
      Contrast:
        0.544246, 0.0023846, 0.546612, 0.546612, 0.409963
      Correlation:
        -0.406263, 0.993832, -0.439964, -0.439964, -0.07309
      Sum of Squares Variance:
        1.19418, 1.1939, 1.19101, 1.19101, 1.19253
      Inverse Difference Moment:
        0.737681, 1.00758, 0.745356, 0.745356, 0.808993
      Sum Average:
        1.63274, 0.546074, 1.63983, 1.63983, 1.36462
      Sum Variance:
        4.43991, 0.938019, 4.46048, 4.46048, 3.57472
      Sum Entropy:
        0.143792, 0.159713, 0.143388, 0.143388, 0.14757
      Entropy:
        0.462204, 0.258129, 0.461828, 0.461828, 0.410997
      Difference Variance:
        0.0645055, 0.189604, 0.0655494, 0.0655494, 0.0963021
      Difference Entropy:
        0.29837, 0.003471, 0.297282, 0.297282, 0.224101
      Information Measure of Correlation 1:
        -0.160631, -0.971422, -0.146024, -0.146024, -0.356026
      Information Measure of Correlation 2:
        0.294281, 0.625514, 0.29546, 0.29546, 0.377679

你也可以去Fred Weinhaus的优秀网站(here)并下载他的名为moments的脚本,它会计算胡和梅特拉的时刻,看看那些会告诉你什么的你想。基本上,您可以在每个图像上运行脚本,如下所示:

./moments image1.png > 1.txt
./moments image2.png > 2.txt

然后使用您最喜欢的diff工具查看您要比较的两张图片之间的变化。