diff --git a/.gitignore b/.gitignore index cd8e675..c9bfc93 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,8 @@ .settings /target /samples + +# IntelliJ +.idea/ +*.iml + diff --git a/pom.xml b/pom.xml index a5d0ff1..ca416df 100644 --- a/pom.xml +++ b/pom.xml @@ -115,6 +115,7 @@ sc.fiji bigdataviewer-core + 10.2.1-SNAPSHOT net.imagej diff --git a/src/main/java/bdv/ij/ExportImagePlusAsN5PlugIn.java b/src/main/java/bdv/ij/ExportImagePlusAsN5PlugIn.java index 89f4882..4af7a40 100644 --- a/src/main/java/bdv/ij/ExportImagePlusAsN5PlugIn.java +++ b/src/main/java/bdv/ij/ExportImagePlusAsN5PlugIn.java @@ -84,8 +84,9 @@ public class ExportImagePlusAsN5PlugIn implements Command public static void main( final String[] args ) { new ImageJ(); - final ImagePlus imp = IJ.openImage( "/Users/pietzsch/workspace/data/confocal-series.tif" ); - imp.show(); + IJ.run("Confocal Series (2.2MB)"); + //final ImagePlus imp = IJ.openImage( "/Users/tischer/Desktop/Desktop/mri-stack-big.tif" ); + //imp.show(); new ExportImagePlusAsN5PlugIn().run(); } diff --git a/src/main/java/bdv/ij/ExportImagePlusPlugIn.java b/src/main/java/bdv/ij/ExportImagePlusPlugIn.java index f82418d..9bda38e 100644 --- a/src/main/java/bdv/ij/ExportImagePlusPlugIn.java +++ b/src/main/java/bdv/ij/ExportImagePlusPlugIn.java @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.Map; +import bdv.export.*; import net.imglib2.FinalDimensions; import net.imglib2.RandomAccessibleInterval; import net.imglib2.realtransform.AffineTransform3D; @@ -39,13 +40,8 @@ import org.scijava.command.Command; import org.scijava.plugin.Plugin; -import bdv.export.ExportMipmapInfo; import bdv.export.ExportScalePyramid.AfterEachPlane; import bdv.export.ExportScalePyramid.LoopbackHeuristic; -import bdv.export.ProgressWriter; -import bdv.export.ProposeMipmaps; -import bdv.export.SubTaskProgressWriter; -import bdv.export.WriteSequenceToHdf5; import bdv.ij.export.imgloader.ImagePlusImgLoader; import bdv.ij.export.imgloader.ImagePlusImgLoader.MinMaxOption; import bdv.ij.util.PluginHelper; @@ -82,7 +78,10 @@ public class ExportImagePlusPlugIn implements Command public static void main( final String[] args ) { new ImageJ(); - IJ.run("Confocal Series (2.2MB)"); + //IJ.run("Confocal Series (2.2MB)"); + final ImagePlus imp = IJ.openImage( "/Users/tischer/Desktop/Desktop/labels-3d-test.tif" ); + imp.show(); + new ExportImagePlusPlugIn().run(); } @@ -243,14 +242,14 @@ public void afterEachPlane( final boolean usedLoopBack ) { final Partition partition = partitions.get( i ); final ProgressWriter p = new SubTaskProgressWriter( progressWriter, 0, 0.95 * i / partitions.size() ); - WriteSequenceToHdf5.writeHdf5PartitionFile( seq, perSetupExportMipmapInfo, params.deflate, partition, loopbackHeuristic, afterEachPlane, numCellCreatorThreads, p ); + WriteSequenceToHdf5.writeHdf5PartitionFile( seq, perSetupExportMipmapInfo, params.downsamplingMethod, params.deflate, partition, loopbackHeuristic, afterEachPlane, numCellCreatorThreads, p ); } WriteSequenceToHdf5.writeHdf5PartitionLinkFile( seq, perSetupExportMipmapInfo, partitions, params.hdf5File ); } else { partitions = null; - WriteSequenceToHdf5.writeHdf5File( seq, perSetupExportMipmapInfo, params.deflate, params.hdf5File, loopbackHeuristic, afterEachPlane, numCellCreatorThreads, new SubTaskProgressWriter( progressWriter, 0, 0.95 ) ); + WriteSequenceToHdf5.writeHdf5File( seq, perSetupExportMipmapInfo, params.downsamplingMethod, params.deflate, params.hdf5File, loopbackHeuristic, afterEachPlane, numCellCreatorThreads, new SubTaskProgressWriter( progressWriter, 0, 0.95 ) ); } // write xml sequence description @@ -285,6 +284,8 @@ protected static class Parameters final int[][] subdivisions; + final DownsampleBlock.DownsamplingMethod downsamplingMethod; + final File seqFile; final File hdf5File; @@ -305,13 +306,14 @@ protected static class Parameters public Parameters( final boolean setMipmapManual, final int[][] resolutions, final int[][] subdivisions, - final File seqFile, final File hdf5File, + DownsampleBlock.DownsamplingMethod downsamplingMethod, final File seqFile, final File hdf5File, final MinMaxOption minMaxOption, final double rangeMin, final double rangeMax, final boolean deflate, final boolean split, final int timepointsPerPartition, final int setupsPerPartition ) { this.setMipmapManual = setMipmapManual; this.resolutions = resolutions; this.subdivisions = subdivisions; + this.downsamplingMethod = downsamplingMethod; this.seqFile = seqFile; this.hdf5File = hdf5File; this.minMaxOption = minMaxOption; @@ -330,6 +332,8 @@ public Parameters( static String lastChunkSizes = "{32,32,4}, {16,16,8}, {8,8,8}"; + static DownsampleBlock.DownsamplingMethod lastDownsamplingMethod = DownsampleBlock.DownsamplingMethod.Average; + static int lastMinMaxChoice = 2; static double lastMin = 0; @@ -364,6 +368,7 @@ protected Parameters getParameters( final double impMin, final double impMax, fi final TextField tfSubsampling = ( TextField ) gd.getStringFields().lastElement(); gd.addStringField( "Hdf5_chunk_sizes", lastChunkSizes, 25 ); final TextField tfChunkSizes = ( TextField ) gd.getStringFields().lastElement(); + gd.addChoice( "Subsampling_method", new String[]{ DownsampleBlock.DownsamplingMethod.Average.toString(), DownsampleBlock.DownsamplingMethod.Mode.toString(), DownsampleBlock.DownsamplingMethod.Centre.toString() }, lastDownsamplingMethod.toString() ); gd.addMessage( "" ); final String[] minMaxChoices = new String[] { "Use ImageJ's current min/max setting", "Compute min/max of the (hyper-)stack", "Use values specified below" }; @@ -402,6 +407,7 @@ public boolean dialogItemChanged( final GenericDialog dialog, final AWTEvent e ) gd.getNextBoolean(); gd.getNextString(); gd.getNextString(); + gd.getNextChoice(); gd.getNextChoiceIndex(); gd.getNextNumber(); gd.getNextNumber(); @@ -459,6 +465,7 @@ else if ( e instanceof ItemEvent && e.getID() == ItemEvent.ITEM_STATE_CHANGED && lastSetMipmapManual = gd.getNextBoolean(); lastSubsampling = gd.getNextString(); lastChunkSizes = gd.getNextString(); + lastDownsamplingMethod = DownsampleBlock.DownsamplingMethod.valueOf( gd.getNextChoice() ); lastMinMaxChoice = gd.getNextChoiceIndex(); lastMin = gd.getNextNumber(); lastMax = gd.getNextNumber(); @@ -508,6 +515,6 @@ else if ( lastMinMaxChoice == 1 ) final String hdf5Filename = seqFilename.substring( 0, seqFilename.length() - 4 ) + ".h5"; final File hdf5File = new File( hdf5Filename ); - return new Parameters( lastSetMipmapManual, resolutions, subdivisions, seqFile, hdf5File, minMaxOption, lastMin, lastMax, lastDeflate, lastSplit, lastTimepointsPerPartition, lastSetupsPerPartition ); } + return new Parameters( lastSetMipmapManual, resolutions, subdivisions, lastDownsamplingMethod, seqFile, hdf5File, minMaxOption, lastMin, lastMax, lastDeflate, lastSplit, lastTimepointsPerPartition, lastSetupsPerPartition ); } } } diff --git a/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java b/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java index cc6ccd2..26811d6 100644 --- a/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java +++ b/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java @@ -38,6 +38,7 @@ import java.util.List; import java.util.Map; +import bdv.export.*; import net.imglib2.Dimensions; import net.imglib2.FinalDimensions; import net.imglib2.realtransform.AffineTransform3D; @@ -47,11 +48,6 @@ import org.scijava.command.Command; import org.scijava.plugin.Plugin; -import bdv.export.ExportMipmapInfo; -import bdv.export.ProgressWriter; -import bdv.export.ProposeMipmaps; -import bdv.export.SubTaskProgressWriter; -import bdv.export.WriteSequenceToHdf5; import bdv.ij.export.FusionResult; import bdv.ij.export.SpimRegistrationSequence; import bdv.ij.export.ViewSetupWrapper; @@ -314,7 +310,7 @@ public static void appendToExistingFile( final Parameters params ) throws SpimDa { final SubTaskProgressWriter subtaskProgress = new SubTaskProgressWriter( progress, complete, complete + completionStep ); final int numCellCreatorThreads = Math.max( 1, PluginHelper.numThreads() - 1 ); - WriteSequenceToHdf5.writeHdf5PartitionFile( fusionSeq, perSetupExportMipmapInfo, params.deflate, partition, null, null, numCellCreatorThreads, subtaskProgress ); + WriteSequenceToHdf5.writeHdf5PartitionFile( fusionSeq, perSetupExportMipmapInfo, DownsampleBlock.DownsamplingMethod.Average, params.deflate, partition, null, null, numCellCreatorThreads, subtaskProgress ); complete += completionStep; } @@ -367,13 +363,13 @@ public static void saveAsNewFile( final Parameters params ) throws SpimDataExcep { final Partition partition = partitions.get( i ); final ProgressWriter p = new SubTaskProgressWriter( progress, 0, 0.95 * i / partitions.size() ); - WriteSequenceToHdf5.writeHdf5PartitionFile( desc, perSetupExportMipmapInfo, params.deflate, partition, null, null, numCellCreatorThreads, p ); + WriteSequenceToHdf5.writeHdf5PartitionFile( desc, perSetupExportMipmapInfo, DownsampleBlock.DownsamplingMethod.Average, params.deflate, partition, null, null, numCellCreatorThreads, p ); } WriteSequenceToHdf5.writeHdf5PartitionLinkFile( desc, perSetupExportMipmapInfo, partitions, params.hdf5File ); } else { - WriteSequenceToHdf5.writeHdf5File( desc, perSetupExportMipmapInfo, params.deflate, params.hdf5File, null, null, numCellCreatorThreads, new SubTaskProgressWriter( progress, 0, 0.95 ) ); + WriteSequenceToHdf5.writeHdf5File( desc, perSetupExportMipmapInfo, DownsampleBlock.DownsamplingMethod.Average, params.deflate, params.hdf5File, null, null, numCellCreatorThreads, new SubTaskProgressWriter( progress, 0, 0.95 ) ); } // write xml file diff --git a/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java b/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java index 43f6518..f78d7e2 100644 --- a/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java +++ b/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java @@ -36,14 +36,10 @@ import java.util.List; import java.util.Map; +import bdv.export.*; import org.scijava.command.Command; import org.scijava.plugin.Plugin; -import bdv.export.ExportMipmapInfo; -import bdv.export.ProgressWriter; -import bdv.export.ProposeMipmaps; -import bdv.export.SubTaskProgressWriter; -import bdv.export.WriteSequenceToHdf5; import bdv.ij.export.SpimRegistrationSequence; import bdv.ij.util.PluginHelper; import bdv.ij.util.ProgressWriterIJ; @@ -115,14 +111,14 @@ public void run() { final Partition partition = partitions.get( i ); final ProgressWriter p = new SubTaskProgressWriter( progress, 0, 0.95 * i / partitions.size() ); - WriteSequenceToHdf5.writeHdf5PartitionFile( desc, perSetupExportMipmapInfo, params.deflate, partition, null, null, numCellCreatorThreads, p ); + WriteSequenceToHdf5.writeHdf5PartitionFile( desc, perSetupExportMipmapInfo, DownsampleBlock.DownsamplingMethod.Average, params.deflate, partition, null, null, numCellCreatorThreads, p ); } WriteSequenceToHdf5.writeHdf5PartitionLinkFile( desc, perSetupExportMipmapInfo, partitions, params.hdf5File ); } else { partitions = null; - WriteSequenceToHdf5.writeHdf5File( desc, perSetupExportMipmapInfo, params.deflate, params.hdf5File, null, null, numCellCreatorThreads, new SubTaskProgressWriter( progress, 0, 0.95 ) ); + WriteSequenceToHdf5.writeHdf5File( desc, perSetupExportMipmapInfo, DownsampleBlock.DownsamplingMethod.Average, params.deflate, params.hdf5File, null, null, numCellCreatorThreads, new SubTaskProgressWriter( progress, 0, 0.95 ) ); } final Hdf5ImageLoader loader = new Hdf5ImageLoader( params.hdf5File, partitions, null, false ); diff --git a/src/main/java/bdv/ij/export/Scripting.java b/src/main/java/bdv/ij/export/Scripting.java index c2b1633..3fb5286 100644 --- a/src/main/java/bdv/ij/export/Scripting.java +++ b/src/main/java/bdv/ij/export/Scripting.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; +import bdv.export.DownsampleBlock; import bdv.export.ExportMipmapInfo; import bdv.export.WriteSequenceToHdf5; import bdv.ij.util.PluginHelper; @@ -233,7 +234,7 @@ public void writePartition( final int index ) if ( index >= 0 && index < partitions.size() ) { final int numCellCreatorThreads = Math.max( 1, PluginHelper.numThreads() - 1 ); - WriteSequenceToHdf5.writeHdf5PartitionFile( spimData.getSequenceDescription(), perSetupMipmapInfo, deflate, partitions.get( index ), null, null, numCellCreatorThreads, null ); + WriteSequenceToHdf5.writeHdf5PartitionFile( spimData.getSequenceDescription(), perSetupMipmapInfo, DownsampleBlock.DownsamplingMethod.Average, deflate, partitions.get( index ), null, null, numCellCreatorThreads, null ); } } diff --git a/src/main/java/bdv/ij/export/tiles/CellVoyagerDataExporter.java b/src/main/java/bdv/ij/export/tiles/CellVoyagerDataExporter.java index 15a8d77..6f72f05 100644 --- a/src/main/java/bdv/ij/export/tiles/CellVoyagerDataExporter.java +++ b/src/main/java/bdv/ij/export/tiles/CellVoyagerDataExporter.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.List; +import bdv.export.DownsampleBlock; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; @@ -336,7 +337,7 @@ public void export( final File seqFile, final File hdf5File, final int[][] resol */ final int numCellCreatorThreads = Math.max( 1, PluginHelper.numThreads() - 1 ); - WriteSequenceToHdf5.writeHdf5File( sequenceDescriptionHDF5, resolutions, chunks, true, hdf5File, null, null, numCellCreatorThreads, progressWriter ); + WriteSequenceToHdf5.writeHdf5File( sequenceDescriptionHDF5, resolutions, chunks, DownsampleBlock.DownsamplingMethod.Average, true, hdf5File, null, null, numCellCreatorThreads, progressWriter ); /* * write XML sequence description