USGS

Isis 3.0 Developer's Reference (API)

Home

Isis::Chip Class Reference

A small chip of data used for pattern matching. More...

#include <Chip.h>

Public Member Functions

 Chip ()
 Constructs a Chip.
 
 Chip (const Chip &other)
 Constructs a copy of the passed in chip.
 
 Chip (const int samples, const int lines)
 Construct a Chip with specified dimensions.
 
virtual ~Chip ()
 Destroys the Chip object.
 
void SetSize (const int samples, const int lines)
 Change the size of the Chip.
 
bool IsInsideChip (double sample, double line)
 
int Samples () const
 Return the number of samples in the chip.
 
int Lines () const
 Return the number of lines in the chip.
 
QString FileName () const
 Returns the expanded filename of the cube from which this chip was chipped.
 
void SetAllValues (const double &d)
 Single value assignment operator.
 
void SetValue (int sample, int line, const double &value)
 This sets a value in the chip.
 
double GetValue (int sample, int line)
 Loads a Chip with a value.
 
const double GetValue (int sample, int line) const
 Get a value from a Chip.
 
void TackCube (const double cubeSample, const double cubeLine)
 This sets which cube position will be located at the chip tack position.
 
int TackSample () const
 Return the fixed tack sample of the chip.
 
int TackLine () const
 Return the fixed tack line of the chip.
 
void Load (Cube &cube, const double rotation=0.0, const double scale=1.0, const int band=1)
 Load cube data into the Chip.
 
void Load (Cube &cube, Chip &match, Cube &matchChipCube, const double scale=1.0, const int band=1)
 Loads cube data into the Chip.
 
void Load (Cube &cube, const Affine &affine, const bool &keepPoly=true, const int band=1)
 Load a chip using an Affine transform as provided by caller.
 
void SetChipPosition (const double sample, const double line)
 Compute the position of the cube given a chip coordinate.
 
double CubeSample () const
 Returns cube sample after invoking SetChipPosition.
 
double CubeLine () const
 Returns cube line after invoking SetChipPosition.
 
void SetCubePosition (const double sample, const double line)
 Compute the position of the chip given a cube coordinate.
 
double ChipSample () const
 Returns chip sample after invoking SetCubePosition.
 
double ChipLine () const
 Returns chip line after invoking SetCubePosition.
 
void SetValidRange (const double minimum=Isis::ValidMinimum, const double maximum=Isis::ValidMaximum)
 Set the valid range of data in the chip.
 
bool IsValid (double percentage)
 Return if the pixel is valid at a particular position.
 
bool IsValid (int sample, int line)
 Returns whether the value at the given sample, line position is within the valid range.
 
Chip Extract (int samples, int lines, int samp, int line)
 Extract a sub-chip from a chip.
 
void Extract (int samp, int line, Chip &output)
 Extract a subchip centered at the designated coordinate.
 
Isis::StatisticsStatistics ()
 Returns a statistics object of the current data in the chip.
 
void Extract (Chip &output, Affine &affine)
 Extract a subchip of this chip using an Affine transform.
 
void Write (const QString &filename)
 Writes the contents of the Chip to a cube.
 
void SetClipPolygon (const geos::geom::MultiPolygon &clipPolygon)
 Sets the clipping polygon for this chip.
 
Chipoperator= (const Chip &other)
 Copy assignment operator.
 
const AffineGetTransform () const
 Returns the Affine transformation of chip-to-cube indices.
 
void SetTransform (const Affine &affine, const bool &keepPoly=true)
 Sets the internal Affine transform to new translation.
 
const Interpolator::interpType GetReadInterpolator ()
 Access method that returns the Interpolator Type used for loading a chip.
 
void SetReadInterpolator (const Interpolator::interpType type)
 Sets Interpolator Type for loading a chip.
 

Detailed Description

A small chip of data used for pattern matching.

A chip is a small rectangular area that can be used for pattern matching. Data can be loaded into the chip manually or by reading directly from a cube.

Author
2005-05-05 Jeff Anderson
See Also
AutoReg
AutoRegFactory

Constructor & Destructor Documentation

Isis::Chip::Chip ( )

Constructs a Chip.

The default size is 3x3

Isis::Chip::Chip ( const Chip other)

