Java Code Examples for mpicbg.imglib.image.Image#createLocalizableCursor()
The following examples show how to use
mpicbg.imglib.image.Image#createLocalizableCursor() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: AdjustInput.java From SPIM_Registration with GNU General Public License v2.0 | 6 votes |
public static void translate( final Image< FloatType > img, final float[] vector ) { final Image< FloatType > tmp = img.clone(); final LocalizableCursor< FloatType > cursor1 = img.createLocalizableCursor(); final Interpolator< FloatType > interpolator = tmp.createInterpolator( new LinearInterpolatorFactory<FloatType>( new OutOfBoundsStrategyMirrorFactory<FloatType>() ) ); final int numDimensions = img.getNumDimensions(); final float[] pos = new float[ numDimensions ]; while ( cursor1.hasNext() ) { cursor1.fwd(); for( int d = 0; d < numDimensions; ++d ) pos[ d ] = cursor1.getPosition( d ) - vector[ d ]; interpolator.setPosition( pos ); cursor1.getType().set( interpolator.getType() ); } cursor1.close(); interpolator.close(); }
Example 2
Source File: Block.java From SPIM_Registration with GNU General Public License v2.0 | 5 votes |
private static final void copy( final long start, final long loopSize, final Image< FloatType > source, final Image< FloatType > block, final int[] offset, final boolean inside, final OutOfBoundsStrategyFactory< FloatType > strategyFactory ) { final int numDimensions = source.getNumDimensions(); final LocalizableCursor<FloatType> cursor = block.createLocalizableCursor(); final LocalizableByDimCursor<FloatType> randomAccess; if ( inside ) randomAccess = source.createLocalizableByDimCursor(); else randomAccess = source.createLocalizableByDimCursor( strategyFactory ); cursor.fwd( start ); final int[] tmp = new int[ numDimensions ]; for ( long l = 0; l < loopSize; ++l ) { cursor.fwd(); cursor.getPosition( tmp ); for ( int d = 0; d < numDimensions; ++d ) tmp[ d ] += offset[ d ]; randomAccess.setPosition( tmp ); cursor.getType().set( randomAccess.getType() ); } }
Example 3
Source File: ExtractPSF.java From SPIM_Registration with GNU General Public License v2.0 | 5 votes |
/** * Make image the same size as defined, center it * * @param img * @return */ public static Image< FloatType > makeSameSize( final Image< FloatType > img, final int[] sizeIn ) { final int[] size = sizeIn.clone(); float min = Float.MAX_VALUE; for ( final FloatType f : img ) min = Math.min( min, f.get() ); final Image< FloatType > square = img.createNewImage( size ); final LocalizableCursor< FloatType > squareCursor = square.createLocalizableCursor(); final LocalizableByDimCursor< FloatType > inputCursor = img.createLocalizableByDimCursor( new OutOfBoundsStrategyValueFactory<FloatType>( new FloatType( min ) ) ); while ( squareCursor.hasNext() ) { squareCursor.fwd(); squareCursor.getPosition( size ); for ( int d = 0; d < img.getNumDimensions(); ++d ) size[ d ] = size[ d ] - square.getDimension( d )/2 + img.getDimension( d )/2; inputCursor.setPosition( size ); squareCursor.getType().set( inputCursor.getType().get() ); } return square; }
Example 4
Source File: PairWiseStitchingImgLib.java From Stitching with GNU General Public License v2.0 | 4 votes |
/** * Averages all channels into the target image. The size is given by the dimensions of the target image, * the offset (if applicable) is given by an extra field * * @param target - the target Image * @param offset - the offset of the area (might be [0,0] or [0,0,0]) * @param sources - a list of input Images */ protected static < T extends RealType< T >, S extends RealType< S > > void averageAllChannels( final Image< T > target, final ArrayList< Image< S > > sources, final int[] offset ) { // get the major numbers final int numDimensions = target.getNumDimensions(); final float numImages = sources.size(); long imageSize = target.getDimension( 0 ); for ( int d = 1; d < target.getNumDimensions(); ++d ) imageSize *= target.getDimension( d ); // run multithreaded final AtomicInteger ai = new AtomicInteger(0); final Thread[] threads = SimpleMultiThreading.newThreads(); final Vector<Chunk> threadChunks = SimpleMultiThreading.divideIntoChunks( imageSize, threads.length ); for (int ithread = 0; ithread < threads.length; ++ithread) threads[ithread] = new Thread(new Runnable() { @Override public void run() { // Thread ID final int myNumber = ai.getAndIncrement(); // get chunk of pixels to process final Chunk myChunk = threadChunks.get( myNumber ); final long startPos = myChunk.getStartPosition(); final long loopSize = myChunk.getLoopSize(); // the cursor for the output final LocalizableCursor< T > targetCursor = target.createLocalizableCursor(); // the input cursors final ArrayList< LocalizableByDimCursor< S > > sourceCursors = new ArrayList< LocalizableByDimCursor< S > > (); for ( final Image< S > source : sources ) sourceCursors.add( source.createLocalizableByDimCursor() ); // temporary array final int[] location = new int[ numDimensions ]; // move to the starting position of the current thread targetCursor.fwd( startPos ); // do as many pixels as wanted by this thread for ( long j = 0; j < loopSize; ++j ) { targetCursor.fwd(); targetCursor.getPosition( location ); for ( int d = 0; d < numDimensions; ++d ) location[ d ] += offset[ d ]; float sum = 0; for ( final LocalizableByDimCursor< S > sourceCursor : sourceCursors ) { sourceCursor.setPosition( location ); sum += sourceCursor.getType().getRealFloat(); } targetCursor.getType().setReal( sum / numImages ); } } }); SimpleMultiThreading.startAndJoin( threads ); }
Example 5
Source File: ExtractPSF.java From SPIM_Registration with GNU General Public License v2.0 | 4 votes |
/** * Get projection along the smallest dimension (which is usually the rotation axis) * * @return - the averaged, projected PSF */ public Image< FloatType > getMaxProjectionAveragePSF() { final int[] dimensions = avgPSF.getDimensions(); int minSize = dimensions[ 0 ]; int minDim = 0; for ( int d = 0; d < dimensions.length; ++d ) { if ( avgPSF.getDimension( d ) < minSize ) { minSize = avgPSF.getDimension( d ); minDim = d; } } final int[] projDim = new int[ dimensions.length - 1 ]; int dim = 0; int sizeProjection = 0; // the new dimensions for ( int d = 0; d < dimensions.length; ++d ) if ( d != minDim ) projDim[ dim++ ] = dimensions[ d ]; else sizeProjection = dimensions[ d ]; final Image< FloatType > proj = avgPSF.getImageFactory().createImage( projDim ); final LocalizableByDimCursor< FloatType > psfIterator = avgPSF.createLocalizableByDimCursor(); final LocalizableCursor< FloatType > projIterator = proj.createLocalizableCursor(); final int[] tmp = new int[ avgPSF.getNumDimensions() ]; while ( projIterator.hasNext() ) { projIterator.fwd(); dim = 0; for ( int d = 0; d < dimensions.length; ++d ) if ( d != minDim ) tmp[ d ] = projIterator.getPosition( dim++ ); tmp[ minDim ] = -1; float maxValue = -Float.MAX_VALUE; psfIterator.setPosition( tmp ); for ( int i = 0; i < sizeProjection; ++i ) { psfIterator.fwd( minDim ); final float value = psfIterator.getType().get(); if ( value > maxValue ) maxValue = value; } projIterator.getType().set( maxValue ); } proj.setName( "MIP of PSF's of " + viewStructure.getID() ); return proj; }
Example 6
Source File: ExtractPSF.java From SPIM_Registration with GNU General Public License v2.0 | 4 votes |
/** * Extracts the PSF by averaging the local neighborhood RANSAC correspondences * @param view - the SPIM view * @param size - the size in which the psf is extracted (in pixel units, z-scaling is ignored) * @return - the psf, NOT z-scaling corrected */ protected static Image<FloatType> extractPSF( final ViewDataBeads view, final int[] size ) { final int numDimensions = size.length; // Mirror produces some artifacts ... final OutOfBoundsStrategyFactory<FloatType> outside = new OutOfBoundsStrategyPeriodicFactory<FloatType>(); final InterpolatorFactory<FloatType> interpolatorFactory = new LinearInterpolatorFactory<FloatType>( outside ); final ImageFactory<FloatType> imageFactory = new ImageFactory<FloatType>( new FloatType(), view.getViewStructure().getSPIMConfiguration().processImageFactory ); final Image<FloatType> img = view.getImage(); final Image<FloatType> psf = imageFactory.createImage( size ); final Interpolator<FloatType> interpolator = img.createInterpolator( interpolatorFactory ); final LocalizableCursor<FloatType> psfCursor = psf.createLocalizableCursor(); final int[] sizeHalf = size.clone(); for ( int d = 0; d < numDimensions; ++d ) sizeHalf[ d ] /= 2; int numRANSACBeads = 0; for ( final Bead bead : view.getBeadStructure().getBeadList() ) { final double[] position = bead.getL().clone(); final int[] tmpI = new int[ position.length ]; final double[] tmpF = new double[ position.length ]; // check if it is a true correspondence if ( bead.getRANSACCorrespondence().size() > 0 ) { ++numRANSACBeads; psfCursor.reset(); while ( psfCursor.hasNext() ) { psfCursor.fwd(); psfCursor.getPosition( tmpI ); for ( int d = 0; d < numDimensions; ++d ) tmpF[ d ] = tmpI[ d ] - sizeHalf[ d ] + position[ d ]; interpolator.moveTo( tmpF ); psfCursor.getType().add( interpolator.getType() ); } } } // compute the average final FloatType n = new FloatType( numRANSACBeads ); psfCursor.reset(); while ( psfCursor.hasNext() ) { psfCursor.fwd(); psfCursor.getType().div( n ); } ViewDataBeads.normalizeImage( psf ); // TODO: Remove //ImageJFunctions.show( psf ); return psf; }
Example 7
Source File: DOM.java From SPIM_Registration with GNU General Public License v2.0 | 4 votes |
final public static void computeDifferencOfMean( final Image< LongType> integralImg, final Image< FloatType > domImg, final int sx1, final int sy1, final int sz1, final int sx2, final int sy2, final int sz2, final float min, final float max ) { final float diff = max - min; final float sumPixels1 = sx1 * sy1 * sz1; final float sumPixels2 = sx2 * sy2 * sz2; final float d1 = sumPixels1 * diff; final float d2 = sumPixels2 * diff; final int sx1Half = sx1 / 2; final int sy1Half = sy1 / 2; final int sz1Half = sz1 / 2; final int sx2Half = sx2 / 2; final int sy2Half = sy2 / 2; final int sz2Half = sz2 / 2; final int sxHalfMax = Math.max( sx1Half, sx2Half ); final int syHalfMax = Math.max( sy1Half, sy2Half ); final int szHalfMax = Math.max( sz1Half, sz2Half ); final int w = domImg.getDimension( 0 ) - ( Math.max( sx1, sx2 ) / 2 ) * 2; final int h = domImg.getDimension( 1 ) - ( Math.max( sy1, sy2 ) / 2 ) * 2; final int d = domImg.getDimension( 2 ) - ( Math.max( sz1, sz2 ) / 2 ) * 2; final long imageSize = domImg.getNumPixels(); final AtomicInteger ai = new AtomicInteger(0); final Thread[] threads = SimpleMultiThreading.newThreads(); final Vector<Chunk> threadChunks = SimpleMultiThreading.divideIntoChunks( imageSize, threads.length ); for (int ithread = 0; ithread < threads.length; ++ithread) threads[ithread] = new Thread(new Runnable() { public void run() { // Thread ID final int myNumber = ai.getAndIncrement(); final int[] position = new int[ 3 ]; // get chunk of pixels to process final Chunk myChunk = threadChunks.get( myNumber ); final long loopSize = myChunk.getLoopSize(); final LocalizableCursor< FloatType > cursor = domImg.createLocalizableCursor(); final LocalizableByDimCursor< LongType > randomAccess = integralImg.createLocalizableByDimCursor(); cursor.fwd( myChunk.getStartPosition() ); // do as many pixels as wanted by this thread for ( long j = 0; j < loopSize; ++j ) { final FloatType result = cursor.next(); final int x = cursor.getPosition( 0 ); final int y = cursor.getPosition( 1 ); final int z = cursor.getPosition( 2 ); final int xt = x - sxHalfMax; final int yt = y - syHalfMax; final int zt = z - szHalfMax; if ( xt >= 0 && yt >= 0 && zt >= 0 && xt < w && yt < h && zt < d ) { position[ 0 ] = x - sx1Half; position[ 1 ] = y - sy1Half; position[ 2 ] = z - sz1Half; randomAccess.setPosition( position ); final float s1 = computeSum2( sx1, sy1, sz1, randomAccess ) / d1; position[ 0 ] = x - sx2Half; position[ 1 ] = y - sy2Half; position[ 2 ] = z - sz2Half; randomAccess.setPosition( position ); final float s2 = computeSum2( sx2, sy2, sz2, randomAccess ) / d2; result.set( ( s2 - s1 ) ); } else { result.set( 0 ); } } } }); SimpleMultiThreading.startAndJoin( threads ); //ImageJFunctions.show( tmp1 ).setTitle( "s2" ); //ImageJFunctions.show( tmp2 ).setTitle( "s1" ); //ImageJFunctions.show( tmp3 ).setTitle( "1" ); }
Example 8
Source File: InteractiveDoG.java From SPIM_Registration with GNU General Public License v2.0 | 4 votes |
/** * Extract the current 2d region of interest from the souce image * * @param source - the source image, a {@link Image} which is a copy of the {@link ImagePlus} * @param rectangle - the area of interest * @param extraSize - the extra size around so that detections at the border of the roi are not messed up * @return */ protected Image<FloatType> extractImage( final FloatImagePlus< net.imglib2.type.numeric.real.FloatType > source, final Rectangle rectangle, final int extraSize ) { final Image<FloatType> img = new ImageFactory<FloatType>( new FloatType(), new ArrayContainerFactory() ).createImage( new int[]{ rectangle.width+extraSize, rectangle.height+extraSize } ); final int offsetX = rectangle.x - extraSize/2; final int offsetY = rectangle.y - extraSize/2; final int[] location = new int[ source.numDimensions() ]; if ( location.length > 2 ) location[ 2 ] = (imp.getCurrentSlice()-1)/imp.getNChannels(); final LocalizableCursor<FloatType> cursor = img.createLocalizableCursor(); final RandomAccess<net.imglib2.type.numeric.real.FloatType> positionable; if ( offsetX >= 0 && offsetY >= 0 && offsetX + img.getDimension( 0 ) < source.dimension( 0 ) && offsetY + img.getDimension( 1 ) < source.dimension( 1 ) ) { // it is completely inside so we need no outofbounds for copying positionable = source.randomAccess(); } else { positionable = Views.extendMirrorSingle( source ).randomAccess(); } while ( cursor.hasNext() ) { cursor.fwd(); cursor.getPosition( location ); location[ 0 ] += offsetX; location[ 1 ] += offsetY; positionable.setPosition( location ); cursor.getType().set( positionable.get().get() ); } return img; }
Example 9
Source File: InteractiveIntegral.java From SPIM_Registration with GNU General Public License v2.0 | 4 votes |
final public static void computeDifferencOfMeanSlice( final Image< LongType> integralImg, final Image< FloatType > sliceImg, final int z, final int sx1, final int sy1, final int sz1, final int sx2, final int sy2, final int sz2, final float min, final float max ) { final float sumPixels1 = sx1 * sy1 * sz1; final float sumPixels2 = sx2 * sy2 * sz2; final int sx1Half = sx1 / 2; final int sy1Half = sy1 / 2; final int sz1Half = sz1 / 2; final int sx2Half = sx2 / 2; final int sy2Half = sy2 / 2; final int sz2Half = sz2 / 2; final int sxHalfMax = Math.max( sx1Half, sx2Half ); final int syHalfMax = Math.max( sy1Half, sy2Half ); final int szHalfMax = Math.max( sz1Half, sz2Half ); final int w = sliceImg.getDimension( 0 ) - ( Math.max( sx1, sx2 ) / 2 ) * 2; final int h = sliceImg.getDimension( 1 ) - ( Math.max( sy1, sy2 ) / 2 ) * 2; final int d = (integralImg.getDimension( 2 ) - 1) - ( Math.max( sz1, sz2 ) / 2 ) * 2; final long imageSize = w * h; final AtomicInteger ai = new AtomicInteger(0); final Thread[] threads = SimpleMultiThreading.newThreads(); final Vector<Chunk> threadChunks = SimpleMultiThreading.divideIntoChunks( imageSize, threads.length ); for (int ithread = 0; ithread < threads.length; ++ithread) threads[ithread] = new Thread(new Runnable() { public void run() { // Thread ID final int myNumber = ai.getAndIncrement(); // get chunk of pixels to process final Chunk myChunk = threadChunks.get( myNumber ); final long loopSize = myChunk.getLoopSize(); final LocalizableCursor< FloatType > cursor = sliceImg.createLocalizableCursor(); final LocalizableByDimCursor< LongType > randomAccess = integralImg.createLocalizableByDimCursor(); cursor.fwd( myChunk.getStartPosition() ); // do as many pixels as wanted by this thread for ( long j = 0; j < loopSize; ++j ) { final FloatType result = cursor.next(); final int x = cursor.getPosition( 0 ); final int y = cursor.getPosition( 1 ); //final int z = cursor.getPosition( 2 ); final int xt = x - sxHalfMax; final int yt = y - syHalfMax; final int zt = z - szHalfMax; if ( xt >= 0 && yt >= 0 && zt >= 0 && xt < w && yt < h && zt < d ) { final float s1 = DOM.computeSum( x - sx1Half, y - sy1Half, z - sz1Half, sx1, sy1, sz1, randomAccess ) / sumPixels1; final float s2 = DOM.computeSum( x - sx2Half, y - sy2Half, z - sz2Half, sx2, sy2, sz2, randomAccess ) / sumPixels2; result.set( ( s2 - s1 ) / ( max - min ) ); } } } }); SimpleMultiThreading.startAndJoin( threads ); }