USGS

Isis 3.0 Object Programmers' Reference

Home

Isis::TiffImporter Class Reference

Imports TIFF images as Isis cubes. More...

#include <TiffImporter.h>

Inheritance diagram for Isis::TiffImporter:
Inheritance graph
Collaboration diagram for Isis::TiffImporter:
Collaboration graph

Public Member Functions

 TiffImporter (FileName inputName)
 Construct the importer.
 
virtual ~TiffImporter ()
 Destruct the importer.
 
virtual PvlGroup convertProjection () const
 Convert any projection information associated with the input image to an ISIS Mapping group in PVL form.
 
virtual bool isGrayscale () const
 Tests to see if the input image has a "min is white" or "min is black" photometric interpretation, implying grayscale (no RGB/A).
 
virtual bool isRgb () const
 Tests to see if the input image is neither grayscale nor has more than three samples per pixel, implying RGB (no alpha).
 
virtual bool isArgb () const
 Tests to see if the input image is not grayscale and has more than three samples per pixel, implying RGBA.
 
void operator() (Buffer &out) const
 The method for processing the output cube in place, called for each line of the output image.
 
Cubeimport (FileName outputName)
 Import the image with default output attributes.
 
Cubeimport (FileName outputName, CubeAttributeOutput &att)
 Import the input image this instance was constructed with into the given output Isis cube with the given output attributes.
 
void setNullRange (double min, double max)
 Set the range of DN values within which a pixel from the input image will be set to Null in the output.
 
void setLrsRange (double min, double max)
 Set the range of DN values within which a pixel from the input image will be set to LRS in the output.
 
void setHrsRange (double min, double max)
 Set the range of DN values within which a pixel from the input image will be set to HRS in the output.
 
void setSamples (int s)
 Set the sample dimension (width) of the output image.
 
void setLines (int l)
 Set the line dimension (height) of the output image.
 
void setBands (int b)
 Set the band dimension (depth) of the output image.
 
int samples () const
 The sample dimension (width) of the output image.
 
int lines () const
 The line dimension (height) of the output image.
 
int bands () const
 The band dimension (depth) of the output image.
 
FileName filename () const
 The filename of the input image this instance was constructed with.
 

Static Public Member Functions

static ImageImporterfromFileName (FileName inputName)
 A static (factory) method for constructing an ImageImporter instance from an input filename.
 

Protected Types

typedef int(ImageImporter::* GetChannelMethod )(int pixel) const
 Friendly alias for a method used to get a particular color channel.
 

Protected Member Functions

int samplesPerPixel () const
 The number of "samples" (bands in Isis terms) per pixel in the input image.
 
virtual void updateRawBuffer (int line, int band) const
 Does nothing as LibTIFF reads the entire input image into memory, and therefore does not need to be updated throughout the import process.
 
virtual int getPixel (int s, int l) const
 Returns a representation of a pixel for the input format that can then be broken down into specific gray or RGB/A components.
 
virtual int getGray (int pixel) const
 Retrieves the gray component of the given pixel.
 
virtual int getRed (int pixel) const
 Retrieves the red component of the given pixel.
 
virtual int getGreen (int pixel) const
 Retrieves the green component of the given pixel.
 
virtual int getBlue (int pixel) const
 Retrieves the blue component of the given pixel.
 
virtual int getAlpha (int pixel) const
 Retrieves the alpha component of the given pixel.
 
CubecreateOutput (FileName outputName, CubeAttributeOutput &att)
 Create the output cube from the given filename and attributes.
 
void setDefaultBands ()
 Set the number of bands to be created for the output cube based on the number of color channels in the input image.
 
double testSpecial (double pixel) const
 Tests a pixel against the Null, HRS, and LRS ranges defined by the importer's handler.
 
virtual GetChannelMethod getBandChannel (int band) const
 Retrieve the method responsible for fetching the color channel from the input image corresponding to the current band out of output being filled.
 
virtual int convertRgbToGray (int pixel) const
 Convert the current pixel, taken from an RGB/A image, and blend its RGB components into a single grayscale DN.
 

Private Member Functions

Pvl gdalItems (const Pvl &outPvl) const
 Convert items in the GDAL tag to the ISIS mapping group.
 
Pvl upperLeftXY (const Pvl &inLab) const
 Convert the Tiff Tiepoint tag data to Upper Left X & Y values for the ISIS cube label mapping group.
 
Pvl resolution (const Pvl &inLab) const
 Convert the Tiff PixelScale tag data to a singe resolution for the ISIS cube label mapping group.
 

Private Attributes

