Class WarpTransform2D

  • All Implemented Interfaces:
    Serializable, MathTransform, MathTransform2D

    public class WarpTransform2D
    extends AbstractMathTransform
    implements MathTransform2D, Serializable
    Wraps an arbitrary Warp object as a two-dimensional transform. Calls to transform methods are forwarded to the warpPoint method, or something equivalent. This implies that source coordinates may be rounded to nearest integers before the transformation is applied.

    This transform is typically used with grid coverage "Resample" operation for reprojecting an image. Source and destination coordinates are usually pixel coordinates in source and target image, which is why this transform may use integer arithmetic.

    This math transform can be created alone (by invoking its public constructors directly), or it can be created by a factory like LocalizationGrid.

    For more information on image warp, see Geometric Image Manipulation in the Programming in Java Advanced Imaging guide.

    Since:
    2.1
    Author:
    Martin Desruisseaux, Alessio Fabiani
    See Also:
    LocalizationGrid#getPolynomialTransform(int), Warp, WarpOpImage, WarpDescriptor, Serialized Form
    • Field Detail

      • MAX_DEGREE

        public static final int MAX_DEGREE
        The maximal polynomial degree allowed.
        Since:
        2.4
        See Also:
        Constant Field Values
    • Constructor Detail

      • WarpTransform2D

        public WarpTransform2D​(Point2D[] srcCoords,
                               Point2D[] dstCoords,
                               int degree)
        Constructs a warp transform that approximatively maps the given source coordinates to the given destination coordinates. The transformation is performed using some polynomial warp with the degree supplied in argument. The number of points required for each degree of warp are as follows:

        Degree of WarpNumber of Points
        13
        26
        310
        415
        521
        628
        736
        Parameters:
        srcCoords - Source coordinates.
        dstCoords - Desination coordinates.
        degree - The desired degree of the warp polynomials.
      • WarpTransform2D

        public WarpTransform2D​(Rectangle2D srcBounds,
                               Point2D[] srcCoords,
                               int srcOffset,
                               Rectangle2D dstBounds,
                               Point2D[] dstCoords,
                               int dstOffset,
                               int numCoords,
                               int degree)
        Constructs a warp transform that approximatively maps the given source coordinates to the given destination coordinates. The transformation is performed using some polynomial warp with the degree supplied in argument.
        Parameters:
        srcBounds - Bounding box of source coordinates, or null if unknow.
        srcCoords - Source coordinates.
        srcOffset - The inital entry of srcCoords to be used.
        dstBounds - Bounding box of destination coordinates, or null if unknow.
        dstCoords - Destination coordinates.
        dstOffset - The inital entry of destCoords to be used.
        numCoords - The number of coordinates from srcCoords and destCoords to be used.
        degree - The desired degree of the warp polynomials.
      • WarpTransform2D

        public WarpTransform2D​(Rectangle2D srcBounds,
                               float[] srcCoords,
                               int srcOffset,
                               Rectangle2D dstBounds,
                               float[] dstCoords,
                               int dstOffset,
                               int numCoords,
                               int degree)
        Constructs a warp transform that approximatively maps the given source coordinates to the given destination coordinates. The transformation is performed using some polynomial warp with the degree supplied in argument.
        Parameters:
        srcBounds - Bounding box of source coordinates, or null if unknow.
        srcCoords - Source coordinates with x and y alternating.
        srcOffset - The inital entry of srcCoords to be used.
        dstBounds - Bounding box of destination coordinates, or null if unknow.
        dstCoords - Destination coordinates with x and y alternating.
        dstOffset - The inital entry of destCoords to be used.
        numCoords - The number of coordinates from srcCoords and destCoords to be used.
        degree - The desired degree of the warp polynomials.
      • WarpTransform2D

        protected WarpTransform2D​(Warp warp,
                                  Warp inverse)
        Constructs a transform using the specified warp object. Transformations will be applied using the warpPoint method or something equivalent.
        Parameters:
        warp - The image warp to wrap into a math transform.
        inverse - An image warp to uses for the inverse transform, or null in none.
    • Method Detail

      • create

        public static MathTransform2D create​(Warp warp)
        Returns a transform using the specified warp object. Transformations will be applied using the warpPoint method or something equivalent.
        Parameters:
        warp - The image warp to wrap into a math transform.
        Returns:
        The transform for the given warp.
      • getWarp

        public static Warp getWarp​(CharSequence name,
                                   MathTransform2D transform)
        Returns a image warp for the specified transform. The Warp.warpPoint method transforms coordinates from source to target CRS. Note that JAI's warp operation needs a warp object with the opposite semantic (i.e. the image warp must transforms coordinates from target to source CRS). Consequently, consider invoking getWarp(transform.inverse()) if the warp object is going to be used in an image reprojection.
        Parameters:
        name - The image or coverage name, or null in unknow. Used only for formatting error message if some TransformException are thrown by the supplied transform.
        transform - The transform to returns as an image warp.
        Returns:
        The warp for the given transform.
      • getWarp

        public Warp getWarp()
        Returns image warp wrapped by this transform. The Warp.warpPoint method transforms coordinates from source to target CRS. Note that JAI's warp operation needs a warp object with the opposite semantic (i.e. the image warp must transforms coordinates from target to source CRS). Consequently, consider invoking inverse.getWarp() if the warp object is going to be used in an image reprojection.
      • isIdentity

        public boolean isIdentity()
        Tests if this transform is the identity transform.
        Specified by:
        isIdentity in interface MathTransform
        Overrides:
        isIdentity in class AbstractMathTransform
        Returns:
        true if this MathTransform is an identity transform; false otherwise.
      • transform

        public Point2D transform​(Point2D ptSrc,
                                 Point2D ptDst)
        Transforms source coordinates (usually pixel indices) into destination coordinates (usually "real world" coordinates).
        Specified by:
        transform in interface MathTransform2D
        Overrides:
        transform in class AbstractMathTransform
        Parameters:
        ptSrc - the specified coordinate point to be transformed.
        ptDst - the specified coordinate point that stores the result of transforming ptSrc, or null.
        Returns:
        the coordinate point after transforming ptSrc and storing the result in ptDst.
        See Also:
        MathTransform2D.transform(Point2D,Point2D)
      • transform

        public void transform​(float[] srcPts,
                              int srcOff,
                              float[] dstPts,
                              int dstOff,
                              int numPts)
        Transforms source coordinates (usually pixel indices) into destination coordinates (usually "real world" coordinates).
        Specified by:
        transform in interface MathTransform
        Overrides:
        transform in class AbstractMathTransform
        Parameters:
        srcPts - the array containing the source point coordinates.
        srcOff - the offset to the first point to be transformed in the source array.
        dstPts - the array into which the transformed point coordinates are returned. May be the same than srcPts.
        dstOff - the offset to the location of the first transformed point that is stored in the destination array.
        numPts - the number of point objects to be transformed.
      • transform

        public void transform​(double[] srcPts,
                              int srcOff,
                              double[] dstPts,
                              int dstOff,
                              int numPts)
        Transforms source coordinates (usually pixel indices) into destination coordinates (usually "real world" coordinates).
        Specified by:
        transform in interface MathTransform
        Parameters:
        srcPts - the array containing the source point coordinates.
        srcOff - the offset to the first point to be transformed in the source array.
        dstPts - the array into which the transformed point coordinates are returned. May be the same than srcPts.
        dstOff - the offset to the location of the first transformed point that is stored in the destination array.
        numPts - the number of point objects to be transformed.
      • equals

        public boolean equals​(Object object)
        Compares this transform with the specified object for equality.
        Overrides:
        equals in class AbstractMathTransform
        Parameters:
        object - The object to compare with this transform.
        Returns:
        true if the given object is a transform of the same class and if, given identical source position, the transformed position would be the equals.