Image Data Wrappers

The image viewer can load data in a number of formats, but all formats are wrapped with a class that corresponds to the model part of the model-view-controller design used by Ginga. These wrappers make the data accessible in a common interface for the image viewer. The most common wrappers are AstroImage and RGBImage, for single band (i.e. “monchromatic”) and multi-band (i.e. “RGB”) data, respectively.


An AstroImage combines image data with metadata (including keywords) and optionally, world coordinate information.

Data can be loaded in a number of ways. For the following examples, assume that we created a wrapper object via:

>>> from ginga.AstroImage import AstroImage
>>> img = AstroImage()


Ginga provides extensive logging throughout the code, so if you are using a Python logger you can pass it to the constructor to have it log extra information about errors when methods on the image object are being used. Assuming you had a logger configured as logger you would pass it like so:

>>> img = AstroImage(logger=logger)

Once you have an object, you can load data directly contained in a numpy.ndarray:

>>> import numpy as np
>>> data = np.random.randint(0, 10000, (2000, 3000), dtype=np.uint)
>>> img.load_data(data)


if you want to provide metadata (e.g. a separate set of FITS-type keywords) you can add it:

>>> img.update_keywords(kw_dict)

From an

>>> from import fits
>>> with"/path/to/image.fits") as fits_f:
>>>     img.load_hdu(fits_f[0])

From an astropy.nddata.NDData (or subclass, like CCDData):

>>> img.load_nddata(ndd_obj)

Files are best loaded from the appropriate file format loader module. For a FITS file:

>>> from ginga.util import io_fits
>>> img = io_fits.load_file("/path/to/image.fits")

Or, e.g. to choose a particular HDU:

>>> from ginga.util import io_fits
>>> img = io_fits.load_file("/path/to/image.fits[SCI]")


The RGBImage class is used to store conventional type 3 or 4-band RGB images.

>>> from ginga.RGBImage import RGBImage
>>> img = RGBImage()


RGBImage constructor also supports the logger keyword parameter described above:

>>> img = RGBImage(logger=logger)

RGB images support the load_data method (note the shape and type of the array):

>>> data = np.random.randint(0, 256, (1000, 1000, 3), dtype=np.uint8)
>>> img.load_data(data)

Files can also be loaded from standard RGB formats (PNG, JPEG, etc) using the io_rgb module:

>>> from ginga.util import io_rgb
>>> img = io_rgb.load_file("/path/to/image.jpg")