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:
Guillaume Raffy 2019-03-29 11:07:31 +01:00
parent 87923e96d9
commit 7d116b4dca
1 changed files with 134 additions and 0 deletions

134
lipase.py Normal file
View File

@ -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()