TIFF * m_image
 LibTIFF representation of the input image.
 
uint32 * m_raster
 Buffer holding the raw TIFF image in memory.
 
uint16 m_photo
 The enumerated photometric interpretation of the input image.
 
uint16 m_samplesPerPixel
 The number of "samples" (bands in Isis terms) in the input image.
 
GTIF * m_geotiff
 GeoTiff hanele.
 
PvlGroup m_map
 ISIS Mapping group.
 

Detailed Description

Imports TIFF images as Isis cubes.

Takes a TIFF input image and imports it into Isis in the cube format. Unlike Qt's facilities for importing TIFFs, this class is capable of importing images >2GB, provided the user's machine has sufficient RAM to hold such an image in memory.

Author
2012-03-16 Travis Addair
Todo:

Read chunks of the image into memory at a time, not the entire image.

Add all ISIS projection to the convertProjection member.

History:

2012-03-28 Travis Addair - Added documentation.

2013-12-11 Stuart Sides - Added new member convterProjection. This is for converting GeoTiff projection tags to standard ISIS Mapping lables.

Definition at line 61 of file TiffImporter.h.

Member Typedef Documentation

typedef int(ImageImporter::* Isis::ImageImporter::GetChannelMethod)(int pixel) const
protectedinherited

Friendly alias for a method used to get a particular color channel.

Definition at line 113 of file ImageImporter.h.

Constructor & Destructor Documentation

Isis::TiffImporter::TiffImporter ( FileName  inputName)
Isis::TiffImporter::~TiffImporter ( )
virtual

Destruct the importer.

Definition at line 79 of file TiffImporter.cpp.

References m_geotiff, m_image, and m_raster.

Member Function Documentation

int Isis::ImageImporter::bands ( ) const
inherited

The band dimension (depth) of the output image.

Returns
The band dimension

Definition at line 292 of file ImageImporter.cpp.

Referenced by Isis::JP2Importer::JP2Importer().

PvlGroup Isis::TiffImporter::convertProjection ( ) const
virtual

Convert any projection information associated with the input image to an ISIS Mapping group in PVL form.

Currently this routine only handles GeoTiff tags containing UTM projection parameters. NOTE: As written, this only works for a few projections. The tranlsation files can be extened to work for more, but the whole design needs to be generalized and thought out.

References: http://www.remotesensing.org/geotiff/spec/geotiffhome.html

Returns
The ISIS PVL mapping group
Todo:
Generalize this and make it work for all ISIS projections (preferably without changes when new projections are added to ISIS)

Reimplemented from Isis::ImageImporter.

Definition at line 104 of file TiffImporter.cpp.

References Isis::PvlObject::addGroup(), Isis::ProjectionFactory::Create(), Isis::PvlObject::findGroup(), gdalItems(), Isis::TProjection::LocalRadius(), m_geotiff, Isis::PI(), resolution(), Isis::toString(), Isis::TProjection::TrueScaleLatitude(), and upperLeftXY().

int Isis::ImageImporter::convertRgbToGray ( int  pixel) const
protectedvirtualinherited

Convert the current pixel, taken from an RGB/A image, and blend its RGB components into a single grayscale DN.

The three color components are weighted by the following formula:

gray = (red * 11 + green * 16 + blue * 5) / 32

This formula was taken from the Qt documentation on converting an RGB value to grayscale: http://qt-project.org/doc/qt-4.8/qcolor.html#qGray-2

Parameters
pixelThe pixel value to be broken up into RGB components and converted to grayscale
Returns
The grayscale DN value

Definition at line 393 of file ImageImporter.cpp.

Referenced by Isis::JP2Importer::getGray(), and getGray().

Cube * Isis::ImageImporter::createOutput ( FileName  outputName,
CubeAttributeOutput att 
)
protectedinherited

Create the output cube from the given filename and attributes.

Set its dimensions based on those encapsulated by the importer.

Parameters
outputNameThe filename of the output cube
attThe attributes for writing the output cube
Returns
The newly created cube handle devoid of any data

Definition at line 173 of file ImageImporter.cpp.

References Isis::Cube::setDimensions().

FileName Isis::ImageImporter::filename ( ) const
inherited

The filename of the input image this instance was constructed with.

Returns
A copy of the input filename

Definition at line 302 of file ImageImporter.cpp.

Referenced by Isis::JP2Importer::JP2Importer().

ImageImporter * Isis::ImageImporter::fromFileName ( FileName  inputName)
staticinherited

A static (factory) method for constructing an ImageImporter instance from an input filename.