Constructs a copy of the passed in chip.

Parameters
otherthe chip to be copied
Isis::Chip::Chip ( const int  samples,
const int  lines 
)

Construct a Chip with specified dimensions.

Parameters
samplesnumber of samples in the chip
linesnumber of lines in the chip
Isis::Chip::~Chip ( )
virtual

Destroys the Chip object.

Member Function Documentation

double Isis::Chip::ChipLine ( ) const
inline

Returns chip line after invoking SetCubePosition.

Referenced by Isis::ChipViewport::cubeToViewport(), Isis::Centroid::select(), and Isis::AutoReg::SetSubpixelPosition().

double Isis::Chip::ChipSample ( ) const
inline

Returns chip sample after invoking SetCubePosition.

Referenced by Isis::ChipViewport::cubeToViewport(), Isis::Centroid::select(), and Isis::AutoReg::SetSubpixelPosition().

Chip Isis::Chip::Extract ( int  samples,
int  lines,
int  samp,
int  line 
)

Extract a sub-chip from a chip.

Parameters
samplesNumber of samples in the extracted chip (must be less than or equal to "this" chip)
linesNumber of lines in the extracted chip (must be less than or equal to "this" chip)
sampInput chip sample to be placed at output chip tack
lineInput chip line to be placed at output chip tack
Returns
Chip Sub-chip extracted from the chip
Exceptions
Isis::IException::Programmer- Chip extraction invalid

References _FILEINFO_, Isis::Null, SetValue(), TackLine(), and TackSample().

Referenced by Isis::InterestOperator::InterestByMeasure(), Isis::InterestOperator::Operate(), Isis::Gruen::Registration(), and Isis::AutoReg::Registration().

void Isis::Chip::Extract ( int  samp,
int  line,
Chip chipped 
)

Extract a subchip centered at the designated coordinate.

This method extracts a subchip that is centered at the given sample and line coordinate. All appropriate variables in the given chipped parameter are set appropriately prior to return.

Parameters
sampCenter (tack) sample chip coordinate to extract subchip
lineCenter (tack) line chip coordinate to extract subchip
chippedChip to load the subchip in and return to caller

References Lines(), Isis::Null, Samples(), SetValue(), TackLine(), and TackSample().

void Isis::Chip::Extract ( Chip chipped,
Affine affine 
)

Extract a subchip of this chip using an Affine transform.

This method will translate the data in this chip using an Affine transform to the output chip as provided. Note that the Affine transformation is only applied within the confines of this chip. No file I/O is performed.

A proper Affine transform should not deviate too much from the identity as the mapping operation may result in a NULL filled chip. The operation of this affine is added to the existing affine so that proper relationship to the input cube (and any affine operations applied at load time) is preserved. This implies that the resulting affine should yield nearly identical results when read directly from the cube.

Bilinear interpolation is applied to surrounding transformed pixels to provide each new output pixel.

The chipped parameter will be updated to fully reflect the state of this original chip. The state of the chipped parameter dictates the size and the tack sample and line coordinates. Upon return, the corresponding cube sample and line coordinate is updated to the tack sample and line chip coordinate.

As such, note that an identity affine transform will yield identical results to the Chip::Extract method specifying the tack sample and line as the location to extract.

The following example demonstrates how to linearly shift a chip one pixel right and one down.

Chip mychip(35,35);
Cube cube("mycube.cub");
mychip.TackCube(200.0,200.0);
mychip.Load(cube);
Affine shift;
shift.Translate(-1.0,-1.0);
Chip ochip(15,15);
mychip.Extract(ochip, shift);
Parameters
chippedInput/output chip containing the transformed subchip
affineAffine transform to apply to extract subchip

References Isis::Affine::Compute(), Isis::Double, Isis::Affine::Forward(), Isis::Interpolator::HotLine(), Isis::Interpolator::HotSample(), Isis::Interpolator::Interpolate(), Isis::Interpolator::Lines(), Lines(), Isis::Null, Isis::Interpolator::Samples(), Samples(), SetValue(), TackLine(), TackSample(), Isis::Affine::xp(), and Isis::Affine::yp().

QString Isis::Chip::FileName ( ) const
inline

Returns the expanded filename of the cube from which this chip was chipped.

