Fred's ImageMagick Scripts



    Licensing:

    Copyright © Fred Weinhaus

    My scripts are available free of charge for non-commercial (non-profit) use, ONLY.

    For use of my scripts in commercial (for-profit) environments or non-free applications, please contact me (Fred Weinhaus) for licensing arrangements. My email address is fmw at alink dot net.

    If you: 1) redistribute, 2) incorporate any of these scripts into other free applications or 3) reprogram them in another scripting language, then you must contact me for permission, especially if the result might be used in a commercial or for-profit environment.

    Usage, whether stated or not in the script, is restricted to the above licensing arrangements. It is also subject, in a subordinate manner, to the ImageMagick license, which can be found at: http://www.imagemagick.org/script/license.php

    Please read the Pointers For Use on my home page to properly install and customize my scripts.

RMSECORR


Computes the root mean squared correlation surface to find where a small image best matches within a larger image.

Download Script

last modified: December 15, 2018



USAGE: rmsecorr [-s] [-p] [-m mode] [-c color] smallfile largefile corrfile [matchfile]
USAGE: rmsecorr [-h or -help]

-s .............. stretch the correlation surface to full dynamic range so
................. that the best match is full white; default is unstretched
-p .............. apply a pseudocolor to the correlation surface image;
................. default is no pseudocoloring
-m .... mode .... mode for matchfile output; choices are: draw, overlay or
................. best; draw colored box at best match location, overlay
................. the small image at match location on a one half transparent
................. large image or output the best match subsection;
................. default=draw
-c .... color ... color to use for drawing box on large image where best
................. matched subsection was found; default=black

PURPOSE: To compute the root mean squared correlation surface to find where a small image best matches within a larger image.

DESCRIPTION: RMSECORR computes the root mean squared correlation surface (image) to find where a small (first) image best matches within a larger (second) image. Any alpha channel on either image will be removed automatically before processing. Values in the correlation surface can vary between 0 and 1, with a perfect match being 0. The correlation image will be negated automatically for easier viewing.

ARGUMENTS:

-s ... Stretch the normalized cross correlation surface image to full dynamic range so that the best match is full white. Default is no stretch

-p ... Apply a pseudocoloring to the normalized cross correlation surface image where red corresponds to the highest values and purple to the lowest values. Default is no pseudocoloring.

-m mode ... MODE is the layout mode for the optional matchfile image. Choices are draw (or d), overlay (or o) or best (or b). Draw simply draws a colored box outline at the best match subsection in the larger image. Overlay inserts the small image at the match location of a 30% opaque version of the larger image. Best outputs the subsection of the larger image that best matches the smaller image. The default="draw". Ignored if no matchfile specified.

-c color ... COLOR is the color to use to draw the outline of the best matching subsection in the larger image when mode=draw. Any valid IM color specification may be used. The default=black.

REQUIREMENTS: IM version 6.5.4-7 or higher, but compiled with HDRI enabled in any quantum level of Q8, Q16 or Q32. Also requires the FFTW delegate library.

REFERENCES:
http://en.wikipedia.org/wiki/Root_mean_squared_error

See Fourier Transform Processing with ImageMagick, for more details.

CAVEAT: No guarantee that this script will work on all platforms, nor that trapping of inconsistent parameters is complete and foolproof. Use At Your Own Risk.


EXAMPLES


Small Image
(subsection [64x64+32+27])

Large Image

Arguments:
(none)
Match Coords: (32,27) And Score In Range 0 to 1: (0.00518288)

Correlation Image

Match Location

Arguments:
-s -p
Match Coords: (32,27) And Score In Range 0 to 1: (0.00518288)

Correlation Image

Match Location



Small Image
(subsection [23x14+156+22])

Large Image

Arguments:
-c white
Match Coords: (156,22) And Score In Range 0 to 1: (0.00637854)

Correlation Image

Match Location



What the script does is as follows:

  • Normalizes the small image by subtracting its mean value and
    dividing by its standard deviation and padding with black to fill
    it out to the same size as the large image
  • Creates a small image containing all ones but padded
    with black to the same size as the large image
  • Creates the square of the large image
  • Computes the cross correlation between these images in
    the frequency domain and transforms the results back to the
    spatial domain
  • Combines the resulting images to form the correlation result

See the script for actual code details. Or for more mathematical detail
see Fourier Transform Processing With ImageMagick