public class CenteredRectangleShape extends Object implements Shape
This specific factory differs to RectangleShape in that it allows
non-isotropic rectangular shapes. However, it constrains the the neighborhood
to be symmetric by its origin.
The size of the neighborhood is specified by an int[] span
array, so that in every dimension d, the extent of the
neighborhood is given by 2 × span[d] + 1.
This factory exists because RectangleShape which is based on the same
components, only allows for square neighborhoods.
| Constructor and Description |
|---|
CenteredRectangleShape(int[] span,
boolean skipCenter)
Constructs a factory for symmetric, non-isotropic rectangle
neighborhoods.
|
public CenteredRectangleShape(int[] span,
boolean skipCenter)
The size of the neighborhood is specified by an int[] span
array, so that in every dimension d, the extent of the
neighborhood is given by 2 × span[d] + 1.
span - the span of the neighborhood.skipCenter - whether we should skip the central pixel or not.public <T> RectangleShape.NeighborhoodsIterableInterval<T> neighborhoods(RandomAccessibleInterval<T> source)
ShapeIterableInterval that contains all Neighborhoods of the source image.
A Cursor on the resulting accessible can be used to access the
neighborhoods. As usual, when the cursor is moved, a
neighborhood obtained previously from the cursor
should be considered invalid.
The neighborhoods that are obtained from the
resulting accessible are unsafe in the following sense: Every time,
a Cursor is requested (using IterableInterval.cursor() etc)
the same Cursor instance is re-used. If you require to have more
than one Cursor into the current neighborhood at a given time you
have several options:
Sampler.copy() the cursor you obtained using
IterableInterval.cursor().
IterableInterval<Neighborhood>.
Shape.neighborhoodsSafe(RandomAccessibleInterval) which
returns a new IterableInterval.cursor() every time (but therefore is
not recommended if you want to use enhanced for loops).
neighborhoods in interface Shapesource - source image.IterableInterval that contains all
Neighborhoods of the source image.public <T> RectangleShape.NeighborhoodsAccessible<T> neighborhoodsRandomAccessible(RandomAccessible<T> source)
ShapeRandomAccessibleInterval that contains all
Neighborhoods of the source image.
A RandomAccess on the resulting accessible can be used to access
the neighborhoods. As usual, when the access is
moved, a neighborhood obtained previously from the
access should be considered invalid.
The neighborhoods that are obtained from the
resulting accessible are unsafe in the following sense: Every time,
a Cursor is requested (using IterableInterval.cursor() etc)
the same Cursor instance is re-used. If you require to have more
than one Cursor into the current neighborhood at a given time you
have several options:
Sampler.copy() the cursor you obtained using
IterableInterval.cursor().
RandomAccesses, i.e.,
accesses on the
RandomAccessibleInterval<Neighborhood>.
Shape.neighborhoodsRandomAccessibleSafe(net.imglib2.RandomAccessible<T>) which returns a new
IterableInterval.cursor() every time (but therefore is not
recommended if you want to use enhanced for loops).
neighborhoodsRandomAccessible in interface Shapesource - source image.RandomAccessibleInterval that contains all
Neighborhoods of the source image.public <T> RectangleShape.NeighborhoodsIterableInterval<T> neighborhoodsSafe(RandomAccessibleInterval<T> source)
ShapeIterableInterval that contains all Neighborhoods of the source image.
A Cursor on the resulting accessible can be used to access the
neighborhoods. As usual, when the cursor is moved, a
neighborhood obtained previously from the cursor
should be considered invalid.
Every time, a Cursor is requested from a Neighborhood
(where the neighborhood in turn is obtained from a cursor on the
IterableInterval returned by this method) a new Cursor instance
is created. If you want to use enhanced for loops on the
neighborhoods, consider using
Shape.neighborhoods(RandomAccessibleInterval) which re-uses the same
instance every time (but therefore has to be used carefully).
neighborhoodsSafe in interface Shapesource - source image.IterableInterval that contains all
Neighborhoods of the source image.public <T> RectangleShape.NeighborhoodsAccessible<T> neighborhoodsRandomAccessibleSafe(RandomAccessible<T> source)
ShapeRandomAccessibleInterval that contains all
Neighborhoods of the source image.
A RandomAccess on the resulting accessible can be used to access
the neighborhoods. As usual, when the access is
moved, a neighborhood obtained previously from the
access should be considered invalid.
Every time, a Cursor is requested from a Neighborhood
(where the neighborhood in turn is obtained from a cursor on the
IterableInterval returned by this method) a new Cursor instance
is created. If you want to use enhanced for loops on the
neighborhoods, consider using
Shape.neighborhoods(RandomAccessibleInterval) which re-uses the same
instance every time (but therefore has to be used carefully).
neighborhoodsRandomAccessibleSafe in interface Shapesource - source image.RandomAccessibleInterval that contains all
Neighborhoods of the source image.public boolean isSkippingCenter()
true if skipCenter was set to true
during construction, false otherwise.CenteredRectangleShape(int[], boolean)public int[] getSpan()
public Interval getStructuringElementBoundingBox(int numDimensions)
ShapeShape with numDimensions
dimensions.
Providing numDimensions is required since the input from which
neighborhoods are generated is not known yet. The
bounding box is described by an Interval with the center of the
bounding box located at zero.
The values of this bounding box should only be used to determine the extent
of the Shape, ignoring the absolute min
and max values.
getStructuringElementBoundingBox in interface ShapenumDimensions - dimensions of the ShapeInterval that describes the bounding box of a
ShapeCopyright © 2015–2022 ImgLib2. All rights reserved.