Guest User

Untitled

a guest
Dec 13th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. import bioformats.omexml as ome
  2. import javabridge as jv
  3. import bioformats
  4. import os
  5. import sys
  6. import numpy as np
  7.  
  8. # Write file to disk
  9. def writeOMETIFF(img_XYCZT, path, type='uint16', verbose=True):
  10.  
  11. if verbose:
  12. print('Dimensions XYCZT: ' + str(np.shape(img_XYCZT)))
  13. sys.stdout.flush()
  14.  
  15. # Get the new dimensions
  16. SizeX = np.shape(img_XYCZT)[0]
  17. SizeY = np.shape(img_XYCZT)[1]
  18. SizeC = np.shape(img_XYCZT)[2]
  19. SizeZ = np.shape(img_XYCZT)[3]
  20. SizeT = np.shape(img_XYCZT)[4]
  21.  
  22. # Start JVM for bioformats
  23. bfpackage = r'/usr/local/Cellar/bioformats/5.9.0/libexec/bioformats_package.jar'
  24. jars = jv.JARS + [bfpackage]
  25. jv.start_vm(class_path=jars, run_headless=True, max_heap_size='4G')
  26.  
  27. # Getting metadata info
  28. omexml = ome.OMEXML()
  29. omexml.image(0).Name = os.path.split(path)[1]
  30. p = omexml.image(0).Pixels
  31. assert isinstance(p, ome.OMEXML.Pixels)
  32. p.SizeX = SizeX
  33. p.SizeY = SizeY
  34. p.SizeC = SizeC
  35. p.SizeT = SizeT
  36. p.SizeZ = SizeZ
  37. p.DimensionOrder = ome.DO_XYCZT
  38. p.PixelType = type
  39. p.channel_count = SizeC
  40. p.plane_count = SizeZ
  41. p.Channel(0).SamplesPerPixel = SizeC
  42. omexml.structured_annotations.add_original_metadata(ome.OM_SAMPLES_PER_PIXEL, str(SizeC))
  43.  
  44. # Converting to omexml
  45. xml = omexml.to_xml()
  46.  
  47. # Write file using Bioformats
  48. for frame in range(SizeT):
  49.  
  50. index = frame
  51. pixel_buffer = bioformats.formatwriter.convert_pixels_to_buffer(img_XYCZT[:, :, :, :, frame], type)
  52. script = """
  53. importClass(Packages.loci.formats.services.OMEXMLService,
  54. Packages.loci.common.services.ServiceFactory,
  55. Packages.loci.formats.out.TiffWriter);
  56.  
  57. var service = new ServiceFactory().getInstance(OMEXMLService);
  58. var metadata = service.createOMEXMLMetadata(xml);
  59. var writer = new TiffWriter();
  60. writer.setBigTiff(true);
  61. writer.setMetadataRetrieve(metadata);
  62. writer.setId(path);
  63. writer.setInterleaved(true);
  64. writer.saveBytes(index, buffer);
  65. writer.close();
  66. """
  67. jv.run_script(script, dict(path=path, xml=xml, index=index, buffer=pixel_buffer))
  68.  
  69. ##################################################################################################################
  70.  
  71. # Dimension TZCXY
  72. SizeT = 30
  73. SizeZ = 23
  74. SizeC = 2
  75. SizeX = 217
  76. SizeY = 94
  77.  
  78. output_file = r'stackome.tiff'
  79. img5d = np.random.randn(SizeX, SizeY, SizeC, SizeZ, SizeT).astype(np.uint16)
  80. writeOMETIFF(img5d, output_file, type='uint16', verbose=True)
Add Comment
Please, Sign In to add comment