Skip to content
Snippets Groups Projects
Commit aefc5bc6 authored by Tobias Pietzsch's avatar Tobias Pietzsch
Browse files

let ViewerImgLoader compute the mipmapTransforms.

parent 3738e8be
No related branches found
No related tags found
No related merge requests found
......@@ -29,15 +29,9 @@ public class SpimSource< T extends NumericType< T > > extends AbstractSpimSource
zero.setZero();
final View view = sequenceViews.getView( timepoint, setup );
final AffineTransform3D reg = view.getModel();
final AffineTransform3D mipmapTransform = new AffineTransform3D();
for ( int level = 0; level < currentSources.length; level++ )
{
final double[] resolution = imgLoader.getMipmapResolutions( setup )[ level ];
for ( int d = 0; d < 3; ++d )
{
mipmapTransform.set( resolution[ d ], d, d );
mipmapTransform.set( 0.5 * ( resolution[ d ] - 1 ), d, 3 );
}
final AffineTransform3D mipmapTransform = imgLoader.getMipmapTransforms( setup )[ level ];
currentSourceTransforms[ level ].set( reg );
currentSourceTransforms[ level ].concatenate( mipmapTransform );
currentSources[ level ] = imgLoader.getImage( view, level );
......
......@@ -4,6 +4,7 @@ import mpicbg.spim.data.ImgLoader;
import mpicbg.spim.data.View;
import net.imglib2.RandomAccessibleInterval;
import net.imglib2.Volatile;
import net.imglib2.realtransform.AffineTransform3D;
import bdv.img.cache.Cache;
public interface ViewerImgLoader< T, V extends Volatile< T > > extends ImgLoader< T >
......@@ -18,6 +19,8 @@ public interface ViewerImgLoader< T, V extends Volatile< T > > extends ImgLoader
public double[][] getMipmapResolutions( final int setup );
public AffineTransform3D[] getMipmapTransforms( final int setup );
public int numMipmapLevels( final int setup );
public Cache getCache();
......
......@@ -34,15 +34,9 @@ public class VolatileSpimSource< T extends NumericType< T >, V extends Volatile<
zero.setZero();
final View view = sequenceViews.getView( timepoint, setup );
final AffineTransform3D reg = view.getModel();
final AffineTransform3D mipmapTransform = new AffineTransform3D();
for ( int level = 0; level < currentSources.length; level++ )
{
final double[] resolution = imgLoader.getMipmapResolutions( setup )[ level ];
for ( int d = 0; d < 3; ++d )
{
mipmapTransform.set( resolution[ d ], d, d );
mipmapTransform.set( 0.5 * ( resolution[ d ] - 1 ), d, 3 );
}
final AffineTransform3D mipmapTransform = imgLoader.getMipmapTransforms( setup )[ level ];
currentSourceTransforms[ level ].set( reg );
currentSourceTransforms[ level ].concatenate( mipmapTransform );
currentSources[ level ] = imgLoader.getVolatileImage( view, level );
......
......@@ -15,6 +15,7 @@ import net.imglib2.RandomAccessibleInterval;
import net.imglib2.img.NativeImg;
import net.imglib2.img.basictypeaccess.volatiles.array.VolatileShortArray;
import net.imglib2.img.cell.CellImg;
import net.imglib2.realtransform.AffineTransform3D;
import net.imglib2.sampler.special.ConstantRandomAccessible;
import net.imglib2.type.NativeType;
import net.imglib2.type.numeric.integer.UnsignedShortType;
......@@ -43,6 +44,8 @@ public class Hdf5ImageLoader extends AbstractViewerImgLoader< UnsignedShortType,
protected final ArrayList< double[][] > perSetupMipmapResolutions;
protected final ArrayList< AffineTransform3D[] > perSetupMipmapTransforms;
protected final ArrayList< int[][] > perSetupSubdivisions;
/**
......@@ -88,6 +91,7 @@ public class Hdf5ImageLoader extends AbstractViewerImgLoader< UnsignedShortType,
hdf5Reader = null;
cache = null;
perSetupMipmapResolutions = new ArrayList< double[][] >();
perSetupMipmapTransforms = new ArrayList< AffineTransform3D[] >();
perSetupSubdivisions = new ArrayList< int[][] >();
partitions = new ArrayList< Partition >();
if ( hdf5Partitions != null )
......@@ -106,6 +110,7 @@ public class Hdf5ImageLoader extends AbstractViewerImgLoader< UnsignedShortType,
{
super( new UnsignedShortType(), new VolatileUnsignedShortType() );
this.hdf5File = hdf5File;
perSetupMipmapTransforms = new ArrayList< AffineTransform3D[] >();
perSetupMipmapResolutions = new ArrayList< double[][] >();
perSetupSubdivisions = new ArrayList< int[][] >();
partitions = new ArrayList< Partition >();
......@@ -127,13 +132,27 @@ public class Hdf5ImageLoader extends AbstractViewerImgLoader< UnsignedShortType,
perSetupSubdivisions.clear();
for ( int setup = 0; setup < numSetups; ++setup )
{
final double [][] mipmapResolutions = hdf5Reader.readDoubleMatrix( getResolutionsPath( setup ) );
final double[][] mipmapResolutions = hdf5Reader.readDoubleMatrix( getResolutionsPath( setup ) );
perSetupMipmapResolutions.add( mipmapResolutions );
if ( mipmapResolutions.length > maxNumLevels )
maxNumLevels = mipmapResolutions.length;
maxLevels[ setup ] = mipmapResolutions.length - 1;
final int [][] subdivisions = hdf5Reader.readIntMatrix( getSubdivisionsPath( setup ) );
final AffineTransform3D[] mipmapTransforms = new AffineTransform3D[ mipmapResolutions.length ];
for ( int level = 0; level < mipmapResolutions.length; level++ )
{
final AffineTransform3D mipmapTransform = new AffineTransform3D();
final double[] resolution = mipmapResolutions[ level ];
for ( int d = 0; d < 3; ++d )
{
mipmapTransform.set( resolution[ d ], d, d );
mipmapTransform.set( 0.5 * ( resolution[ d ] - 1 ), d, 3 );
}
mipmapTransforms[ level ] = mipmapTransform;
}
perSetupMipmapTransforms.add( mipmapTransforms );
final int[][] subdivisions = hdf5Reader.readIntMatrix( getSubdivisionsPath( setup ) );
perSetupSubdivisions.add( subdivisions );
}
......@@ -260,6 +279,12 @@ public class Hdf5ImageLoader extends AbstractViewerImgLoader< UnsignedShortType,
return perSetupMipmapResolutions.get( setup );
}
@Override
public AffineTransform3D[] getMipmapTransforms( final int setup )
{
return perSetupMipmapTransforms.get( setup );
}
public int[][] getSubdivisions( final int setup )
{
return perSetupSubdivisions.get( setup );
......
......@@ -4,6 +4,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import mpicbg.spim.data.View;
import net.imglib2.FinalInterval;
......@@ -11,6 +12,7 @@ import net.imglib2.RandomAccessibleInterval;
import net.imglib2.img.NativeImg;
import net.imglib2.img.basictypeaccess.volatiles.array.VolatileShortArray;
import net.imglib2.img.cell.CellImg;
import net.imglib2.realtransform.AffineTransform3D;
import net.imglib2.sampler.special.ConstantRandomAccessible;
import net.imglib2.type.NativeType;
import net.imglib2.type.numeric.integer.UnsignedShortType;
......@@ -35,6 +37,8 @@ public class RemoteImageLoader extends AbstractViewerImgLoader< UnsignedShortTyp
protected RemoteImageLoaderMetaData metadata;
protected final ArrayList< AffineTransform3D[] > perSetupMipmapTransforms;
protected int[][] cellsDimensions;
protected VolatileGlobalCellCache< VolatileShortArray > cache;
......@@ -42,6 +46,7 @@ public class RemoteImageLoader extends AbstractViewerImgLoader< UnsignedShortTyp
public RemoteImageLoader()
{
super( new UnsignedShortType(), new VolatileUnsignedShortType() );
perSetupMipmapTransforms = new ArrayList< AffineTransform3D[] >();
}
private void open() throws IOException
......@@ -57,6 +62,23 @@ public class RemoteImageLoader extends AbstractViewerImgLoader< UnsignedShortTyp
metadata.maxNumLevels,
metadata.maxLevels,
10 );
for ( int setup = 0; setup < metadata.numSetups; ++setup )
{
final double[][] mipmapResolutions = metadata.perSetupMipmapResolutions.get( setup );
final AffineTransform3D[] mipmapTransforms = new AffineTransform3D[ mipmapResolutions.length ];
for ( int level = 0; level < mipmapResolutions.length; level++ )
{
final AffineTransform3D mipmapTransform = new AffineTransform3D();
final double[] resolution = mipmapResolutions[ level ];
for ( int d = 0; d < 3; ++d )
{
mipmapTransform.set( resolution[ d ], d, d );
mipmapTransform.set( 0.5 * ( resolution[ d ] - 1 ), d, 3 );
}
mipmapTransforms[ level ] = mipmapTransform;
}
perSetupMipmapTransforms.add( mipmapTransforms );
}
cellsDimensions = metadata.createCellsDimensions();
}
......@@ -114,6 +136,12 @@ public class RemoteImageLoader extends AbstractViewerImgLoader< UnsignedShortTyp
return metadata.perSetupMipmapResolutions.get( setup );
}
@Override
public AffineTransform3D[] getMipmapTransforms( final int setup )
{
return perSetupMipmapTransforms.get( setup );
}
public int[][] getSubdivisions( final int setup )
{
return metadata.perSetupSubdivisions.get( setup );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment