CurvedImage2D.h
Classes
- CurvedImage2D -- An image crosscut based on a curve in a plane. (full description)
Interface
- Public Members
- CurvedImage2D()
- CurvedImage2D (const ImageInterface<T>&, const CLInterpolator2D<T>&, const PixelCurve1D&, uInt axis1, uInt axis2, Int curveAxis=-1)
- CurvedImage2D (const CurvedImage2D<T>& other)
- virtual ~CurvedImage2D()
- CurvedImage2D<T>& operator= (const CurvedImage2D<T>& other)
- virtual ImageInterface<T>* cloneII() const
- virtual String imageType() const
- virtual Bool isMasked() const
- virtual Bool hasPixelMask() const
- virtual const Lattice<Bool>& pixelMask() const
- virtual Lattice<Bool>& pixelMask()
- virtual const LatticeRegion* getRegionPtr() const
- virtual Bool isPersistent() const
- virtual Bool isPaged() const
- virtual Bool isWritable() const
- virtual IPosition shape() const
- virtual uInt advisedMaxPixels() const
- virtual void resize(const TiledShape& newShape)
- virtual String name (Bool stripPath=False) const
- virtual Bool ok() const
- virtual Bool doGetSlice (Array<T>& buffer, const Slicer& section)
- virtual void doPutSlice (const Array<T>& sourceBuffer, const IPosition& where, const IPosition& stride)
- virtual Bool doGetMaskSlice (Array<Bool>& buffer, const Slicer& section)
- virtual LatticeIterInterface<T>* makeIter (const T& navigator, Bool useRef) const
- virtual IPosition doNiceCursorShape (uInt maxPixels) const
- virtual Bool lock (FileLocker::LockType, uInt nattempts)
- virtual void unlock()
- virtual Bool hasLock (FileLocker::LockType) const
- virtual void resync()
- virtual void flush()
- virtual void tempClose()
- virtual void reopen()
Review Status
- Programs:
- Tests:
Prerequisite
Synopsis
Class CurvedImage2D can be used to make a crosscut through an image
with a dimensionality >= 2. The dimensionality of the resulting image
is one less.
The crosscut is based on a curve defined by a
PixelCurve1D object. The curve
can be any 1-dim function (e.g. straight line, spline)
supported by the Functionals module. The curve must be in one of the
main planes of the image as defined by the axes arguments in the
constructor.
For example: in an RA-DEC-FREQ image a straight line can be
defined in the RA-DEC plane (axis1=0, axis2=1) from blc {0,0) to
trc (511,511). The crosscut will follow this line, so the result is
a 2-dim image with axes 'line' and FREQ. So it contains the spectrum
for all points on the line (points (0,0), (1,1) ... (511,511)).
In this example the line only contains exact grid points. In
practice that usually won't be case, so interpolation has to be done.
This is done by a class derived from
CLInterpolator2D, so any
interpolation scheme is possible. Currently only the nearest neighbour
scheme is implemented (CLIPNearest2D).
Example
The following example uses a 3-dim image.
It makes a crosscut using a line from the blc to the trc in the XY plane.
The number of points on the line is the maximum of the number of points
in X and Y.
// Open an image.
PagedImage<Float> image("name.img");
// Make a straight line from (0,0) to the trc.
IPosition shp = lat.shape();
Int xtop = shp(0);
Int ytop = shp(1);
Int nr = xtop;
if (nr > ytop) nr = ytop;
PixelCurve1D pc(0, 0, xtop-1, ytop-1, nr);
// Create the crosscut image.
// The new axis (the curve axis) is the first axis in the result.
CurvedImage2D<Float> clat(image, CLIPNearest2D<Float>(), pc, 0, 1, 0);
Note that in the general case the line (or any curve) won't be from
the blc to the trc. In fact, it is possible to give any starting and
end point and any number of points on the curve.
Motivation
Users like to view arbitrary image crosscuts.
Member Description
The default constructor
CurvedImage2D (const ImageInterface<T>&, const CLInterpolator2D<T>&, const PixelCurve1D&, uInt axis1, uInt axis2, Int curveAxis=-1)
Take a curved slice from the given image.
The PixelCurve1D object defines
the curve in one of the planes of the image. The arguments axis1
and axis2 define the plane the curve is in.
The CLInterpolator2D object
defines the interpolation scheme for pixels that are not on grid points.
An example is CLIPNearest2D which takes the nearest neighbour.
The dimensionality of the CurvedImage2D is one less than the
dimensionality of the given image. Two axes (axis1 and axis2) are
replaced by the new axis representing the curve. The argument
curveAxis defines the axis number of the new axis. It defaults to the
last axis.
An exception is thrown if the dimensionality of the input image is < 2
or if the given axes numbers are too high.
Note that the output CoordinateSystem of the CurvedImage is just a dummy
LinearCoordinate at this point. The values are all arbitrary.
CurvedImage2D (const CurvedImage2D<T>& other)
Copy constructor (reference semantics).
CurvedImage2D<T>& operator= (const CurvedImage2D<T>& other)
Assignment (reference semantics).
virtual ImageInterface<T>* cloneII() const
Make a copy of the object (reference semantics).
Get the image type (returns name of derived class).
virtual Bool isMasked() const
Is the CurvedImage2D masked?
It is if its parent image is masked.
Does the image object have a pixelmask?
It does if its parent has a pixelmask.
Get access to the pixelmask in use (thus to the pixelmask of the parent).
An exception is thrown if the parent does not have a pixelmask.
Get the region used (always returns 0).
A CurvedImage2D is not persistent.
virtual Bool isPaged() const
Is the CurvedImage2D paged to disk?
virtual Bool isWritable() const
An CurvedImage2D is not writable
Returns the shape of the CurvedImage2D
This function returns the recommended maximum number of pixels to
include in the cursor of an iterator.
Function which changes the shape of the CurvedImage2D.
Throws an exception as resizing an CurvedImage2D is not possible.
virtual String name (Bool stripPath=False) const
Return the name of the parent ImageInterface object.
virtual Bool ok() const
Check class invariants.
virtual Bool doGetSlice (Array<T>& buffer, const Slicer& section)
Do the actual getting of an array of values.
virtual void doPutSlice (const Array<T>& sourceBuffer, const IPosition& where, const IPosition& stride)
Putting data is not possible.
Get a section of the mask.
virtual LatticeIterInterface<T>* makeIter (const T& navigator, Bool useRef) const
This function is used by the LatticeIterator class to generate an
iterator of the correct type for this Lattice. Not recommended
for general use.
Get the best cursor shape.
virtual Bool lock (FileLocker::LockType, uInt nattempts)
virtual void unlock()
virtual Bool hasLock (FileLocker::LockType) const
virtual void resync()
virtual void flush()
virtual void tempClose()
virtual void reopen()
Handle the (un)locking and syncing, etc..