/** @file  pmFlatField.h
 *
 *  @brief Given an input image and a flat field image, pmFlatField shall divide the input image by the flat
 *  field image.
 *
 *  The input image, in, and the flat field image, flat, need not be the same size, since the input image may
 *  already have been trimmed (following overscan subtraction), but the function shall use the offsets in the
 *  image (in->x0 and in->y0) to determine the appropriate offsets to obtain the correct pixel on the flat
 *  field. In the event that the flat image is too small (i.e., pixels on the input image refer to pixels
 *  outside the range of the flat image), the function shall generate an error. Pixels which are negative or
 *  zero in the flat shall be masked in the input image with the value PM_MASK_FLAT. Negative pixels in the
 *  flat may be set to zero so that they are treated identically to zeroes. Any pixels masked in the flat
 *  shall be masked with corresponding values in the output. The function shall not normalize the flat; this
 *  responsibility is left to the caller. This function is basically equivalent to a divide (with psImageOp),
 *  but with care for the region that is divided, checking for negative pixels, and copying of the mask from
 *  the flat to the output.
 *
 *  @author Ross Harman, MHPCC
 *
 *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
 *  @date $Date: 2005-10-20 23:06:24 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
 */

#include "pslib.h"
#include "pmAstrometry.h"


/** Execute flat field module.
 *
 *  Given an input image and a flat-field image, pmFlatField shall divide the input image by the flat field
 *  image.
 *
 *  @return  bool: True or false for success or failure
 */
bool pmFlatField(
    pmReadout *in,          ///< Readout with input image
    const pmReadout *flat   ///< Readout with flat image
);

