Search in sources :

Example 1 with N5CosemMetadata

use of org.janelia.saalfeldlab.n5.metadata.N5CosemMetadata in project bigwarp by saalfeldlab.

the class ApplyBigwarpPlugin method runN5Export.

public static <S, T extends NativeType<T> & NumericType<T>> void runN5Export(final BigWarpData<S> data, final List<SourceAndConverter<S>> sources, final String fieldOfViewOption, final Interval outputInterval, final Interpolation interp, final double[] offset, final double[] resolution, final String unit, final ProgressWriter progressWriter, final WriteDestinationOptions writeOpts, final ExecutorService exec) {
    final int nd = BigWarp.detectNumDims(data.sources);
    // setup n5 parameters
    final String dataset = writeOpts.n5Dataset;
    final int[] blockSize = writeOpts.blockSize;
    final Compression compression = writeOpts.compression;
    if (dataset == null || dataset.isEmpty()) {
        return;
    }
    N5Writer n5;
    try {
        n5 = new N5Factory().openWriter(writeOpts.pathOrN5Root);
    } catch (IOException e1) {
        e1.printStackTrace();
        return;
    }
    // build metadata
    final String[] axes = nd == 2 ? new String[] { "y", "x" } : new String[] { "z", "y", "x" };
    final String[] units = nd == 2 ? new String[] { unit, unit } : new String[] { unit, unit, unit };
    final N5CosemMetadata metadata = new N5CosemMetadata("", new N5CosemMetadata.CosemTransform(axes, resolution, offset, units), null);
    N5CosemMetadataParser parser = new N5CosemMetadataParser();
    // setup physical to pixel transform
    final AffineTransform3D resolutionTransform = new AffineTransform3D();
    resolutionTransform.set(resolution[0], 0, 0);
    resolutionTransform.set(resolution[1], 1, 1);
    if (resolution.length > 2)
        resolutionTransform.set(resolution[2], 2, 2);
    final AffineTransform3D offsetTransform = new AffineTransform3D();
    offsetTransform.set(offset[0], 0, 3);
    offsetTransform.set(offset[1], 1, 3);
    if (resolution.length > 2)
        offsetTransform.set(offset[2], 2, 3);
    final AffineTransform3D pixelRenderToPhysical = new AffineTransform3D();
    pixelRenderToPhysical.concatenate(resolutionTransform);
    pixelRenderToPhysical.concatenate(offsetTransform);
    // render and write
    final int N = data.movingSourceIndices.length;
    for (int i = 0; i < N; i++) {
        final int movingSourceIndex = data.movingSourceIndices[i];
        @SuppressWarnings("unchecked") final RealRandomAccessible<T> raiRaw = (RealRandomAccessible<T>) sources.get(movingSourceIndex).getSpimSource().getInterpolatedSource(0, 0, interp);
        // to pixel space
        final AffineRandomAccessible<T, AffineGet> rai = RealViews.affine(raiRaw, pixelRenderToPhysical.inverse());
        final IntervalView<T> img = Views.interval(Views.raster(rai), Intervals.zeroMin(outputInterval));
        final String srcName = data.sources.get(data.movingSourceIndices[i]).getSpimSource().getName();
        String destDataset = dataset;
        if (N > 1)
            destDataset = dataset + String.format("/%s", srcName.replace(" ", "_"));
        RandomAccessibleInterval<T> imgToWrite;
        if (nd == 2)
            imgToWrite = Views.hyperSlice(img, 2, 0);
        else
            imgToWrite = img;
        try {
            N5Utils.save(imgToWrite, n5, destDataset, blockSize, compression, exec);
            if (parser != null && metadata != null)
                parser.writeMetadata(metadata, n5, destDataset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        progressWriter.setProgress((i + 1) / ((double) N));
    }
    progressWriter.setProgress(1.0);
}
Also used : N5CosemMetadata(org.janelia.saalfeldlab.n5.metadata.N5CosemMetadata) Compression(org.janelia.saalfeldlab.n5.Compression) RawCompression(org.janelia.saalfeldlab.n5.RawCompression) GzipCompression(org.janelia.saalfeldlab.n5.GzipCompression) Lz4Compression(org.janelia.saalfeldlab.n5.Lz4Compression) BloscCompression(org.janelia.saalfeldlab.n5.blosc.BloscCompression) XzCompression(org.janelia.saalfeldlab.n5.XzCompression) N5Writer(org.janelia.saalfeldlab.n5.N5Writer) AffineGet(net.imglib2.realtransform.AffineGet) IOException(java.io.IOException) N5CosemMetadataParser(org.janelia.saalfeldlab.n5.metadata.N5CosemMetadataParser) IOException(java.io.IOException) RealRandomAccessible(net.imglib2.RealRandomAccessible) N5Factory(org.janelia.saalfeldlab.n5.ij.N5Factory) AffineTransform3D(net.imglib2.realtransform.AffineTransform3D)

Aggregations

IOException (java.io.IOException)1 RealRandomAccessible (net.imglib2.RealRandomAccessible)1 AffineGet (net.imglib2.realtransform.AffineGet)1 AffineTransform3D (net.imglib2.realtransform.AffineTransform3D)1 Compression (org.janelia.saalfeldlab.n5.Compression)1 GzipCompression (org.janelia.saalfeldlab.n5.GzipCompression)1 Lz4Compression (org.janelia.saalfeldlab.n5.Lz4Compression)1 N5Writer (org.janelia.saalfeldlab.n5.N5Writer)1 RawCompression (org.janelia.saalfeldlab.n5.RawCompression)1 XzCompression (org.janelia.saalfeldlab.n5.XzCompression)1 BloscCompression (org.janelia.saalfeldlab.n5.blosc.BloscCompression)1 N5Factory (org.janelia.saalfeldlab.n5.ij.N5Factory)1 N5CosemMetadata (org.janelia.saalfeldlab.n5.metadata.N5CosemMetadata)1 N5CosemMetadataParser (org.janelia.saalfeldlab.n5.metadata.N5CosemMetadataParser)1