const Interpolator::interpType Isis::Chip::GetReadInterpolator ( )
inline

Access method that returns the Interpolator Type used for loading a chip.

Returns
const Interpolator::interpType Interpolator used to read data from cube and put it into a chip.
See Also
Read()
SetReadInterpolator()
Author
Jeannie Walldren
const Affine& Isis::Chip::GetTransform ( ) const
inline

Returns the Affine transformation of chip-to-cube indices.

This method returns the affine transform used to load a chip from the same area as a match cube. It also is used to track the tack point line and sample translations from the chip indices to the absolute cube coordiates.

Returns
const Affine& Transform map from chip coordinates to cube coordinates
const double Isis::Chip::GetValue ( int  sample,
int  line 
) const
inline

Get a value from a Chip.

For example,

Chip c(10,5);
cout << c[3,3] << endl;
Parameters
sampleSample position to get (1-based)
lineLine position to get (1-based)
bool Isis::Chip::IsInsideChip ( double  sample,
double  line 
)
Parameters
sample
line
Returns
bool True if the given sample, line is inside the chip

Referenced by Isis::ChipViewport::cubeToViewport().

bool Isis::Chip::IsValid ( double  percentage)

Return if the pixel is valid at a particular position.

Parameters
samplesample position to test
lineline position to test
Returns
bool - Returns true if the pixel is valid, and false if it is not Return if the total number of valid pixels in the chip meets a specified percentage of the entire chip.
Parameters
percentageThe percentage that the valid pixels percentage must exceed
Returns
bool Returns true if the percentage of valid pixels is greater than the specified percentage, and false if it is not

Referenced by Isis::Gruen::algorithm(), Isis::AutoReg::Register(), and Isis::AutoReg::Registration().

bool Isis::Chip::IsValid ( int  sample,
int  line 
)
inline

Returns whether the value at the given sample, line position is within the valid range.

Parameters
sampleSample position
lineLine position

References GetValue().

void Isis::Chip::Load ( Cube cube,
const double  rotation = 0.0,
const double  scale = 1.0,
const int  band = 1 
)

Load cube data into the Chip.

The data will be loaded such that the position set using TackCube method will be put at the center of the chip. The data will be loaded to sub-pixel accuracy using the interpolator indicated using SetReadInterpolator() method.

Parameters
cubeThe cube used to put data into the chip
rotationrotation in degrees of data about the cube tack point (default of 0)
scalescale factor (default of 1)
bandBand number to use when loading (default of 1)
See Also
Read()
SetReadInterpolator()
GetReadInterpolator()

References Isis::Cube::fileName().

Referenced by Isis::ChipViewport::geomChip(), Isis::InterestOperator::InterestByMeasure(), Isis::ChipViewport::nogeomChip(), Isis::InterestOperator::Operate(), Isis::ChipViewport::rotateChip(), Isis::ControlPointEdit::setLeftMeasure(), and Isis::ControlPointEdit::setRightMeasure().

void Isis::Chip::Load ( Cube cube,
Chip match,
Cube matchChipCube,
const double  scale = 1.0,
const int  band = 1 
)

Loads cube data into the Chip.

The data will be loaded such that the position set using TackCube method will be put at the center of the chip. The data will be loaded to sub-pixel accuracy using the interpolator indicated using SetReadInterpolator() method. Additionally, the data will be loaded such that it matches the camera and/or projective geometry of a given Chip.

Parameters
cubeThe cube used to put data into the chip
matchMatch the geometry of this chip
matchChipCubeThe cube used to put data into the match chip
scalescale factor (default of 1)
bandBand number to use when loading (default of 1)
Exceptions
Isis::iException::Programmer- Chip cube is not a camera or map projection
Isis::iException::Programmer- Match chip cube is not a camera or map projection
Isis::iException::Programmer- Cannot find enough points to perform Affine transformation.
See Also
Read()
SetReadInterpolator()
GetReadInterpolator()

