
Montage Montage is an astronomical image toolkit with components for reprojection, background matching, coaddition and visualization of FITS files. It can be used as a set of command-line tools (Linux, OS X and Windows), C library calls (Linux and OS X) and as Python binary extension modules.
The Montage source is written in ANSI-C and code can be downloaded from GitHub ( https://github.com/Caltech-IPAC/Montage ). The Python package can be installed from PyPI ("</i>pip install MontagePy"). The package has no external dependencies. See http://montage.ipac.caltech.edu/ for details on the design and applications of Montage.
It is often the case that only a small piece of an image is needed for science or visualization purposes. mSubimage provides a way to cut out such a piece and still maintain all the header and projection information.
from MontagePy.main import mSubimage, mViewer
help(mSubimage)
In this example, we will cut a small region from the center of a large mosaic, using the default center coordinate/size mode:
rtn = mSubimage('M17/mosaic_small.fits', 
                'work/M17/mosaic_small_subimage.fits',
                275.19629, -16.17153, 0.3, 0.3)
print(rtn)
Here are the original image and the cutout:
from IPython.display import HTML, display, Image
mViewer('-ct 1 -gray M17/mosaic_small.fits \
         -2s max gaussian-log -out work/M17/mosaic_small.png',
        '', mode=2)
Image(filename='work/M17/mosaic_small.png')
mViewer('-ct 1 -gray work/M17/mosaic_small_subimage.fits \
         -2s max gaussian-log -out work/M17/mosaic_small_subimage.png',
        '', mode=2)
Image(filename='work/M17/mosaic_small_subimage.png')
If mSubimage encounters an error, the return structure will just have two elements: a status of 1 ("error") and a message string that tries to diagnose the reason for the error.
For instance, if the user specifies an image that doesn't exist:
rtn = mSubimage('input/M17/unknown.fits', 
                'work/M17/cutout.fits', 
                275.19629, -16.17153, 0.3, 0.3)
print(rtn)
mSubimage can also be run as a command-line tool in Linux, OS X, and Windows:
Usage: mSubimage [-d][-a(ll pixels)][-h hdu][-s statusfile] in.fit out.fit ra dec xsize [ysize] | mSubimage -p [-d][-h hdu][-s statusfile] in.fit out.fit xstartpix ystartpix xpixsize [ypixsize] | mSubimage -c [-d][-h hdu][-s statusfile] in.fit out.fit
If you are writing in C/C++, mSubimage can be accessed as a library function:
/*-***********************************************************************/
/*                                                                       */
/*  mSubimage                                                            */
/*                                                                       */
/*  This program subsets an input image around a location of interest    */
/*  and creates a new output image consisting of just those pixels.      */
/*  The location is defined by the RA,Dec (J2000) of the new center and  */
/*  the XY size in degrees of the area (X and Y) in the direction of     */
/*  the image axes, not Equatorial coordinates.                          */
/*                                                                       */
/*   char  *infile         Input FITS file                               */
/*   char  *outfile        Subimage output FITS file                     */
/*                                                                       */
/*   double ra             RA of cutout center (or start X pixel in      */
/*                         PIX mode                                      */
/*   double dec            Dec of cutout center (or start Y pixel in     */
/*                         PIX mode                                      */
/*                                                                       */
/*   double xsize          X size in degrees (SKY mode) or pixels        */
/*                         (PIX mode)                                    */
/*   double ysize          Y size in degrees (SKY mode) or pixels        */
/*                         (PIX mode)                                    */
/*                                                                       */
/*   int    mode           Processing mode. The two main modes are       */
/*                         0 (SKY) and 1 (PIX), corresponding to cutouts */
/*                         are in sky coordinate or pixel space. The two */
/*                         other modes are 3 (HDU) and 4 (SHRINK), where */
/*                         the region parameters are ignored and you get */
/*                         back either a single HDU or an image that has */
/*                         had all the blank border pixels removed.      */
/*                                                                       */
/*   int    hdu            Optional HDU offset for input file            */
/*   int    nowcs          Indicates that the image has no WCS info      */
/*                         (only makes sense in PIX mode)                */
/*                                                                       */
/*   int    debug          Debugging output level                        */
/*                                                                       */
/*************************************************************************/
struct mSubimageReturn *mSubimage(char *infile, char *outfile, double ra, double dec, 
                                  double xsize, double ysize, int mode, int hdu, int nowcs, int debugin)
Return Structure
struct mSubimageReturn
{
   int    status;        // Return status (0: OK, 1:ERROR)
   char   msg    [1024]; // Return message (for error return)
   char   json   [4096]; // Return parameters as JSON string
   char   content[1024]; // String giving an idea of output content (e.g., 'blank', 'flat', or 'normal'.   
};