ImageRegrid.h
Classes
- ImageRegrid -- This regrids one image to match the coordinate system of another (full description)
template <class T> class ImageRegrid
Interface
- Public Members
- ImageRegrid()
- ImageRegrid(const ImageRegrid &other)
- ~ImageRegrid()
- ImageRegrid<T>& operator=(const ImageRegrid& other)
- void regrid(ImageInterface<T>& outImage, typename Interpolate2D::Method method, const IPosition& whichOutPixelAxes, const ImageInterface<T>& inImage, Bool replicate=False, uInt decimate=0, Bool showProgress=False, Bool forceRegrid=False)
- void get2DCoordinateGrid (Cube<Double>& grid, Matrix<Bool>& gridMask) const
- void set2DCoordinateGrid (const Cube<Double>& grid, const Matrix<Bool>& gridMask, Bool notify=False)
- Bool insert(ImageInterface<T>& outImage, const T<Double>& outPixelLocation, const ImageInterface<T>& inImage)
- void showDebugInfo(Int level=0)
- void disableReferenceConversions(Bool disable=True)
- static CoordinateSystem makeCoordinateSystem(LogIO& os, const CoordinateSystem& cSysTo, const CoordinateSystem& cSysFrom, const IPosition& axes)
- Private Members
- void checkAxes(IPosition& outPixelAxes, const IPosition& inShape, const IPosition& outShape, const Vector<Int>& pixelAxisMap, const CoordinateSystem& outCoords)
- void findMaps (uInt nDim, Vector<Int>& pixelAxisMap1, Vector<Int>& pixelAxisMap2, const CoordinateSystem& inCoords, const CoordinateSystem& outCoords) const
- Double findScaleFactor(const Unit& units, const DirectionCoordinate& dirIn, const DirectionCoordinate& dirOut, LogIO& os) const
- void regridOneCoordinate (LogIO& os, IPosition& outShape2, Vector<Bool>& doneOutPixelAxes, MaskedLattice<T>* &finalOutPtr, MaskedLattice<T>* &inPtr, MaskedLattice<T>* &outPtr, CoordinateSystem& outCoords, const CoordinateSystem& inCoords, Int outPixelAxis, const ImageInterface<T>& inImage, const IPosition& outShape, Bool replicate, uInt decimate, Bool outIsMasked, Bool showProgress, Bool forceRegrid, typename Interpolate2D::Method method)
- void regrid2D (MaskedLattice<T>& outLattice, const MaskedLattice<T>& inLattice, const DirectionCoordinate& inCoord, const DirectionCoordinate& outCoord, const DirectionCoordinate<Int> inPixelAxes, const DirectionCoordinate<Int> outPixelAxes, const DirectionCoordinate<Int> pixelAxisMap1, const DirectionCoordinate<Int> pixelAxisMap2, typename Interpolate2D::Method method, MDirection::Convert& machine, Bool replicate, uInt decimate, Bool useMachine, Bool showProgress, Double scale)
- void make2DCoordinateGrid (Bool& allFail, Bool&missedIt, Double& minInX, Double& minInY, Double& maxInX, Double& maxInY, Cube<Double>& in2DPos, Matrix<Bool>& succeed, MDirection::Convert& machine, const DirectionCoordinate& inCoord, const DirectionCoordinate& outCoord, uInt xInAxis, uInt yInAxis, uInt xOutAxis, uInt yOutAxis, const DirectionCoordinate& inPixelAxes, const DirectionCoordinate& outPixelAxes, const DirectionCoordinate& inShape, const DirectionCoordinate& outPos, const DirectionCoordinate& cursorShape, Bool useMachine, uInt decimate=0)
- void make2DCoordinateGrid (Cube<Double>& in2DPos, Double& minInX, Double& minInY, Double& maxInX, Double& maxInY, const Vector<Double>& pixelScale, uInt xInAxis, uInt yInAxis, uInt xOutAxis, uInt yOutAxis, uInt xInCorrAxis, uInt yInCorrAxis, uInt xOutCorrAxis, uInt yOutCorrAxis, const IPosition& outPos, const IPosition& cursorShape)
- void make1DCoordinateGrid (Block<Float>& xOut, Vector<Bool>& failed, Bool& allFailed, Bool& allGood, const Coordinate& inCoord, const Coordinate& outCoord, Int inAxisInCoordinate, Int outAxisInCoordinate, MFrequency::Convert& machine, Bool useMachine)
- void make1DCoordinateGrid (Block<Float>& xOut, Float pixelScale) const
- void regrid1D (MaskedLattice<T>& outLattice, const MaskedLattice<T>& inLattice, const Coordinate& inCoord, const Coordinate& outCoord, const Coordinate<Int>& inPixelAxes, const Coordinate<Int>& outPixelAxes, Int inAxisInCoordinate, Int outAxisInCoordinate, const Coordinate<Int> pixelAxisMap, typename Interpolate2D::Method method, MFrequency::Convert& machine, Bool replicate, Bool useMachine, Bool showProgress)
- void regrid2DMatrix(Lattice<T>& outCursor, LatticeIterator<Bool>*& outMaskIterPtr, const Interpolate2D& interp, ProgressMeter*& pProgress, Double& iPix, uInt nDim, uInt xInAxis, uInt yInAxis, uInt xOutAxis, uInt yOutAxis, Double scale, Bool inIsMasked, Bool outIsMasked, const erpolate2D& outPos, const erpolate2D& outCursorShape, const erpolate2D& inChunkShape, const erpolate2D& inChunkBlc, const erpolate2D& pixelAxisMap2, ProgressMeter<T>& inDataChunk, ProgressMeter<Bool>*& inMaskChunkPtr, const IPosition<Double>& pix2DPos, const Array<Bool>& succeed)
- void findXYExtent (Bool& missedIt, Bool& allFailed, Double& minInX, Double& minInY, Double& maxInX, Double& maxInY, Cube<Double>& in2DPos, Matrix<Bool>& succeed, uInt xInAxis, uInt yInAxis, uInt xOutAxis, uInt yOutAxis, const IPosition& outPos, const IPosition& outCursorShape, const IPosition& inShape)
- Bool minmax(Double &minX, Double &maxX, Double& minY, Double& maxY, const Array<Double> &xData, const Array<Double> &yData, const Array<Bool>& mask)
Review Status
- Date Reviewed:
- yyyy/mm/dd
Prerequisite
Etymology
Regrids, or resamples, images.
Synopsis
This class enables you to regrid one image to the coordinate
system of another. You can regrid any or all of the
axes in the image. A range of interpolation schemes are available.
It will cope with coordinate systems being in different orders
(coordinate, world axes, pixel axes). The basic approach is to
make a mapping from the input to the output coordinate systems,
but the output CoordinateSystem order is preserved in the output
image.
Any DirectionCoordinate is regridded with a coupled 2D
interpolation scheme. All other axes are regridded with
a 1D interpolation scheme. StokesCoordinates cannot be
regridded.
Multiple passes are made through the data, and the output of
each pass is the input of the next pass. The intermediate
images are stored as TempImages which may be in memory or
on disk, depending on their size.
It can also simply insert this image into that one via
an integer shift.
Example
Motivation
A common image analysis need is to regrid images, e.g. to compare
images from different telescopes.
Thrown Exceptions
To Do
Member Description
Default constructor
ImageRegrid(const ImageRegrid &other)
copy constructor (copy semantics)
destructor
ImageRegrid<T>& operator=(const ImageRegrid& other)
Assignment copy semantics)
void regrid(ImageInterface<T>& outImage, typename Interpolate2D::Method method, const IPosition& whichOutPixelAxes, const ImageInterface<T>& inImage, Bool replicate=False, uInt decimate=0, Bool showProgress=False, Bool forceRegrid=False)
Regrid inImage onto the grid specified by outImage.
If outImage has a writable mask, it will be updated in that
output pixels at which the regridding failed will be masked bad (False)
and the pixel value set to zero. Otherwise the output mask is not changed.
Specify which pixel axes of outImage are to be
regridded. The coordinate and axis order of outImage
is preserved, regardless of where the relevant coordinates
are in inImage.
decimate only applies when replicate=False. it is
the coordinate grid computation decimation FACTOR
(e.g. nCoordGrid ~ nIn / decimate). 0 means no decimation
(slowest and most accurate)
void get2DCoordinateGrid (Cube<Double>& grid, Matrix<Bool>& gridMask) const
void set2DCoordinateGrid (const Cube<Double>& grid, const Matrix<Bool>& gridMask, Bool notify=False)
Get and set the 2-D coordinate grid. After a call to function regrid
in which coupled 2D coordinate (presently only DirectionCoordinate) is
regridded, this coordinate grid will be available. It can be reused
via the set2DCoordinateGrid function for another like plane
(e.g. if you choose to regrid planes of a cube separately). When you provide
the coordinate grid, it will no longer (for that 2D coordinate only) be
computed internally, which may save a lot of time. Ordinarily, if you
regridded many planes of a cube in one call to regrid, the coordinate grid
is cached for you. To trigger successive calls to regrid to go back to
internal computation, set zero length Cube and Matrix. gridMask
is True for successfull coordinate conversions, and False otherwise.
Bool insert(ImageInterface<T>& outImage, const T<Double>& outPixelLocation, const ImageInterface<T>& inImage)
Inserts inImage into outImage. The alignment is done by
placing the blc of inImage at the specified
absolute pixel of the outImage (outPixelLocation). If
the outPixelLocation vector is of zero length, then the images
are aligned by their reference pixels. Only integral shifts are done
in the aligment process. If outImage has a mask, it will be updated.
Returns False if no overlap of images, in which case the
output is not updated.
Print out useful debugging information (level 0 is none,
1 is some, 2 is too much)
Enable/disable Measures Reference conversions
Helper function. We are regridding from cSysFrom to cSysTo for the
specified pixel axes of cSyFrom. This function returns a CoordinateSystem which,
for the pixel axes being regridded, copies the coordinates from cSysTo
(if coordinate type present in cSysTo) or cSysFrom (coordinate
type not present in cSysTo).
For the axes not being regridded, it copies the coordinates from
cSysFrom. This helps you build the cSys for function regrid.
The ObsInfo from cSysFrom is copied to the output CoordinateSystem.
Check shape and axes. Exception if no good. If pixelAxes
of length 0, set to all axes according to shape
Find maps between coordinate systems
Find scale factor to conserve flux
void regridOneCoordinate (LogIO& os, IPosition& outShape2, Vector<Bool>& doneOutPixelAxes, MaskedLattice<T>* &finalOutPtr, MaskedLattice<T>* &inPtr, MaskedLattice<T>* &outPtr, CoordinateSystem& outCoords, const CoordinateSystem& inCoords, Int outPixelAxis, const ImageInterface<T>& inImage, const IPosition& outShape, Bool replicate, uInt decimate, Bool outIsMasked, Bool showProgress, Bool forceRegrid, typename Interpolate2D::Method method)
Regrid one Coordinate
void regrid2D (MaskedLattice<T>& outLattice, const MaskedLattice<T>& inLattice, const DirectionCoordinate& inCoord, const DirectionCoordinate& outCoord, const DirectionCoordinate<Int> inPixelAxes, const DirectionCoordinate<Int> outPixelAxes, const DirectionCoordinate<Int> pixelAxisMap1, const DirectionCoordinate<Int> pixelAxisMap2, typename Interpolate2D::Method method, MDirection::Convert& machine, Bool replicate, uInt decimate, Bool useMachine, Bool showProgress, Double scale)
Regrid, via coordinates, 2 coupled axes
void make2DCoordinateGrid (Bool& allFail, Bool&missedIt, Double& minInX, Double& minInY, Double& maxInX, Double& maxInY, Cube<Double>& in2DPos, Matrix<Bool>& succeed, MDirection::Convert& machine, const DirectionCoordinate& inCoord, const DirectionCoordinate& outCoord, uInt xInAxis, uInt yInAxis, uInt xOutAxis, uInt yOutAxis, const DirectionCoordinate& inPixelAxes, const DirectionCoordinate& outPixelAxes, const DirectionCoordinate& inShape, const DirectionCoordinate& outPos, const DirectionCoordinate& cursorShape, Bool useMachine, uInt decimate=0)
Make regridding coordinate grid for this cursor.
void make2DCoordinateGrid (Cube<Double>& in2DPos, Double& minInX, Double& minInY, Double& maxInX, Double& maxInY, const Vector<Double>& pixelScale, uInt xInAxis, uInt yInAxis, uInt xOutAxis, uInt yOutAxis, uInt xInCorrAxis, uInt yInCorrAxis, uInt xOutCorrAxis, uInt yOutCorrAxis, const IPosition& outPos, const IPosition& cursorShape)
Make replication coordinate grid for this cursor
void make1DCoordinateGrid (Block<Float>& xOut, Vector<Bool>& failed, Bool& allFailed, Bool& allGood, const Coordinate& inCoord, const Coordinate& outCoord, Int inAxisInCoordinate, Int outAxisInCoordinate, MFrequency::Convert& machine, Bool useMachine)
Make regridding coordinate grid for this axis
Make replication coordinate grid for this axis
void regrid1D (MaskedLattice<T>& outLattice, const MaskedLattice<T>& inLattice, const Coordinate& inCoord, const Coordinate& outCoord, const Coordinate<Int>& inPixelAxes, const Coordinate<Int>& outPixelAxes, Int inAxisInCoordinate, Int outAxisInCoordinate, const Coordinate<Int> pixelAxisMap, typename Interpolate2D::Method method, MFrequency::Convert& machine, Bool replicate, Bool useMachine, Bool showProgress)
Regrid 1 axis
void regrid2DMatrix(Lattice<T>& outCursor, LatticeIterator<Bool>*& outMaskIterPtr, const Interpolate2D& interp, ProgressMeter*& pProgress, Double& iPix, uInt nDim, uInt xInAxis, uInt yInAxis, uInt xOutAxis, uInt yOutAxis, Double scale, Bool inIsMasked, Bool outIsMasked, const erpolate2D& outPos, const erpolate2D& outCursorShape, const erpolate2D& inChunkShape, const erpolate2D& inChunkBlc, const erpolate2D& pixelAxisMap2, ProgressMeter<T>& inDataChunk, ProgressMeter<Bool>*& inMaskChunkPtr, const IPosition<Double>& pix2DPos, const Array<Bool>& succeed)
void findXYExtent (Bool& missedIt, Bool& allFailed, Double& minInX, Double& minInY, Double& maxInX, Double& maxInY, Cube<Double>& in2DPos, Matrix<Bool>& succeed, uInt xInAxis, uInt yInAxis, uInt xOutAxis, uInt yOutAxis, const IPosition& outPos, const IPosition& outCursorShape, const IPosition& inShape)
Bool minmax(Double &minX, Double &maxX, Double& minY, Double& maxY, const Array<Double> &xData, const Array<Double> &yData, const Array<Bool>& mask)