References _FILEINFO_, Isis::IException::append(), Isis::Cube::camera(), CubeLine(), CubeSample(), Isis::Cube::fileName(), Isis::Sensor::HasSurfaceIntersection(), Isis::Projection::IsGood(), Isis::Camera::Line(), Isis::Cube::projection(), Isis::Camera::Sample(), SetChipPosition(), Isis::Camera::SetImage(), Isis::Projection::SetUniversalGround(), Isis::Camera::SetUniversalGround(), Isis::Projection::SetWorld(), TackLine(), TackSample(), Isis::Sensor::UniversalLatitude(), Isis::TProjection::UniversalLatitude(), Isis::Sensor::UniversalLongitude(), Isis::TProjection::UniversalLongitude(), Isis::Projection::WorldX(), and Isis::Projection::WorldY().

void Isis::Chip::Load ( Cube cube,
const Affine affine,
const bool &  keepPoly = true,
const int  band = 1 
)

Load a chip using an Affine transform as provided by caller.

This method will load data from a cube using an established Affine transform as provided by the caller. It is up to the caller to set up the affine appropriately.

For example, the first thing this method will do is set the chip tack point to the transformed cube location by replacing the existing affine transform with the one passed in and then calling SetChipPosition providing the chip tack point as the argument. This establishes which cube pixel is located at the chip tack point.

The data will be loaded to sub-pixel accuracy using the interpolator indicated using SetReadInterpolator() method.

Parameters
cubeCube to load the data from
affineAffine transform to set for chip load/operations
keepPolyIndicates whether clipping polygon should be kept or removed (default of true)
bandBand number to read data from (default of 1)
See Also
Read()
SetReadInterpolator()
GetReadInterpolator()

References Isis::Cube::fileName().

Chip & Isis::Chip::operator= ( const Chip other)

Copy assignment operator.

Parameters
otherchip to be copied to this
void Isis::Chip::SetAllValues ( const double &  d)

Single value assignment operator.

Sets the entire chip to a constant

Parameters
dValue to set the chip to

Referenced by Isis::Centroid::select().

void Isis::Chip::SetChipPosition ( const double  sample,
const double  line 
)

Compute the position of the cube given a chip coordinate.

Any rotation or geometric matching done during the Load process will be taken into account. Use the CubeSample and CubeLine methods to obtain results. Note the results could be outside of the cube

Parameters
samplechip sample coordinate
linechip line coordinate

Referenced by Isis::InterestOperator::InterestByMeasure(), Isis::ChipViewport::keyPressEvent(), Load(), Isis::ChipViewport::mousePressEvent(), Isis::InterestOperator::Operate(), Isis::ChipViewport::panDown(), Isis::ChipViewport::panLeft(), Isis::ChipViewport::panRight(), Isis::ChipViewport::panUp(), Isis::AutoReg::Register(), Isis::Gruen::Registration(), Isis::AutoReg::Registration(), Isis::ChipViewport::tackLine(), and Isis::ChipViewport::tackSample().

void Isis::Chip::SetClipPolygon ( const geos::geom::MultiPolygon &  clipPolygon)

Sets the clipping polygon for this chip.

The coordinates must be in (sample,line) order. All Pixel values outside this polygon will be set to Null8. The cubic convolution interpolation is allowed to uses valid pixels outside the clipping area.

Parameters
clipPolygonThe polygons used to clip the chip

Referenced by Isis::InterestOperator::InterestByMeasure(), and Isis::InterestOperator::Operate().

void Isis::Chip::SetCubePosition ( const double  sample,
const double  line 
)

Compute the position of the chip given a cube coordinate.

Any rotation or geometric matching done during the Load process will be taken into account. Use the ChipSample and ChipLine methods to obtain results. Note that the results could be outside of the chip.

Parameters
samplechip sample coordinate
linechip line coordinate

Referenced by Isis::ChipViewport::cubeToViewport().

void Isis::Chip::SetReadInterpolator ( const Interpolator::interpType  type)
inline

Sets Interpolator Type for loading a chip.

This type is used in the Read() method.

Parameters
typeInterpolator type to be used.
Exceptions
IException::Programmer- Invalid Interpolator Type
See Also
Read()
SetReadInterpolator()
Author
Jeannie Walldren

References _FILEINFO_, Isis::Interpolator::BiLinearType, Isis::Interpolator::CubicConvolutionType, Isis::Interpolator::NearestNeighborType, Isis::IException::Programmer, and Isis::toString().

void Isis::Chip::SetSize ( const int  samples,
const int  lines 
)

Change the size of the Chip.

