diff --git a/src/main/java/bdv/AbstractSpimSource.java b/src/main/java/bdv/AbstractSpimSource.java index ba8e1b93ed17032580371c1c890e55774753434e..c981e1039da5f2bac258e1e46449e7348ff5f2ab 100644 --- a/src/main/java/bdv/AbstractSpimSource.java +++ b/src/main/java/bdv/AbstractSpimSource.java @@ -1,6 +1,7 @@ package bdv; import mpicbg.spim.data.SequenceDescription; +import mpicbg.spim.data.View; import net.imglib2.RandomAccessible; import net.imglib2.RandomAccessibleInterval; import net.imglib2.RealRandomAccessible; @@ -9,6 +10,7 @@ import net.imglib2.interpolation.randomaccess.NLinearInterpolatorFactory; import net.imglib2.interpolation.randomaccess.NearestNeighborInterpolatorFactory; import net.imglib2.realtransform.AffineTransform3D; import net.imglib2.type.numeric.NumericType; +import net.imglib2.view.Views; import bdv.viewer.Interpolation; import bdv.viewer.Source; @@ -59,7 +61,40 @@ public abstract class AbstractSpimSource< T extends NumericType< T > > implement interpolatorFactories[ iNLinearMethod ] = new NLinearInterpolatorFactory< T >(); } - protected abstract void loadTimepoint( final int timepoint ); + protected void loadTimepoint( final int timepoint ) + { + currentTimepoint = timepoint; + if ( isPresent( timepoint ) ) + { + final T zero = getType().createVariable(); + zero.setZero(); + final View view = sequenceViews.getView( timepoint, setup ); + final AffineTransform3D reg = view.getModel(); + for ( int level = 0; level < currentSources.length; level++ ) + { + final AffineTransform3D mipmapTransform = getMipmapTransforms( setup )[ level ]; + currentSourceTransforms[ level ].set( reg ); + currentSourceTransforms[ level ].concatenate( mipmapTransform ); + currentSources[ level ] = getImage( view, level ); + for ( int method = 0; method < numInterpolationMethods; ++method ) + currentInterpolatedSources[ level ][ method ] = Views.interpolate( Views.extendValue( currentSources[ level ], zero ), interpolatorFactories[ method ] ); + } + } + else + { + for ( int level = 0; level < currentSources.length; level++ ) + { + currentSourceTransforms[ level ].identity(); + currentSources[ level ] = null; + for ( int method = 0; method < numInterpolationMethods; ++method ) + currentInterpolatedSources[ level ][ method ] = null; + } + } + } + + protected abstract AffineTransform3D[] getMipmapTransforms( final int setup ); + + protected abstract RandomAccessibleInterval< T > getImage( final View view, final int level ); @Override public boolean isPresent( final int t ) diff --git a/src/main/java/bdv/SpimSource.java b/src/main/java/bdv/SpimSource.java index 70b34d0655c43308680cca8e9f692e06d4004e18..801db3445fa1f911f143493cfb3c13fb0c9b968d 100644 --- a/src/main/java/bdv/SpimSource.java +++ b/src/main/java/bdv/SpimSource.java @@ -2,9 +2,9 @@ package bdv; import mpicbg.spim.data.SequenceDescription; import mpicbg.spim.data.View; +import net.imglib2.RandomAccessibleInterval; import net.imglib2.realtransform.AffineTransform3D; import net.imglib2.type.numeric.NumericType; -import net.imglib2.view.Views; public class SpimSource< T extends NumericType< T > > extends AbstractSpimSource< T > { @@ -20,40 +20,20 @@ public class SpimSource< T extends NumericType< T > > extends AbstractSpimSource } @Override - protected void loadTimepoint( final int timepoint ) + public T getType() { - currentTimepoint = timepoint; - if ( isPresent( timepoint ) ) - { - final T zero = imgLoader.getImageType().createVariable(); - zero.setZero(); - final View view = sequenceViews.getView( timepoint, setup ); - final AffineTransform3D reg = view.getModel(); - for ( int level = 0; level < currentSources.length; level++ ) - { - final AffineTransform3D mipmapTransform = imgLoader.getMipmapTransforms( setup )[ level ]; - currentSourceTransforms[ level ].set( reg ); - currentSourceTransforms[ level ].concatenate( mipmapTransform ); - currentSources[ level ] = imgLoader.getImage( view, level ); - for ( int method = 0; method < numInterpolationMethods; ++method ) - currentInterpolatedSources[ level ][ method ] = Views.interpolate( Views.extendValue( currentSources[ level ], zero ), interpolatorFactories[ method ] ); - } - } - else - { - for ( int level = 0; level < currentSources.length; level++ ) - { - currentSourceTransforms[ level ].identity(); - currentSources[ level ] = null; - for ( int method = 0; method < numInterpolationMethods; ++method ) - currentInterpolatedSources[ level ][ method ] = null; - } - } + return imgLoader.getImageType(); } @Override - public T getType() + protected RandomAccessibleInterval< T > getImage( final View view, final int level ) { - return imgLoader.getImageType(); + return imgLoader.getImage( view, level ); + } + + @Override + protected AffineTransform3D[] getMipmapTransforms( final int setup ) + { + return imgLoader.getMipmapTransforms( setup ); } } diff --git a/src/main/java/bdv/VolatileSpimSource.java b/src/main/java/bdv/VolatileSpimSource.java index d2dfb10d279230c222817119966157e6332ee331..7739d9e8753db9623481711d427cf4cdd24eaffb 100644 --- a/src/main/java/bdv/VolatileSpimSource.java +++ b/src/main/java/bdv/VolatileSpimSource.java @@ -2,11 +2,10 @@ package bdv; import mpicbg.spim.data.SequenceDescription; import mpicbg.spim.data.View; +import net.imglib2.RandomAccessibleInterval; import net.imglib2.Volatile; import net.imglib2.realtransform.AffineTransform3D; import net.imglib2.type.numeric.NumericType; -import net.imglib2.type.numeric.RealType; -import net.imglib2.view.Views; public class VolatileSpimSource< T extends NumericType< T >, V extends Volatile< T > & NumericType< V > > extends AbstractSpimSource< V > { @@ -24,38 +23,6 @@ public class VolatileSpimSource< T extends NumericType< T >, V extends Volatile< loadTimepoint( 0 ); } - @Override - protected void loadTimepoint( final int timepoint ) - { - currentTimepoint = timepoint; - if ( isPresent( timepoint ) ) - { - final V zero = imgLoader.getVolatileImageType().createVariable(); - zero.setZero(); - final View view = sequenceViews.getView( timepoint, setup ); - final AffineTransform3D reg = view.getModel(); - for ( int level = 0; level < currentSources.length; level++ ) - { - final AffineTransform3D mipmapTransform = imgLoader.getMipmapTransforms( setup )[ level ]; - currentSourceTransforms[ level ].set( reg ); - currentSourceTransforms[ level ].concatenate( mipmapTransform ); - currentSources[ level ] = imgLoader.getVolatileImage( view, level ); - for ( int method = 0; method < numInterpolationMethods; ++method ) - currentInterpolatedSources[ level ][ method ] = Views.interpolate( Views.extendValue( currentSources[ level ], zero ), interpolatorFactories[ method ] ); - } - } - else - { - for ( int level = 0; level < currentSources.length; level++ ) - { - currentSourceTransforms[ level ].identity(); - currentSources[ level ] = null; - for ( int method = 0; method < numInterpolationMethods; ++method ) - currentInterpolatedSources[ level ][ method ] = null; - } - } - } - @Override public V getType() { @@ -66,4 +33,16 @@ public class VolatileSpimSource< T extends NumericType< T >, V extends Volatile< { return nonVolatileSource; } + + @Override + protected RandomAccessibleInterval< V > getImage( final View view, final int level ) + { + return imgLoader.getVolatileImage( view, level ); + } + + @Override + protected AffineTransform3D[] getMipmapTransforms( final int setup ) + { + return imgLoader.getMipmapTransforms( setup ); + } }