Class SplineROI

java.lang.Object
com.xinapse.multisliceimage.roi.ROI
com.xinapse.multisliceimage.roi.SplineROI
All Implemented Interfaces:
EditableOutlineROI, RotatableROI, StretchableROI, Cloneable
Direct Known Subclasses:
OpenSplineROI

public class SplineROI extends ROI implements Cloneable, StretchableROI, RotatableROI, EditableOutlineROI
A Class representing a curved line on an image, either open or closed, represented by a set of knots, with spline interpolators between the knots to define the shape of the curve.
  • Field Details

    • xpts

      protected double[] xpts
      The x-coordinates of the knot points of this Spline ROI in real-space (mm) coordinates.
    • ypts

      protected double[] ypts
      The y-coordinates of the knot points of this Spline ROI in real-space (mm) coordinates.
    • closed

      protected boolean closed
      Whether the SplineROI is closed. It will not be closed if during production, but may be closed when completed.
    • xSpline

      protected CubicSplineInterpolator xSpline
      A cubic spline interpolator for the x-coordinate values. Cached and recalculated every time the knot points are changed.
    • ySpline

      protected CubicSplineInterpolator ySpline
      A cubic spline interpolator for the y-coordinate values. Cached and recalculated every time the knot points are changed.
    • sMax

      protected double sMax
      The maximum parameter value for interpolating using the splines. The parameter s goes from s=0 (at the first knot point) to s=sMax at either the last knot point (for open splines) or back at the first point after going round all the knot points.
  • Constructor Details

    • SplineROI

      public SplineROI(double[] x, double[] y, boolean closed, ROIState state) throws ROIException
      Creates a new SplineROI with the specified shape in mm coordinates.
      Parameters:
      x - an array of x-coordinates of the knot points.
      y - an array of y-coordinates of the knot points.
      closed - whether the SplineROI is closed.
      state - the ROIState of the newly-created ROI.
      Throws:
      ROIException - if the SplineROI cannot be created as specified.
    • SplineROI

      public SplineROI(double[] x, double[] y, boolean closed, byte userColour, ROIState state, boolean checkIntegrity) throws ROIException
      Creates a new SplineROI with the specified shape in mm coordinates.
      Parameters:
      x - an array of x-coordinates of the knot points.
      y - an array of y-coordinates of the knot points.
      closed - whether the SplineROI is closed.
      userColour - the colour of this ROI. A value of 0 indicates that the ROI will be drawn with the default colour for normal ROIs if unselected.
      state - the ROIState of the newly-created ROI.
      checkIntegrity - whether to check the integrity of the ROI.
      Throws:
      ROIException - if the SplineROI cannot be created as specified.
  • Method Details

    • isClosed

      public boolean isClosed()
      Returns whether this SplineROI forms a closed path.
      Returns:
      true if closed; false if an open path.
    • close

      public void close() throws ROIException
      Closes this SplineROI so that the outline is a closed path.
      Throws:
      ROIException - if closing would not create a valid SplineROI.
    • getKnotPoints

      public Point2D[] getKnotPoints()
      Returns the knot point locations for this SplineROI.
      Returns:
      the knot point locations as an array of Point2D.
    • getSMax

      public double getSMax()
      Returns that maximum s-parameter value for this SplineROI.
      Returns:
      the maximum value of the s-parameter.
    • removeLastKnotPoint

      public void removeLastKnotPoint() throws ROIException
      Removes the last knot point of this SplineROI.
      Throws:
      ROIException - if removal would result in an invalid ROI.
    • removeFirstKnotPoint

      public void removeFirstKnotPoint() throws ROIException
      Removes the first knot point of this SplineROI.
      Throws:
      ROIException - if removal would result in an invalid ROI.
    • getKnotPoint

      public Point2D getKnotPoint(int index)
      Returns a knot point location for this SplineROI.
      Parameters:
      index - the index of the knot point to return.
      Returns:
      the knot point location as a Point2D.
    • getCreateInteractionType

      public static InteractionType getCreateInteractionType()
      Returns the type of interaction needed to create a SplineROI.
      Returns:
      type of interaction needed to create a SplineROI - InteractionType.CLICK_POINTS.
    • move

      public void move(double dx, double dy)
      Description copied from class: ROI
      Move this ROI by specified distances (in mm) in the x and y directions.
      Specified by:
      move in class ROI
      Parameters:
      dx - the distance to move in the x-direction.
      dy - the distance to move in the y-direction.
    • move

      public void move(double dx, double dy, double stretchX, double stretchY)
      Description copied from interface: StretchableROI
      Moves and stretches an ROI. A stretch value is a scaling factor for dimensions in either the horizontal or vertical directions. A stretch of 1.0 means no stretch.
      Specified by:
      move in interface StretchableROI
      Parameters:
      dx - the distance (in mm) to move the centre of the StretchableROI in the horizontal direction.
      dy - the distance (in mm) to move the centre of the StretchableROI in the vertical direction.
      stretchX - the stretch in the horizontal direction.
      stretchY - the stretch in the vertical direction.
    • flipVertical

      public void flipVertical(Point2D flipPoint)
      Description copied from class: ROI
      Flip this ROI vertically about a given location.
      Specified by:
      flipVertical in class ROI
      Parameters:
      flipPoint - the point about which the ROI will be flipped.
    • flipHorizontal

      public void flipHorizontal(Point2D flipPoint)
      Description copied from class: ROI
      Flip this ROI horizontally about a given location.
      Specified by:
      flipHorizontal in class ROI
      Parameters:
      flipPoint - the point about which the ROI will be flipped.
    • moveVertex

      public void moveVertex(Point2D newPos, Handle handle, int nCols, int nRows, float pixelXSize, float pixelYSize, boolean pixelSnap) throws ROIException
      Description copied from interface: EditableOutlineROI
      Move a point on the outline of this EditableOutlineROI to a new position.
      Specified by:
      moveVertex in interface EditableOutlineROI
      Parameters:
      newPos - the new location of the vertex in real-space coordinates.
      handle - the Handle that the user has grabbed, used to identify the vertex to be moved.
      nCols - the number of image columns.
      nRows - the number of image rows.
      pixelXSize - the pixel width in mm.
      pixelYSize - the pixel height in mm.
      pixelSnap - whether pixel snap is turned on.
      Throws:
      ROIException - if the vertex cannot be moved to the requested position.
    • deleteVertex

      public boolean deleteVertex(Handle handle) throws ROIException
      Description copied from interface: EditableOutlineROI
      Delete a point on the outline of this EditableOutlineROI that is under a handle.
      Specified by:
      deleteVertex in interface EditableOutlineROI
      Parameters:
      handle - the Handle that the user has grabbed, used to identify the vertex to be deleted.
      Returns:
      true if a point is successfully deleted.
      Throws:
      ROIException - if the point cannot be deleted from this ROI.
    • insertTwoVertices

      public boolean insertTwoVertices(Handle handle)
      Description copied from interface: EditableOutlineROI
      Insert two points into the outline of this EditableOutlineROI: one just before the one that is under a handle, and one just after.
      Specified by:
      insertTwoVertices in interface EditableOutlineROI
      Parameters:
      handle - the Handle that the user has grabbed, used to identify the vertex around which the new vertices are to be placed.
      Returns:
      true if a point is successfully inserted.
    • setKnotPoint

      public void setKnotPoint(Point2D pos, int idx) throws ROIException
      Sets one knot point position for this ROI.
      Parameters:
      pos - the coordinates of the new position.
      idx - an index to the knot point.
      Throws:
      ArrayIndexOutOfBoundsException - if the index is invalid.
      ROIException - if the moving the knot point would result in an invalid SplineROI.
    • setKnotPoints

      public void setKnotPoints(Point2D[] knotPoints) throws ROIException
      Sets the knot point positions for this ROI.
      Parameters:
      knotPoints - an array of new knot point positions.
      Throws:
      ROIException - if the knot points cannot be set as specified.
    • setKnotPoints

      public void setKnotPoints(List<? extends Point2D> knotPoints) throws ROIException
      Sets the knotPoint positions for this ROI.
      Parameters:
      knotPoints - a java.util.List<? extends Point2D> of new knot point positions.
      Throws:
      ROIException - if the setting the knot point positions would result in an invalid SplineROI.
    • setKnotPoints

      public void setKnotPoints(double[] x, double[] y) throws ROIException
      Sets the knot point positions for this ROI.
      Parameters:
      x - a list of x-coordinates for the new knot point positions.
      y - a list of y-coordinates for the new knot point positions.
      Throws:
      ROIException - if the knot points cannot be set as specified.
    • setKnotPoints

      public void setKnotPoints(double[] x, double[] y, int n) throws ROIException
      Sets the knot point positions for this ROI.
      Parameters:
      x - an array of x-coordinates for the new knot point positions.
      y - an array of y-coordinates for the new knot point positions.
      n - the number of points to copy from the arrays, starting at index 0.
      Throws:
      ROIException - if the knot points cannot be set as specified.
    • getCentre

      public Point2D getCentre()
      Description copied from interface: RotatableROI
      Gets the centre (about which rotation will occur) of this RotatableROI in mm.
      Specified by:
      getCentre in interface RotatableROI
      Returns:
      the centre of this ROI, about which rotation will occur.
    • setTheta

      public void setTheta(double theta)
      Description copied from interface: RotatableROI
      Sets the rotation angle for this RotatableROI.
      Specified by:
      setTheta in interface RotatableROI
      Parameters:
      theta - the rotation angle.
    • getTheta

      public double getTheta()
      Description copied from interface: RotatableROI
      Returns the current rotation angle for this RotatableROI.
      Specified by:
      getTheta in interface RotatableROI
      Returns:
      theta the current rotation angle.
    • getNPoints

      public int getNPoints()
      Returns the number of knot points that define the shape.
      Returns:
      the number of knot points that define the shape.
    • getLocation

      public org.jogamp.vecmath.Point2d getLocation(double s)
      Returns the position of the SplineROI outline at a particular value of the s-parameter.
      Parameters:
      s - the s-parameter value.
      Returns:
      the location of the outline at the position defined by the s-parameter value.
    • getNormal

      public org.jogamp.vecmath.Vector2d getNormal(int index)
      Returns the outward normal vector at a knot point.
      Parameters:
      index - the index to the knot point.
      Returns:
      the outward unit normal vector.
    • getNormal

      public org.jogamp.vecmath.Vector2d getNormal(double s)
      Returns the outward normal vector at a particular value of the s-parameter.
      Parameters:
      s - the s-parameter value.
      Returns:
      the outward unit normal vector at a location of the outline defined by the s-parameter value.
    • getCurvature

      public double getCurvature(int index)
      Returns the signed curvature of the outline shape at a knot point.
      Parameters:
      index - the index to the knot point.
      Returns:
      the signed curvature at a knot point.
    • getCurvature

      public double getCurvature(double s)
      Returns the signed curvature of the outline shape at a particular value of the s-parameter.
      Parameters:
      s - the s-parameter value.
      Returns:
      the signed curvature at a location of the outline defined by the s-parameter value.
    • draw

      public boolean draw(Graphics g, Rectangle visibleRectangle, int imageDrawCols, int imageDrawRows, int xOffset, int yOffset, int nCols, int nRows, float pixelXSize, float pixelYSize, boolean drawAnnotation)
      Description copied from class: ROI
      Draws this ROI if it needs to be be drawn on screen.
      Overrides:
      draw in class ROI
      Parameters:
      g - the graphics context for the drawing operation.
      visibleRectangle - the part of the image that can be seen on-screen.
      imageDrawCols - width of the area in which this portion of the image is to be drawn.
      imageDrawRows - height of the area in which this portion of the image is to be drawn.
      xOffset - a horizontal offset for drawing operations.
      yOffset - a vertical offset for drawing operations.
      nCols - the number of columns in the image on which this ROI is defined.
      nRows - the number of rows in the image on which this ROI is defined.
      pixelXSize - pixel width for the image on which this ROI is defined.
      pixelYSize - pixel height for the image on which this ROI is defined.
      drawAnnotation - a flag to indicate whether annotation should be drawn.
      Returns:
      true if the ROI is visible and been drawn on screen; false otherwise.
    • drawInOrthoView

      public void drawInOrthoView(Image orthoView, org.jogamp.vecmath.Point3f orthoViewPosition, org.jogamp.java3d.Transform3D imageToViewTx, int nCols, int nRows, int nSlices, float pixelXSize, float pixelYSize, boolean filled)
      Description copied from class: ROI
      Draws this ROI on top of an orthogonal view of an image.
      Specified by:
      drawInOrthoView in class ROI
      Parameters:
      orthoView - the Image into which the ROI is to be drawn.
      orthoViewPosition - the coordinates (col, row, slice position) of the orthogonal view in the original image.
      imageToViewTx - the Transform3D that maps original image pixel coordinates to pixel coordinates in the orthogonal view.
      nCols - the number of columns in the original image.
      nRows - the number of rows in the original image.
      nSlices - the number of slices in the original image.
      pixelXSize - the pixel width in the original image.
      pixelYSize - the pixel height in the original image.
      filled - whether the ROI should be drawn filled (effective only for ROIs that enclose an area).
    • getFeret

      public Feret getFeret()
      Description copied from class: ROI
      Returns the minimum and maximum Feret's diameter for this ROI, in mm.
      Specified by:
      getFeret in class ROI
      Returns:
      the minimum and maximum Feret's diameter (in mm) as a Feret object.
    • getPerimeter

      public double getPerimeter()
      Description copied from class: ROI
      Returns the perimeter length of this ROI.
      Specified by:
      getPerimeter in class ROI
      Returns:
      the perimeter length of this ROI.
    • getCentroid

      public org.jogamp.vecmath.Point2d getCentroid()
      Description copied from class: ROI
      Returns the centroid (centre of area) of this ROI.
      Specified by:
      getCentroid in class ROI
      Returns:
      the centroid of this ROI.
    • getPrincipalAxisAngle

      public double getPrincipalAxisAngle()
      Returns the angle between the major principal axis of this ROI and the x-axis.
      Returns:
      the main principal axis angle of this ROI.
    • toIrregular

      public IrregularROI toIrregular()
      Creates a new IrregularROI that is close to the shape of this SplineROI.
      Returns:
      a new IrregularROI that is close to the shape of this SplineROI.
    • recalculateSplines

      protected void recalculateSplines()
      Recalculate the splines that defined the shape of this SplineROI.
    • approximate

      public SplineROI approximate(int nKnots) throws ROIException
      Creates a new SplineROI which approximates this SplineROI, but which has the specified number of knot points and where the knot points are evenly distributed in the s-parameter.
      Parameters:
      nKnots - the number of knot points in the new SplineROI.
      Returns:
      a new SplineROI which will approximate this SplineROI but which will have the given number of knot points, with the knot points evenly distributed in s.
      Throws:
      ROIException - if the specified number of knot points is invalid.
    • reduce

      public SplineROI reduce(float fractionalError)
      Creates a new SplineROI which approximates this SplineROI, but which has the miniumum number of knot points to appoximate this SplineROI with the specified fractional error.
      Parameters:
      fractionalError - the maximum fractional error in outline position that can be tolerated.
      Returns:
      a new SplineROI which will approximate this SplineROI but which will have the minimum number of knot points, with the knot points evenly distributed in s.
    • interpolate

      public static SplineROI interpolate(SplineROI s1, SplineROI s2, double alpha) throws ROIException
      Creates a new SplineROI by interpolating between two SplineROIs. The new SplineROI is equal to (1-alpha)*s1 + alpha*s2.

      The number of knot points in the interpolated ROI will be equal to the greater of the number of knot points in s1 and s2.

      Parameters:
      s1 - the first SplineROI.
      s2 - the second SplineROI.
      alpha - the alpha interpolation parameter.
      Returns:
      a new SplineROI by interpolating between two SplineROIs.
      Throws:
      ROIException - if the interpolation can't be performed.
    • alignKnots

      public static void alignKnots(List<SplineROI> rois, int minNKnots) throws ROIException
      Aligns the knot points in a set of SplineROIs, so that there is spatial correspondence as far as possible across the knots. On return, the number of knot points in the SplineROIs will be a power of two, and the knot points will be evenly spaced in the s-parameter.

      The number of knot points in each of the ROIs may be increased to the next-highest power of two that is greater than or equal to the largest number of knot points found in any of the ROIs.

      Parameters:
      rois - the List of ROIs to align.
      minNKnots - the minimum number of knot points in the aligned ROIs.
      Throws:
      ROIException - if the ROIs cannot be aligned.
    • alignKnots

      public static void alignKnots(SplineROI s1, SplineROI s2, int nKnots) throws ROIException
      Aligns the knot points in a pair of SplineROIs, so that there is spatial correspondence as far as possible across the knots.

      The number of knot points in each of the ROIs will be set to the specified number of knot points, and the knots will be evenly spaced in the s-parameter.

      Parameters:
      s1 - the first SplineROI to align.
      s2 - the second SplineROI to align.
      nKnots - the number of knot points in the aligned ROIs.
      Throws:
      ROIException - if the ROIs cannot be aligned.
    • getVertexHandles

      public Handle[] getVertexHandles()
      Description copied from interface: EditableOutlineROI
      Returns an array of VertexHandles.
      Specified by:
      getVertexHandles in interface EditableOutlineROI
      Returns:
      an array of VertexHandles, or null if this ROI is not having its outline edited.
    • getPrecedingVisibleHandle

      public Handle getPrecedingVisibleHandle(Handle handle)
      Description copied from interface: EditableOutlineROI
      Returns the visible Handle that is immediately before the specified handle, in the order in which they were placed around the ROI.
      Specified by:
      getPrecedingVisibleHandle in interface EditableOutlineROI
      Parameters:
      handle - the handle for which to get the preceding handle.
      Returns:
      the preceding visible Handle, or null if there is no preceding visible handle.
    • getFollowingVisibleHandle

      public Handle getFollowingVisibleHandle(Handle handle)
      Description copied from interface: EditableOutlineROI
      Returns the visible Handle that is immediately after the specified handle, in the order in which they were placed around the ROI.
      Specified by:
      getFollowingVisibleHandle in interface EditableOutlineROI
      Parameters:
      handle - the handle for which to get the following handle.
      Returns:
      the following visible Handle, or null if there is no following visible handle.
    • selfIntersects

      public boolean selfIntersects()
      Returns true if this ROI has outline segments that cross.
      Returns:
      true if this ROI has outline segments that cross; false otherwise.
    • contains

      public boolean contains(ROI roi)
      Indicates whether this SplineROI contains another ROI entirely within its borders.
      Specified by:
      contains in class ROI
      Parameters:
      roi - the ROI to be tested for containment within this ROI.
      Returns:
      true if this SplineROI contains the specified ROI; false otherwise.
    • intersect

      public List<ROI> intersect(ROI roi, IndeterminateProgressMonitor progressMonitor) throws ROIException, CancelledException
      Description copied from class: ROI
      Performs an intersection operation on the shape of this ROI with another ROI.
      Overrides:
      intersect in class ROI
      Parameters:
      roi - the ROI with which to perform the intersection operation.
      progressMonitor - if non-null, the IndeterminateProgressMonitor that can be used to cancel the operation.
      Returns:
      a List<ROI> of ROIs that result from the operation.
      Throws:
      ROIException - if the operation cannot be performed.
      CancelledException - if the operation is cancelled by the user.
    • equals

      public boolean equals(Object o)
      Description copied from class: ROI
      Indicates whether some Object is equal to this ROI. To be equal, the Object must be an ROI of the same type, and of the same shape and location as this ROI.
      Specified by:
      equals in class ROI
      Parameters:
      o - the Object to be tested for equality to this ROI.
      Returns:
      true if the supplied Object is an ROI of the same type, shape and location as this ROI; false otherwise.
    • hashCode

      public int hashCode()
      Returns a hash code value for this SplineROI.
      Overrides:
      hashCode in class ROI
      Returns:
      a hash code value for this SplineROI.
    • set

      public void set(ROI roi) throws ClassCastException
      Description copied from class: ROI
      Sets the shape of this ROI to the shape of the supplied argument ROI.
      Specified by:
      set in class ROI
      Parameters:
      roi - the ROI from which the shape is set.
      Throws:
      ClassCastException - if the sub-class of the argument ROI is not the same as this ROI.
    • getCopy

      public ROI getCopy()
      Description copied from class: ROI
      Returns a copy of this ROI. The copy will be identical in shape and annotation as the original ROI, but with a history of that of a newly-created ROI.
      Specified by:
      getCopy in class ROI
      Returns:
      a copy of this ROI.
    • clone

      public SplineROI clone()
      Description copied from class: ROI
      Returns a clone of this ROI. The copy will be identical in shape and annotation as the original ROI, and with a history identical to the cloned ROI.
      Overrides:
      clone in class ROI
      Returns:
      a clone of this ROI, cast to an Object.
    • toString

      public String toString()
      Description copied from class: ROI
      Returns a String describing this ROI.
      Specified by:
      toString in class ROI
      Returns:
      a String describing this ROI.
    • getDescription

      public String getDescription()
      Description copied from class: ROI
      Return a description of this type of ROI.
      Specified by:
      getDescription in class ROI
      Returns:
      a String describing the type of this ROI.
    • getName

      public static String getName()
      Returns a descriptive name for this type of ROI.
      Returns:
      a String describing this type of ROI.
    • getButtonIcon

      public static Icon getButtonIcon()
      Returns an Icon that can be used for a button to create this type of ROI.
      Returns:
      an Icon that can be used to represent this type of ROI.