The specific subclass of the returned instance is determined from the interpreted image format of the input image. Such tests are done by reading a minimal amount of the input data necessary to determine the format. It is the caller's responsibility to delete the importer instance when they are finished with it. Note that deleting the importer will also delete the cube handle returned by the import() method.

Parameters
inputNameThe filename of the input image to be imported
Returns
A pointer to the instantiated importer owned by the caller

Definition at line 414 of file ImageImporter.cpp.

References _FILEINFO_, and Isis::IException::Programmer.

Pvl Isis::TiffImporter::gdalItems ( const Pvl inLab) const
private

Convert items in the GDAL tag to the ISIS mapping group.

This includes the min/max lats/lons

Returns
The ISIS PVL with a mapping group

Definition at line 365 of file TiffImporter.cpp.

References Isis::PvlObject::findGroup(), m_image, and Isis::toString().

Referenced by convertProjection().

int Isis::TiffImporter::getAlpha ( int  pixel) const
protectedvirtual

Retrieves the alpha component of the given pixel.

Parameters
pixelRepresentation of a LibTIFF pixel value
Returns
The alpha component

Implements Isis::ImageImporter.

Definition at line 629 of file TiffImporter.cpp.

ImageImporter::GetChannelMethod Isis::ImageImporter::getBandChannel ( int  band) const
protectedvirtualinherited

Retrieve the method responsible for fetching the color channel from the input image corresponding to the current band out of output being filled.

This will always be the getGray() method for single band output images. For RGB/A images, band 1 will be red, band 2 green, band 3 blue, and band 4 alpha.

Parameters
bandThe current band of the output image
Returns
The method that converts input pixels into the current band's color component

Definition at line 348 of file ImageImporter.cpp.

References _FILEINFO_, Isis::ImageImporter::getAlpha(), Isis::ImageImporter::getBlue(), Isis::ImageImporter::getGray(), Isis::ImageImporter::getGreen(), Isis::ImageImporter::getRed(), and Isis::IException::Programmer.

int Isis::TiffImporter::getBlue ( int  pixel) const
protectedvirtual

Retrieves the blue component of the given pixel.

Parameters
pixelRepresentation of a LibTIFF pixel value
Returns
The blue component

Implements Isis::ImageImporter.

Definition at line 617 of file TiffImporter.cpp.

int Isis::TiffImporter::getGray ( int  pixel) const
protectedvirtual

Retrieves the gray component of the given pixel.

In LibTIFF, even grayscale images are given RGB channels, so converts the RGB components into grayscale regardless of input photometric interpretation.

Parameters
pixelRepresentation of a LibTIFF pixel value
Returns
The gray component

Implements Isis::ImageImporter.

Definition at line 581 of file TiffImporter.cpp.

References Isis::ImageImporter::convertRgbToGray().

int Isis::TiffImporter::getGreen ( int  pixel) const
protectedvirtual

Retrieves the green component of the given pixel.

Parameters
pixelRepresentation of a LibTIFF pixel value
Returns
The green component

Implements Isis::ImageImporter.

Definition at line 605 of file TiffImporter.cpp.

int Isis::TiffImporter::getPixel ( int  s,
int  l 
) const
protectedvirtual

Returns a representation of a pixel for the input format that can then be broken down into specific gray or RGB/A components.

Parameters
sThe sample of the desired pixel
lThe line of the desired pixel
Returns
The pixel at the given sample and line of the input with all channel info

Implements Isis::ImageImporter.

Definition at line 565 of file TiffImporter.cpp.

References Isis::ImageImporter::lines(), m_raster, and Isis::ImageImporter::samples().

int Isis::TiffImporter::getRed ( int  pixel) const
protectedvirtual

Retrieves the red component of the given pixel.

Parameters
pixelRepresentation of a LibTIFF pixel value
Returns
The red component

Implements Isis::ImageImporter.

Definition at line 593 of file TiffImporter.cpp.

Cube * Isis::ImageImporter::import ( FileName  outputName)
inherited

Import the image with default output attributes.

Parameters
outputNameThe filename of the output cube

Definition at line 102 of file ImageImporter.cpp.

Cube * Isis::ImageImporter::import ( FileName  outputName,
CubeAttributeOutput att 
)
inherited

Import the input image this instance was constructed with into the given output Isis cube with the given output attributes.

This will do a black-box import using a ProcessByLine routine. The BandBin group will be updated in the output cube with the names of the color channels included. The output cube will be returned on completion of the import process so the caller can continue to modify the labels. The importer instance will retain ownership of this cube, such that the cube handle will be deallocated upon destruction of the importer.

