started the development of imagej scripts to process the images captures on soleil platform
At this stage, the script is able to load and duisplay a sequence as an imageJ hyperstack
This commit is contained in:
parent
87923e96d9
commit
7d116b4dca
|
@ -0,0 +1,134 @@
|
|||
# String(label="Please enter your name",description="Name field") name
|
||||
# OUTPUT String greeting
|
||||
|
||||
# A Jython script with parameters.
|
||||
# It is the duty of the scripting framework to harvest
|
||||
# the 'name' parameter from the user, and then display
|
||||
# the 'greeting' output parameter, based on its type.
|
||||
from ij import IJ
|
||||
|
||||
# greeting = "Hello, " + name + "!"
|
||||
|
||||
|
||||
# image prefix :
|
||||
# AF
|
||||
# blé : coupes de blé
|
||||
# CA : coupe d'amande
|
||||
# FE : feuille d'épinard
|
||||
# GGH : globule gras humain
|
||||
# CRF chloroplastes de feuille d'épinard
|
||||
# OL : oléosome
|
||||
# DARK : dark
|
||||
# white :
|
||||
#
|
||||
# - cin1 : cinétique 1
|
||||
# phiG_40x_1 : cinétique avant et après injection enzyme gastrique
|
||||
# phiG_40x_Zstack20um_1 : stack
|
||||
# 0mn : on commence à enregistrer et on attend 10mn (pour le bleaching) -> phiG_40x_1
|
||||
# 10mn : debut injection phase gastrique (poussée)
|
||||
# 13mn : la phase gastrique (le petit tuyau contient 20ul) arrive dans la cellule d'un coup (1 nanol)
|
||||
# 15mn : on arrête l'injection
|
||||
# 50mn : on fait un stack -> phiG_40x_Zstack20um_1
|
||||
# 51mn : début d'injection phase intestinale (poussée) -> phiG_I_40x_1
|
||||
# x mn : on arrête l'injection
|
||||
# 90mn : on fait un stack -> phiG_I_40x_Zstack20um_1
|
||||
# - cin2 : autre échantillon similaire à cin1
|
||||
# - cond[5678] : condition non réalistes
|
||||
import json
|
||||
|
||||
class Sequence(object):
|
||||
def __init__(self, catalog, sequence_id, micro_manager_metadata_file_path):
|
||||
self.catalog = catalog
|
||||
self.sequence_id = sequence_id
|
||||
self.micro_manager_metadata_file_path = micro_manager_metadata_file_path
|
||||
print(micro_manager_metadata_file_path)
|
||||
|
||||
with open(micro_manager_metadata_file_path, "r") as mmm_file:
|
||||
self.mmm = json.load(mmm_file, encoding='latin-1') # note : the micromanager metadata files are encoded in latin-1, not utf8 (see accents in comments)
|
||||
@property
|
||||
def num_frames(self):
|
||||
summary = self.mmm['Summary']
|
||||
return int(summary['Frames'])
|
||||
|
||||
@property
|
||||
def width(self):
|
||||
summary = self.mmm['Summary']
|
||||
return int(summary['Width'])
|
||||
|
||||
@property
|
||||
def height(self):
|
||||
summary = self.mmm['Summary']
|
||||
return int(summary['Height'])
|
||||
|
||||
@property
|
||||
def num_channels(self):
|
||||
summary = self.mmm['Summary']
|
||||
return int(summary['Channels'])
|
||||
|
||||
@property
|
||||
def num_slices(self):
|
||||
summary = self.mmm['Summary']
|
||||
return int(summary['Slices'])
|
||||
|
||||
@property
|
||||
def num_bits_per_pixels(self):
|
||||
summary = self.mmm['Summary']
|
||||
return int(summary['BitDepth'])
|
||||
|
||||
def get_root_path(self):
|
||||
return '/'.join(self.micro_manager_metadata_file_path.split('/')[:-1])
|
||||
|
||||
def get_image_file_path(self, channel_id, frame_index, z_index=0):
|
||||
assert frame_index < self.num_frames
|
||||
summary = self.mmm['Summary']
|
||||
channel_index = summary['ChNames'].index(channel_id)
|
||||
frame_info = self.mmm['FrameKey-%d-%d-%d' % (frame_index, channel_index, z_index) ]
|
||||
rel_file_path = frame_info['FileName']
|
||||
return self.get_root_path() + '/' + rel_file_path
|
||||
|
||||
def open_in_imagej(self):
|
||||
#ip = IJ.createHyperStack(title=self.sequence_id, width=self.width, height= self.height, channels=1, slices=1, frames=self.get_num_frames(), bitdepth=16)
|
||||
hyperstack = IJ.createHyperStack(self.sequence_id, self.width, self.height, self.num_channels, self.num_slices, self.num_frames, self.num_bits_per_pixels)
|
||||
for channel_index in range(1): #self.num_channels):
|
||||
for frame_index in range(self.num_frames):
|
||||
slice_index = 0
|
||||
src_image_file_path = self.get_image_file_path(channel_id='DM300_327-353_fluo', frame_index=frame_index)
|
||||
src_image = IJ.openImage(src_image_file_path)
|
||||
|
||||
hyperstack.setPosition(channel_index+1, slice_index+1, frame_index+1)
|
||||
hyperstack.setProcessor(src_image.getProcessor())
|
||||
hyperstack.show()
|
||||
|
||||
class ImageCatalog(object):
|
||||
def __init__(self, raw_images_root):
|
||||
self.raw_images_root = raw_images_root
|
||||
self.sequences = { }
|
||||
sequence_id = 'GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0'
|
||||
micro_manager_metadata_file_path = raw_images_root + '/' + sequence_id + '/metadata.txt'
|
||||
#micro_manager_metadata_file_path = '/tmp/toto.json'
|
||||
self.sequences[ sequence_id ] = Sequence(self, sequence_id, micro_manager_metadata_file_path)
|
||||
|
||||
def __str__(self):
|
||||
for sequence_id, sequence in self.sequences.iteritems():
|
||||
return str(sequence_id) + ':' + str(sequence)
|
||||
# self.add_micromanager_metadata(raw_images_root + '/GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0/metadata.txt')
|
||||
|
||||
#def add_micromanager_metadata(self, micro_manager_metadata_file_path):
|
||||
# self.sequences[ micro_manager_metadata_file_path ] = Sequence(self, micro_manager_metadata_file_path)
|
||||
|
||||
def run_script():
|
||||
raw_images_root = '/Users/graffy/ownCloud/ipr/lipase/soleil-2018.test'
|
||||
catalog = ImageCatalog(raw_images_root)
|
||||
print(catalog)
|
||||
catalog.sequences['GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0'].open_in_imagej()
|
||||
|
||||
#src_image_file_path = catalog.sequences['GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0'].get_image_file_path(channel_id='DM300_327-353_fluo', frame_index=3)
|
||||
#src_image = IJ.openImage(src_image_file_path)
|
||||
#dark_image = IJ.openImage(raw_images_root + '/GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0/img_000000000_DM300_327-353_fluo_000.tif')
|
||||
#src_image.show()
|
||||
#assert src_image
|
||||
|
||||
# If a Jython script is run, the variable __name__ contains the string '__main__'.
|
||||
# If a script is loaded as module, __name__ has a different value.
|
||||
if __name__ in ['__builtin__','__main__']:
|
||||
run_script()
|
Loading…
Reference in New Issue