/** Makes an image that has same type, container, and dimensions as refImage. */ private static <T extends RealType<T>> ImgPlus<T> createBlankCopy( final ImgPlus<T> img) { final long[] dimensions = new long[img.numDimensions()]; img.dimensions(dimensions); final Img<T> blankImg = img.factory().create(dimensions, img.firstElement()); return new ImgPlus<T>(blankImg, img); }
/** * {@inheritDoc} */ @Override public ImgPlus< T > createEmptyOutput( ImgPlus< T > op ) { AxisType[] axes = new AxisType[ op.numDimensions() ]; op.axes( axes ); m_isNewDim.clear(); for ( int d = 0; d < m_newDimensions.length; d++ ) { for ( int a = 0; a < axes.length; a++ ) { if ( !axes[ a ].getLabel().equals( m_newDimensions[ d ] ) ) { m_isNewDim.set( d ); } } } long[] newDims = new long[ op.numDimensions() + m_isNewDim.cardinality() ]; Arrays.fill( newDims, 1 ); for ( int i = 0; i < op.numDimensions(); i++ ) { newDims[ i ] = op.dimension( i ); } return new ImgPlus< T >( op.factory().create( newDims, op.firstElement().createVariable() ) ); }
/** * {@inheritDoc} */ @Override public ImgPlus< T > createEmptyOutput( ImgPlus< T > op ) { BitSet isLength1 = new BitSet( op.numDimensions() ); for ( int d = 0; d < op.numDimensions(); d++ ) { if ( op.dimension( d ) == 1 ) { isLength1.set( d ); } } long[] min = new long[ op.numDimensions() - isLength1.cardinality() ]; long[] max = new long[ min.length ]; int d = 0; for ( int i = 0; i < op.numDimensions(); i++ ) { if ( !isLength1.get( i ) ) { max[ d ] = op.dimension( i ) - 1; d++; } } Img< T > res = op.factory().create( new FinalInterval( min, max ), op.firstElement().createVariable() ); return new ImgPlus< T >( res ); }
@Override public void copyDataFrom(final Dataset other) { // create a new img to hold data using our own factory @SuppressWarnings("rawtypes") final ImgFactory factory = getImgPlus().factory(); @SuppressWarnings("unchecked") final Img<? extends RealType<?>> newImg = factory.create(other.getDims(), other.getType()); // copy the data into the new img copyDataValues(other.getImgPlus(), newImg); // create new imgplus to contain data using the current name final double[] calib = new double[other.getDims().length]; other.calibration(calib); final ImgPlus<? extends RealType<?>> newImgPlus = wrapAsImgPlus(newImg, other.getAxes(), calib); // set my instance vars to the new values setRGBMerged(other.isRGBMerged()); setImgPlus(newImgPlus); }
@SuppressWarnings( { "rawtypes", "unchecked" } ) private synchronized < TT extends Type< TT >, II extends RandomAccessibleInterval< TT > > II createSubType( final II in, final Interval i ) { if ( in instanceof Labeling ) { return ( II ) new LabelingView( SubsetViews.iterableSubsetView( in, i ), ( ( Labeling ) in ).factory() ); } if ( in instanceof ImgPlus ) { ImgPlusView< TT > imgPlusView = new ImgPlusView< TT >( SubsetViews.iterableSubsetView( in, i ), ( ( ImgPlus ) in ).factory() ); new CopyMetadata( new CopyNamed(), new CopySourced(), new CopyImageMetadata(), new CopyCalibratedSpace( i ) ).compute( ( ImgPlus ) in, imgPlusView ); return ( II ) imgPlusView; } if ( in instanceof Img ) { return ( II ) new ImgView< TT >( SubsetViews.iterableSubsetView( in, i ), ( ( Img ) in ).factory() ); } return ( II ) SubsetViews.iterableSubsetView( in, i ); }
@SuppressWarnings( { "rawtypes", "unchecked" } ) private synchronized < TT extends Type< TT >, II extends RandomAccessibleInterval< TT > > II createSubType( final Interval i, final II in ) { if ( in instanceof Labeling ) { return ( II ) new LabelingView( SubsetViews.iterableSubsetView( in, i ), ( ( NativeImgLabeling ) in ).factory() ); } if ( in instanceof ImgPlus ) { ImgPlusView< TT > imgPlusView = new ImgPlusView< TT >( SubsetViews.iterableSubsetView( in, i ), ( ( ImgPlus ) in ).factory() ); new CopyMetadata( new CopyNamed(), new CopySourced(), new CopyImageMetadata(), new CopyCalibratedSpace( i ) ).compute( ( ImgPlus ) in, imgPlusView ); return ( II ) imgPlusView; } if ( in instanceof Img ) { return ( II ) new ImgView< TT >( SubsetViews.iterableSubsetView( in, i ), ( ( Img ) in ).factory() ); } return ( II ) SubsetViews.iterableSubsetView( in, i ); }