Parameters
outputNameThe filename of the output cube
attThe attributes for writing the output cube
Returns
A handle on the newly imported Isis cube owned by the importer

Definition at line 123 of file ImageImporter.cpp.

References _FILEINFO_, Isis::PvlObject::addGroup(), Isis::ProcessByBrick::EndProcess(), Isis::PvlObject::findObject(), Isis::PvlContainer::keywords(), Isis::Cube::label(), Isis::ProcessByLine::ProcessCubeInPlace(), Isis::IException::Programmer, Isis::ProcessByLine::SetInputCube(), Isis::ProcessByBrick::SetProcessingDirection(), and Isis::Process::WriteHistory().

bool Isis::TiffImporter::isArgb ( ) const
virtual

Tests to see if the input image is not grayscale and has more than three samples per pixel, implying RGBA.

Returns
True if the image is RGBA, false otherwise

Implements Isis::ImageImporter.

Definition at line 539 of file TiffImporter.cpp.

References isGrayscale(), and samplesPerPixel().

bool Isis::TiffImporter::isGrayscale ( ) const
virtual

Tests to see if the input image has a "min is white" or "min is black" photometric interpretation, implying grayscale (no RGB/A).

Returns
True if the image is grayscale, false otherwise

Implements Isis::ImageImporter.

Definition at line 515 of file TiffImporter.cpp.

References m_photo.

Referenced by isArgb(), and isRgb().

bool Isis::TiffImporter::isRgb ( ) const
virtual

Tests to see if the input image is neither grayscale nor has more than three samples per pixel, implying RGB (no alpha).

Returns
True if the image is RGB, false otherwise

Implements Isis::ImageImporter.

Definition at line 528 of file TiffImporter.cpp.

References isGrayscale(), and samplesPerPixel().

int Isis::ImageImporter::lines ( ) const
inherited

The line dimension (height) of the output image.

Returns
The line dimension

Definition at line 282 of file ImageImporter.cpp.

Referenced by getPixel(), and TiffImporter().

void Isis::ImageImporter::operator() ( Buffer out) const
inherited

The method for processing the output cube in place, called for each line of the output image.

Enables the importer to be used as a functor in a custom ProcessByLine routine, bypassing the black-box import() method entirely. Care should be taken, however, to observe the requirements placed on the structure of such a processing routine by this method. For example, the JP2Importer child requires that the processing proceed in the direction of bands before lines, because its input data is structured in a BIL (band interlaced by line) format.

Parameters
outA reference to a line of output data to be written to

Definition at line 78 of file ImageImporter.cpp.

References Isis::Buffer::Band(), Isis::Buffer::Line(), and Isis::Buffer::SampleDimension().

Pvl Isis::TiffImporter::resolution ( const Pvl inLab) const
private

Convert the Tiff PixelScale tag data to a singe resolution for the ISIS cube label mapping group.

Returns
The ISIS PVL mapping group

Definition at line 469 of file TiffImporter.cpp.

References _FILEINFO_, Isis::PvlObject::findGroup(), m_image, Isis::toString(), and Isis::IException::User.

Referenced by convertProjection().

int Isis::ImageImporter::samples ( ) const
inherited

The sample dimension (width) of the output image.

Returns
The sample dimension

Definition at line 272 of file ImageImporter.cpp.

Referenced by getPixel(), Isis::JP2Importer::JP2Importer(), and TiffImporter().

int Isis::TiffImporter::samplesPerPixel ( ) const
protected

The number of "samples" (bands in Isis terms) per pixel in the input image.

Combined with the photometric interpretation, this can be used to determine the color mode of the input image. We need both pieces of information because grayscale images are not guaranteed to have only one sample per pixel.

Returns
The samples per pixel

Definition at line 504 of file TiffImporter.cpp.

References m_samplesPerPixel.

Referenced by isArgb(), and isRgb().

void Isis::ImageImporter::setBands ( int  b)
inherited

Set the band dimension (depth) of the output image.

Because this importer only works on Grayscale, RGB, and RGBA images, possible values are 1, 3, and 4 for the respective color modes.

Parameters
bThe new band dimension

Definition at line 257 of file ImageImporter.cpp.

References _FILEINFO_, and Isis::IException::Programmer.

Referenced by Isis::JP2Importer::JP2Importer().

void Isis::ImageImporter::setDefaultBands ( )
protectedinherited

Set the number of bands to be created for the output cube based on the number of color channels in the input image.

Definition at line 186 of file ImageImporter.cpp.

