Fred's ImageMagick Scripts



    Licensing:

    Copyright © Fred Weinhaus

    My scripts are available free of charge for non-commercial 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

PHASECORR


Computes the phase correlation surface to find where a small image best matches within a larger image.

Download Script

last modified: July 28, 2015



USAGE: phasecorr [-s] [-p] [-m mode] [-c color] [-t type] smallfile largefile corrfile [matchfile]
USAGE: phasecorr [-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 or overlay;
................. draw colored box at best match location or
................. overlay the small image at match location on a one half
................. transparent large image; default=draw
-c .... color ... color to use for drawing box on large image where best
................. matched subsection was found; default=black
-t .... type .... type of approach used to combine color correlation results
................. into a single grayscale surface image; choices are: gray,
................. rec709luma, rec601luma, average and rms; default=gray

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

DESCRIPTION: PHASECORR computes the phase 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 for a perfect match will be a single white dot on a black background. For non-perfect matches, the spike will spread and the background will not be pure black.

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) or overlay (or o). 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. 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.

-t type ... TYPE of approach used to combine color correlation results into a single grayscale surface image. The choices are: gray, rec709luma, rec601luma, average and rms. The default=gray. Note that average and rms require IM 6.8.5.5 or higher.

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/Phase_correlation

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


Image A

Image B

Arguments:
-s
Match Coords: (20,23) And Score In Range 0 to 1: (0.107185)

Correlation Image



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

Large Image

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

Correlation Image

Match Location



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

Large Image

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

Correlation Image

Match Location



What the script does is as follows:

  • Compute the real-imaginary component FFT of the small image
    and divide by the magnitude of the components
  • Compute the real-imaginary components of the large image
    and divide by the magnitude of the components
  • Computes the cross correlation between these images
  • Compute the real-imaginary component IFT of the cross correlation result

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