import sys, os sys.path.append("/groups/cardona/home/cardonaa/lab/scripts/python/imagej/IsoView-GCaMP/") from lib.io import writeN5 from net.imglib2.img.display.imagej import ImageJVirtualStack from net.imglib2.view import Views from ij import IJ # Grab the 4D RandomAccessibleInterval from the open VirtualStack f = ImageJVirtualStack.getDeclaredField("source") f.setAccessible(True) img4D = Views.dropSingletonDimensions(f.get(IJ.getImage().getStack())) print img4D writeN5(img4D, "/groups/cardona/cardonalab/Albert/2017-05-10_2_1019/", "2017-05-10_2_1019_0-399_409x509x305x800", [409, 509, 5, 1])
""" # Third approach: pull (CORRECT!), and much faster (delegates pixel-wise operations # to java libraries) # Defines a list of views (recipes, really) for transforming every stack slice # and then materializes the view by copying it in a multi-threaded way into an ArrayImg. from net.imglib2 import FinalInterval from net.imglib2.converter import Converters, ColorChannelOrder from net.imglib2.view import Views from net.imglib2.img.display.imagej import ImageJFunctions as IL from net.imglib2.realtransform import RealViews, AffineTransform2D from net.imglib2.img.array import ArrayImgs from net.imglib2.util import Intervals, ImgUtil from net.imglib2.interpolation.randomaccess import NLinearInterpolatorFactory img1 = Views.dropSingletonDimensions(IL.wrap(imp)) transform = AffineTransform2D() transform.set(scale, 0, 0, 0, scale, 0) # Origins and dimensions (hence, interval) of the target image interval2 = FinalInterval([ int(img1.dimension(0) * scale), int(img1.dimension(1) * scale), img1.dimension(2) ]) # Interval of a single stack slice of the target image sliceInterval = FinalInterval([interval2.dimension(0), interval2.dimension(1)]) slices2 = [] for index in xrange(img1.dimension(2)): # One single 2D RGB slice
from net.imglib2.img.display.imagej import ImageJFunctions as IL from net.imglib2.roi.geom.real import ClosedWritableSphere from net.imglib2.roi import Masks, Regions from itertools import imap, islice, izip from jarray import zeros, array baseDir = "/groups/zlatic/zlaticlab/Nadine/Raghav/analysis/2017-05-10/GCaMP6s_2_20170510_143413.corrected/" srcDir = baseDir + "deconvolved/" n5dir = "/groups/cardona/cardonalab/Albert/2017-05-10_2_1019/" dataset_name = "2017-05-10_2_1019_0-399_409x509x305x800" # Load entire 4D IsoView deconvolved and registered data set img4D = readN5(n5dir, dataset_name) # Remove the channel dimension which has size of 1 img4D = Views.dropSingletonDimensions(img4D) print img4D # A mask: only nuclei whose x,y,z coordinate has a non-zero value in the mask will be considered mask = None # Split CM00+CM01 (odd) from CM02+CM03 (even) into two series series = ["CM00-CM01", "CM02-CM03"] img4Da = Views.subsample(img4D, [1, 1, 1, 2]) # step img4Db = Views.subsample( Views.interval(img4D, [0, 0, 0, 1], Intervals.maxAsLongArray(img4D)), [1, 1, 1, 2]) # step showStack(img4Da, title="%s registered+deconvolved" % series[0]) showStack(img4Db, title="%s registered+deconvolved" % series[1])
# Now read the file back as a stack using lib.io.TIFFSlices slices = TIFFSlices(filepath, types={1: TIFFSlices.types[64][:2] + (BitType, )}) img2 = slices.asLazyCachedCellImg() IL.wrap(img, "bit img").show() # Now read the file back using ImageJ's library (ij.io.TiffDecoder and FileInfoVirtualStack # which uses ij.io.ImageReader to decode each slice's FileInfo data) fistack = FileInfoVirtualStack( TiffDecoder(*os.path.split(filepath)).getTiffInfo()) imp = ImagePlus("bit img IJ", fistack) imp.show() # Now compare both images pixel-wise, and also to the original img3 = Views.dropSingletonDimensions( IL.wrap(imp)) # remove bogus channel dimension tmp = ArrayImgs.bits(Intervals.dimensionsAsLongArray(img)) def comparePixelWise(img1, img2): t1 = getTypeFromInterval(img1) t2 = getTypeFromInterval(img2) return 0 == sum( imap(cmp, imap(getattr(t1.getClass(), "getInteger"), img1.cursor()), imap(getattr(t2.getClass(), "getInteger"), img2.cursor()))) print comparePixelWise(img, img2) # True print comparePixelWise( img, img3 ) # False: still issues with the boundaries that don't end at byte boundaries?