Parameters
samplesnumber of samples in the chip
linesnumber of lines in the chip
Exceptions
Isis::iException::User- Samples and lines must be greater than zero.

References _FILEINFO_.

Referenced by Isis::Gruen::Registration(), and Isis::Centroid::select().

void Isis::Chip::SetTransform ( const Affine affine,
const bool &  keepPoly = true 
)
inline

Sets the internal Affine transform to new translation.

Provides the ability to establish a new affine transformation without overhead of, say, loading the chip with a new translation.

The caller also has the option to specify the disposition of an established polygon.

Parameters
affineNew affine tranform to set for this chip
keepPolyIndicates whether an existing polygon clipper should be kept (default of true)
void Isis::Chip::SetValidRange ( const double  minimum = Isis::ValidMinimum,
const double  maximum = Isis::ValidMaximum 
)

Set the valid range of data in the chip.

If never called all data in the chip is consider valid (other than special pixels).

Parameters
minimumminimum valid pixel value (default of Isis::ValidMinimum)
maximummaximum valid pixel value (default of Isis::ValidMaximum)
Exceptions
Isis::iException::Programmer- First parameter must be smaller than the second.

References _FILEINFO_.

void Isis::Chip::SetValue ( int  sample,
int  line,
const double &  value 
)
inline

This sets a value in the chip.

Parameters
sampleSample position to load (1-based)
lineLine position to load (1-based)
valueValue to set

Referenced by Isis::CentroidApolloPan::elipticalReduction(), Isis::Selection::elipticalReduction(), Extract(), Isis::AutoReg::Reduce(), Isis::Centroid::select(), and Isis::AutoReg::SetSubpixelPosition().

Isis::Statistics * Isis::Chip::Statistics ( )

Returns a statistics object of the current data in the chip.

The caller takes ownership of the returned instance.

Returns
Isis::Statistics* Statistics of the data in the chip

References Isis::Statistics::AddData(), and Isis::Statistics::SetValidRange().

void Isis::Chip::TackCube ( const double  cubeSample,
const double  cubeLine 
)

This sets which cube position will be located at the chip tack position.

Parameters
cubeSamplethe cube sample value to tack
cubeLinethe cube line value to tack

Referenced by Isis::InterestOperator::InterestByMeasure(), Isis::InterestOperator::Operate(), Isis::ControlPointEdit::setLeftMeasure(), and Isis::ControlPointEdit::setRightMeasure().

int Isis::Chip::TackLine ( ) const
inline

Return the fixed tack line of the chip.

That is, the middle of the chip. It is a chip coordinate not a cube coordinate. For a chip with 5 lines, this will return 3, the middle pixel. For a chip with 4 lines it will return 2

Referenced by Isis::Gruen::algorithm(), Extract(), Isis::ChipViewport::keyPressEvent(), Load(), Isis::ChipViewport::panDown(), Isis::ChipViewport::panLeft(), Isis::ChipViewport::panRight(), Isis::ChipViewport::panUp(), Isis::AutoReg::Register(), Isis::Gruen::Registration(), Isis::ChipViewport::tackLine(), and Isis::ChipViewport::tackSample().

int Isis::Chip::TackSample ( ) const
inline

Return the fixed tack sample of the chip.

That is, the middle of the chip. It is a chip coordinate not a cube coordinate. For a chip with 5 samples, this will return 3, the middle pixel. For a chip with 4 samples it will return 2

Referenced by Isis::Gruen::algorithm(), Extract(), Isis::ChipViewport::keyPressEvent(), Load(), Isis::ChipViewport::panDown(), Isis::ChipViewport::panLeft(), Isis::ChipViewport::panRight(), Isis::ChipViewport::panUp(), Isis::AutoReg::Register(), Isis::Gruen::Registration(), Isis::ChipViewport::tackLine(), and Isis::ChipViewport::tackSample().

void Isis::Chip::Write ( const QString &  filename)

Writes the contents of the Chip to a cube.

Parameters
filenameName of the cube to create

References Isis::Cube::close(), Isis::Cube::create(), Isis::Cube::setDimensions(), Isis::LineManager::SetLine(), and Isis::Cube::write().

Referenced by Isis::Gruen::Registration(), and Isis::ControlPointEdit::saveChips().


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