Referenced by Isis::QtImporter::QtImporter(), and TiffImporter().

void Isis::ImageImporter::setHrsRange ( double  min,
double  max 
)
inherited

Set the range of DN values within which a pixel from the input image will be set to HRS in the output.

Parameters
minAny DN less than this value will not be set to HRS.
maxAny DN greater than this value will not be set to HRS.

Definition at line 224 of file ImageImporter.cpp.

void Isis::ImageImporter::setLines ( int  l)
inherited

Set the line dimension (height) of the output image.

Parameters
lThe new line dimension

Definition at line 245 of file ImageImporter.cpp.

Referenced by Isis::JP2Importer::JP2Importer(), Isis::QtImporter::QtImporter(), and TiffImporter().

void Isis::ImageImporter::setLrsRange ( double  min,
double  max 
)
inherited

Set the range of DN values within which a pixel from the input image will be set to LRS in the output.

Parameters
minAny DN less than this value will not be set to LRS.
maxAny DN greater than this value will not be set to LRS.

Definition at line 211 of file ImageImporter.cpp.

void Isis::ImageImporter::setNullRange ( double  min,
double  max 
)
inherited

Set the range of DN values within which a pixel from the input image will be set to Null in the output.

Parameters
minAny DN less than this value will not be set to Null.
maxAny DN greater than this value will not be set to Null.

Definition at line 198 of file ImageImporter.cpp.

void Isis::ImageImporter::setSamples ( int  s)
inherited

Set the sample dimension (width) of the output image.

Parameters
sThe new sample dimension

Definition at line 235 of file ImageImporter.cpp.

Referenced by Isis::JP2Importer::JP2Importer(), Isis::QtImporter::QtImporter(), and TiffImporter().

double Isis::ImageImporter::testSpecial ( double  pixel) const
protectedinherited

Tests a pixel against the Null, HRS, and LRS ranges defined by the importer's handler.

Any pixel value falling within one of these ranges will be converted into the given type of special pixel. In case of overlapping ranges, these tests will be performed in the order mentioned at the start of this description. By default, these ranges are set such that all incoming pixels will retain their original values.

Parameters
pixelThe DN value to be tested
Returns
The valid DN or special pixel if it fell within the special ranges

Definition at line 319 of file ImageImporter.cpp.

void Isis::TiffImporter::updateRawBuffer ( int  line,
int  band 
) const
protectedvirtual

Does nothing as LibTIFF reads the entire input image into memory, and therefore does not need to be updated throughout the import process.

Parameters
lineCurrent line of the output buffer
bandCurrent band of the output buffer

Implements Isis::ImageImporter.

Definition at line 551 of file TiffImporter.cpp.

Pvl Isis::TiffImporter::upperLeftXY ( const Pvl inLab) const
private

Convert the Tiff Tiepoint tag data to Upper Left X & Y values for the ISIS cube label mapping group.

Returns
The ISIS PVL mapping group

Definition at line 424 of file TiffImporter.cpp.

References _FILEINFO_, Isis::PvlContainer::deleteKeyword(), Isis::PvlObject::findGroup(), Isis::PvlContainer::hasKeyword(), m_image, Isis::toString(), and Isis::IException::User.

Referenced by convertProjection().

Member Data Documentation

GTIF* Isis::TiffImporter::m_geotiff
private

GeoTiff hanele.

Definition at line 98 of file TiffImporter.h.

Referenced by convertProjection(), TiffImporter(), and ~TiffImporter().

TIFF* Isis::TiffImporter::m_image
private

LibTIFF representation of the input image.

Definition at line 86 of file TiffImporter.h.

Referenced by gdalItems(), resolution(), TiffImporter(), upperLeftXY(), and ~TiffImporter().

PvlGroup Isis::TiffImporter::m_map
private

ISIS Mapping group.

Definition at line 101 of file TiffImporter.h.

uint16 Isis::TiffImporter::m_photo
private

The enumerated photometric interpretation of the input image.

Definition at line 92 of file TiffImporter.h.

Referenced by isGrayscale(), and TiffImporter().

uint32* Isis::TiffImporter::m_raster
private

Buffer holding the raw TIFF image in memory.

Definition at line 89 of file TiffImporter.h.

Referenced by getPixel(), TiffImporter(), and ~TiffImporter().

uint16 Isis::TiffImporter::m_samplesPerPixel
private

The number of "samples" (bands in Isis terms) in the input image.

Definition at line 95 of file TiffImporter.h.

Referenced by samplesPerPixel(), and TiffImporter().


The documentation for this class was generated from the following files: