.help imio Mar86 "Image I/O Modifications" .ce \fBImage I/O Modifications to Support Multiple Data Formats\fR .ce Doug Tody .ce March 16, 1986 .nh Introduction The primary purpose of this revision of IMIO was to add support for multiple disk data formats. This was done by defining a new interface called IMH, which hides the details of how images are stored on disk from the IMIO code. IMIO is concerned only with image i/o based on an internal image descriptor. IMIO calls IMH to perform all imagefile management operations, but accesses the pixel data directly using the FIO interface. The IMH interface initially supports only the old IRAF and SDAS image formats, but may be extended to support other formats in the future if necessary. The IMH interface should be reusable in the future when IMIO is layered upon DBIO. A secondary purpose of this revision was to make several minor enhancements to IMIO to better support groups of images. The image template syntax has been extended to provide a special selection syntax for specifying the subset of the images in a group or set of groups to be operated upon. Minor changes were made to the filenames of the files used to store IRAF format images to make identification of the header and pixel files easier. The image database interface (IDB) has been extended to permit the storage of one dimensional arrays in the image header. IMIO was modified to use the static file driver rather than the regular binary file driver to access pixel data. .nh Image Templates .nh 2 Image Template Syntax An image template is an expression used to specify the set or group of images to be operated upon. The current image template syntax is upwards compatible with the planned DBIO record select/project syntax. The full syntax is as follows. images [,images ...] where \fIimages\fR is an expression built up from some combination of the following constructs: .nf @listfile take strings from a listfile pattern expand pattern against database str // str concatenate strings {select} select elements from a set [section] append image section .fi These elements may appear in any order, although not all orderings make sense. The \fIpattern\fR string may contain any of the standard pattern matching characters, but the pattern matching meta-characters {} (ignore case) and [] (character class) must be escaped to avoid interpretation as the subset selection and image section operators. An \fIimages\fR string may contain at most one list construct, i.e., listfile reference, pattern, or selection set. The \fIselect\fR expression is limited to a range list at present. The range list syntax uses the : range syntax, i.e., "from[:to[:by]]". Some examples are given below. None of templates shown in these examples need be quoted if entered in the CL command mode. .nf pix one image pix.0013 one image @pics list of images pix[*,-*] one image section @pics[*,-*] list of image sections pix.* all pix.whatever images in cwd pix.*//.flat same, but append ".flat" to image name pix.*//.flat[*,5] same, but append image section too pix{1,4,9:21} pix.0001, pix.0004, and 9 through 21 pix{1,4,9:21}[1:10,5] same, but append section to each one .fi Note that \fIselect\fR expressions are expanded without checking to see if the named images actually exist. Image names are formed by concatenating the image number encoded as a four digit string, padding with zeroes at the left as in the examples. .nh 2 Image Template Procedures The image template package (IMT) is an existing package. The calling sequences are identical to those of the FNT (FIO filename template) package and have not been changed in this release of the package. Extensive changes have however been made internally, and the new package has been installed in IMIO. The old package has been removed from the XTOOLS library. To use the new version of the package, all one need do is relink. .ks .nf list = imtopen (template) nimages = imtlen (list) imtrew (list) nchars|EOF = imtgetim (list, fname, maxch) imtclose (list) .fi .ke An image template is expanded into a list of image names or image sections with \fBimtopen\fR. The list is not globally sorted, however sublists generated by pattern matching are sorted before appending the sublist to the final list. The number of images or image sections in a list is given by \fBimtlen\fR. Images are read sequentially from the list with \fBimtgetim\fR, which returns EOF when the end of the list is reached. The list may be rewound with \fBimtrew\fR. An image template list should be closed with \fBimtclose\fR to return the buffers used to store the list and its descriptor. .nh The Image Header Access Interface (IMH) The image header access interface (IMH) is a new interface in this release of IMIO. The purposes of the IMH interface are to hide knowledge of how images are stored on disk from the rest of the system, and to make it possible to support multiple image storage formats. IMIO is not aware that there are multiple image storage formats. When called to open an existing image, IMH determines the image format and calls the appropriate lower level access procedure to read the image header. A standard set of IMH callable interface procedures are required for each supported storage format. The IMH package is intended as an internal IMIO package and should not normally be called by packages other than IMIO. .ks .nf im = imh_open (image, acmode, o_im) # open/create header imh_opix (im, acmode) # open/create pixels imh_update (im) # update header imh_close (im) # close image y/n = imh_access (image, type) # test if image exists imh_delete (image) # delete an image imh_rename (oldname, newname) # rename an image imh_copy (oldname, newname) # copy an image .fi .ke The \fIimh_open\fR procedure will open an existing image, create a new image, or make a new copy of an existing image (preserving the header of the old image but not the pixels). A pointer to an IMIO binary image descriptor is returned; when opening an existing image, the primary function of \fIimh_open\fR is to map the disk image header, stored in whatever format, into the IMIO fixed format binary descriptor. The \fIimh_opix\fR procedure must be called after the header has been opened before any pixel i/o can be done to the image. In the case of a new image the size attributes of the new image are not fixed until \fIimh_opix\fR is called (giving the high level code time to set the size parameters in the image descriptor). It is not necessary to call \fIimh_opix\fR if only the header of an existing image is to be accessed. The \fIimh_access\fR procedure is provided to test if the named image exists (no test is made to determine if the image is also accessible). An integer code identifying the storage format of the image, e.g., old IRAF or SDAS, is returned in the \fItype\fR argument. Currently, the type of an image is indicated by the filename extension of the header file. The \fIimh_rename\fR and \fIimh_copy\fR procedures are in principle not required since the operations can be performed at a high level with the procedures already provided, but the IMH operators can carry out the operations more efficiently and without the possibility of information being lost, since they have knowledge of the physical storage format. .nh Physical Data Formats The only two physical (disk) data formats currently supported are the old IRAF format and the STScI SDAS format. The IMH interface makes it relatively straightforward for other sites to interface their local format if necessary, or to support multiple versions of the same format. IMH will automatically read images stored in any of the supported formats. When making a NEW_COPY image, IMH will generate a new image in the same format as the existing input image. When making a NEW_IMAGE type image, the value of the environment variable \fBimtype\fR determines the type of image to be created. The recognized values of \fBimtype\fR are shown below. .ks .nf not defined old iraf format imtype = "oiraf" old iraf format imtype = "sdas" SDAS/SOGS format .fi .ke The format in which an image is stored is indicated by the filename extension of the header file. The filename extension is not specified in image names or templates above the IMH interface, but is visible to the user in a directory listing. .ks .nf .imh old iraf format header .hhh SDAS/SOGS format header .fi .ke The current IMH interface is implemented in such a way that the semantics of the two image storage formats are essentially equivalent, i.e., applications programs should work consistently regardless of the storage format used. In order to achieve this, the SDAS group format is fully supported only when reading existing group format images. On output, images stored in SDAS format are stored in separate files (gcount=1). The IRAF image template is more flexible than the SDAS group format, simplifies programming, and provides much the same basic capability.