@Override public void mutate(final PlanarImg<IntType, IntArray> arg) { long planeCount = 1; for (int d = 2; d < arg.numDimensions(); d++) { planeCount *= arg.dimension(d); } for (int p = 0; p < planeCount; p++) { final int[] plane = arg.getPlane(p).getCurrentStorageArray(); for (int i = 0; i < plane.length; i++) { plane[i] -= value; } } }
public PlanarLocalizingCursor( final PlanarImg< T, ? > container ) { super( container.numDimensions() ); this.type = container.createLinkedType(); this.container = container; lastIndex = ( ( n > 1 ) ? container.dimensions[ 1 ] : 1 ) * container.dimensions[ 0 ] - 1; lastSliceIndex = container.numSlices() - 1; max = new int[ n ]; for ( int d = 0; d < n; ++d ) max[ d ] = ( int ) container.max( d ); reset(); }
public PlanarImg( final List< A > slices, final long[] dim, final Fraction entitiesPerPixel ) { super( dim, entitiesPerPixel ); this.dimensions = longToIntArray( dim ); this.sliceSteps = computeSliceSteps( dim ); this.numSlices = numberOfSlices( dim ); if(slices.size() != numSlices) throw new IllegalArgumentException(); this.mirror = slices; }
public PlanarCursor( final PlanarImg< T, ? > container ) { super( container.numDimensions() ); this.type = container.createLinkedType(); this.container = container; lastIndex = ( ( n > 1 ) ? container.dimensions[ 1 ] : 1 ) * container.dimensions[ 0 ] - 1; lastSliceIndex = container.numSlices() - 1; reset(); }
@Override public boolean conforms() { // NB: Until https://github.com/imagej/imagej-ops/issues/95 is addressed. // The warning is expected, because the image parameter is assigned via // reflection and hence might not match the declared generic types. return in().firstElement() instanceof ByteType; }
public PlanarRandomAccess( final PlanarImg< T, ? > container ) { super( container.numDimensions() ); sliceSteps = container.sliceSteps; width = ( int ) container.dimension( 0 ); type = container.createLinkedType(); type.updateIndex( 0 ); type.updateContainer( this ); }
/** * Constructor * * @param container - the container this cursor shall work on. * @param interval - the interval to iterate over. */ public PlanarPlaneSubsetCursor( final PlanarImg< T, ? > container, final Interval interval ) { super( container.numDimensions() ); this.type = container.createLinkedType(); this.container = container; this.planeSize = ( ( n > 1 ) ? ( int ) interval.dimension( 1 ) : 1 ) * ( int ) interval.dimension( 0 ); this.lastPlaneIndex = planeSize - 1; this.sliceIndex = ( int ) ( offset( interval ) / planeSize ); reset(); }
private long offset(final Interval interval) { final int maxDim = numDimensions() - 1; long i = interval.min(maxDim); for (int d = maxDim - 1; d >= 0; --d) i = i * container.dimension(d) + interval.min(d); return i; } }
private < A extends ArrayDataAccess< A > > PlanarImg< T, ? > create( final long[] dimensions, final T type, final NativeTypeFactory< T, A > typeFactory ) { final Fraction entitiesPerPixel = type.getEntitiesPerPixel(); final PlanarImg< T, A > img = new PlanarImg<>( ArrayDataAccessFactory.get( typeFactory ), dimensions, entitiesPerPixel ); img.setLinkedType( typeFactory.createLinkedType( img ) ); return img; }
protected PlanarCursor( final PlanarCursor< T > cursor ) { super( cursor.numDimensions() ); container = cursor.container; this.type = container.createLinkedType(); lastIndex = cursor.lastIndex; lastSliceIndex = cursor.lastSliceIndex; sliceIndex = cursor.sliceIndex; index = cursor.index; type.updateContainer( this ); type.updateIndex( index ); }
/** * @return The number of planes in the provided {@link Img}. */ private int getPlaneCount(final Img<?> img) { // PlanarImg case if (PlanarImg.class.isAssignableFrom(img.getClass())) { final PlanarImg<?, ?> planarImg = (PlanarImg<?, ?>) img; return planarImg.numSlices(); } // General case int count = 1; for (int d = 2; d < img.numDimensions(); d++) { count *= img.dimension(d); } return count; }
/** * {@inheritDoc} */ @Override public boolean supportsOptimizedCursor( final Interval interval ) { // we want to optimize exactly one plane return Intervals.contains( this, interval ) && correspondsToPlane( interval ); }
@Override public boolean conforms() { // NB: Until https://github.com/imagej/imagej-ops/issues/95 is addressed. // The warning is expected, because the image parameter is assigned via // reflection and hence might not match the declared generic types. return in().firstElement() instanceof IntType; }
public PlanarRandomAccess( final PlanarImg< T, ? > container ) { super( container.numDimensions() ); sliceSteps = container.sliceSteps; width = ( int ) container.dimension( 0 ); type = container.createLinkedType(); type.updateIndex( 0 ); type.updateContainer( this ); }
public PlanarCursor( final PlanarImg< T, ? > container ) { super( container.numDimensions() ); this.type = container.createLinkedType(); this.container = container; lastIndex = ( ( n > 1 ) ? container.dimensions[ 1 ] : 1 ) * container.dimensions[ 0 ] - 1; lastSliceIndex = container.numSlices() - 1; reset(); }
/** * Constructor * * @param container - the container this cursor shall work on. * @param interval - the interval to iterate over. */ public PlanarPlaneSubsetCursor( final PlanarImg< T, ? > container, final Interval interval ) { super( container.numDimensions() ); this.type = container.createLinkedType(); this.container = container; this.planeSize = ( ( n > 1 ) ? ( int ) interval.dimension( 1 ) : 1 ) * ( int ) interval.dimension( 0 ); this.lastPlaneIndex = planeSize - 1; this.sliceIndex = ( int ) ( offset( interval ) / planeSize ); reset(); }
private long offset( final Interval interval ) { final int maxDim = numDimensions() - 1; long i = interval.min( maxDim ); for ( int d = maxDim - 1; d >= 0; --d ) i = i * container.dimension( d ) + interval.min( d ); return i; }
private < A extends ArrayDataAccess< A > > PlanarImg< T, ? > create( final long[] dimensions, final T type, final NativeTypeFactory< T, A > typeFactory ) { final Fraction entitiesPerPixel = type.getEntitiesPerPixel(); final PlanarImg< T, A > img = new PlanarImg<>( ArrayDataAccessFactory.get( typeFactory ), dimensions, entitiesPerPixel ); img.setLinkedType( typeFactory.createLinkedType( img ) ); return img; }
protected PlanarCursor( final PlanarCursor< T > cursor ) { super( cursor.numDimensions() ); container = cursor.container; this.type = container.createLinkedType(); lastIndex = cursor.lastIndex; lastSliceIndex = cursor.lastSliceIndex; sliceIndex = cursor.sliceIndex; index = cursor.index; type.updateContainer( this ); type.updateIndex( index ); }
/** * @return The number of planes in the provided {@link Img}. */ private int getPlaneCount(final Img<?> img) { // PlanarImg case if (PlanarImg.class.isAssignableFrom(img.getClass())) { final PlanarImg<?, ?> planarImg = (PlanarImg<?, ?>) img; return planarImg.numSlices(); } // General case int count = 1; for (int d = 2; d < img.numDimensions(); d++) { count *= img.dimension(d); } return count; }