Use imagequick to compare images

后端 未结 1 1057
别那么骄傲
别那么骄傲 2021-01-26 01:34

I don\'t understand how the compare script of imagequick work.

I compare an image to the same image (a copy)

I do

compare -metric A

相关标签:
1条回答
  • 2021-01-26 02:02

    Here are some examples to help you understand how image comparison works.

    The -metric AE tells you the Absolute Error, which is the number of pixels that differ - so it will be zero if all pixels are identical.

    1. Compare two images that are exact copies of each other in every respect

    convert -size 128x128 xc:red red.png                    # Make red image
    cp red.png perfectCopy.png                              # Make perfect copy
    compare -metric AE red.png perfectCopy.png result.png   # Count differing pixels
    0                                                       # There are none - identical
    

    According to standard Unix tools (md5, diff, tmp), files are binary identical and md5 checksums identical:

    md5 red.png perfectCopy.png 
    MD5 (red.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
    MD5 (perfectCopy.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
    

    ImageMagick hashes over pixels only (not including metadata) are identical:

    identify -format "%#:%f\n" red.gif perfectCopy.png 
    1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
    1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:perfectCopy.png
    

    2. Compare two images with identical appearance but different metadata

    convert -size 128x128 xc:red red.png                    # Make red image
    sleep 2
    convert -size 128x128 xc:red redDifferentDate.png       # Make red image with different date
    compare -metric AE red.png redDifferentDate.png result.png
    0                                                       # No difference
    

    But, according to standard Unix tools (diff,md5,sum), the files are different - because the date is in there.

    md5 red.png redDifferentDate.png 
    MD5 (red.png) = 004088f6d275f431cedb74bc0209bbc5
    MD5 (redDifferentDate.png) = d7d36f56e1940251f9804bd795ef4157
    

    But ImageMagick knows images better, and its calculated hashes (checksum) over pixel data only (not including metadata) are the same:

    identify -format "%#:%f\n" red.gif redDifferentDate.png 
    1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
    1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:redDifferentDate.png
    

    3. Compare two images with identical pixels, but totally different sizes and formats

    convert -size 128x128 xc:red red.png                    # Make red PNG
    convert -size 128x128 xc:red red.gif                    # Make red  GIF
    compare -metric AE red.png red.gif result.png           # Count differing pixels
    0                                                       # No difference
    

    But, files and md5 hashes differ:

    diff red.png red.gif
    Binary files red.png and red.gif differ
    
    md5 red.png red.gif 
    MD5 (red.png) = aed0840c2c99425c25bd782e7b409022
    MD5 (red.gif) = 5869df00d7b3cab3495a6c402ba61ec9
    

    Again, ImageMagick knows better and the hashes over pixel data only (not including metadata) are still the same:

    identify -format "%#:%f\n" red.gif red.png 
    1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
    1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.png
    

    4. Compare two grossly different files

    Obviously if we create two grossly different files each full of random noise, everyone agrees they are different:

    convert -size 128x128 xc:gray +noise random random1.png   # Make random image
    convert -size 128x128 xc:gray +noise random random2.png   # Make random image
    compare -metric AE random[12].png result.png              # Count differing pixels
    16384                                                     # Yep, a fair few differ!
    

    There are other metrics available, such as MeanSquared, RootMeanSquared etc - you can list them using:

    identify -list metric
    

    Output

    AE
    Fuzz
    MAE
    MEPP
    MSE
    NCC
    PAE
    PHASH
    PSNR
    RMSE
    
    0 讨论(0)
提交回复
热议问题