def transform(source, sink = [], transform_parameter_file = None, transform_directory = None, result_directory = None): """Transform a raw data set to reference using the elastix alignment results. Arguments --------- source : str or array Image source to be transformed. sink : str, [] or None Image sink to save transformed image to. If [] return the default name of the data file generated by transformix. transform_parameter_file : str or None Parameter file for the primary transformation. If None, the file is determined from the transform_directory. transform_directory : str or None Result directory of elastix alignment. If None the transform_parameter_file has to be given. result_directory : str or None The directorty for the transformix results. Returns ------- transformed : array or st Array or file name of the transformed data. Note ---- If the map determined by elastix is :math:`T: \\mathrm{fixed} \\rightarrow \\mathrm{moving}`, transformix on data works as :math:`T^{-1}(\\mathrm{data})`. """ check_elastix_initialized(); # image source = io.as_source(source); if isinstance(source, io.tif.Source): imgname = source.location; delete_image = None; else: imgname = os.path.join(tempfile.gettempdir(), 'elastix_input.tif'); io.write(source, imgname); delete_image = imgname; # result directory delete_result_directory = None; if result_directory == None: resultdirname = os.path.join(tempfile.gettempdir(), 'elastix_output'); delete_result_directory = resultdirname; else: resultdirname = result_directory; if not os.path.exists(resultdirname): os.makedirs(resultdirname); # tranformation parameter transform_parameter_dir, transform_parameter_file = transform_directory_and_file(transform_parameter_file = transform_parameter_file, transform_directory = transform_directory); set_path_transform_files(transform_parameter_dir); #transformix -in inputImage.ext -out outputDirectory -tp TransformParameters.txx cmd = '%s -in %s -out %s -tp %s' % (transformix_binary, imgname, resultdirname, transform_parameter_file); res = os.system(cmd); if res != 0: raise RuntimeError('transform_data: failed executing: ' + cmd); # read data and clean up if delete_image is not None: os.remove(delete_image); if sink == []: return result_data_file(resultdirname); elif sink is None: resultfile = result_data_file(resultdirname); result = io.read(resultfile); elif isinstance(sink, str): resultfile = result_data_file(resultdirname); result = io.convert(resultfile, sink); else: raise RuntimeError('transform_data: sink not valid!'); if delete_result_directory is not None: shutil.rmtree(delete_result_directory); return result;
def deformation_field(sink = [], transform_parameter_file = None, transform_directory = None, result_directory = None): """Create the deformation field T(x) - x. Arguments --------- sink : str, [] or None Image sink to save the transformation field; if [] return the default name of the data file generated by transformix. transform_parameter_file : str or None Parameter file for the primary transformation, if None, the file is determined from the transform_directory. transform_directory : str or None Result directory of elastix alignment, if None the transform_parameter_file has to be given. result_directory : str or None The directorty for the transformix results. Returns ------- deformation_field : array or str Array or file name of the deformation field data. Note ---- The map determined by elastix is :math:`T \\mathrm{fixed} \\rightarrow \\mathrm{moving}`. """ check_elastix_initialized(); # result directory delete_result_directory = None; if result_directory == None: resultdirname = os.path.join(tempfile.gettempdir(), 'elastix_output'); delete_result_directory = resultdirname; else: resultdirname = result_directory; if not os.path.exists(resultdirname): os.makedirs(resultdirname); # setup transformation transform_parameter_dir, transform_parameter_file = transform_directory_and_file(transform_parameter_file = transform_parameter_file, transform_directory = transform_directory); set_path_transform_files(transform_parameter_dir); #transformix -in inputImage.ext -out outputDirectory -tp TransformParameters.txt cmd = '%s -def all -out %s -tp %s' % (transformix_binary, resultdirname, transform_parameter_file) res = os.system(cmd); if res != 0: raise RuntimeError('deformation_field: failed executing: ' + cmd); # read result and clean up if sink == []: return result_data_file(resultdirname); elif sink is None: resultfile = result_data_file(resultdirname); result = io.read(resultfile); elif isinstance(sink, str): resultfile = result_data_file(resultdirname); result = io.convert(resultfile, sink); else: raise RuntimeError('deformation_field: sink not valid!'); if delete_result_directory is not None: shutil.rmtree(delete_result_directory); return result;
ws.update(raw=expression_raw) #ws.debug = 'medchunk' print(ws.info()) # convert raw to stitched npy file source = ws.source('raw') sink = ws.filename('stitched') if not os.path.exists(os.path.join(directory, "final_blocks")): os.mkdir(os.path.join(directory, "final_blocks")) if step == 0: print("++++++++++ STEP 0 +++++++++++++") # convert single z planes to stitched io.delete_file(sink) io.convert(source, sink, processes=None, verbose=True) elif step == 1: # Split into blocks print("splitting into blocks") blocks = bp.split_into_blocks( ws.source('stitched'), processes=12, axes=[2], # chunks along z size_min=5, size_max=20, overlap=2, verbose=True) print("Done splitting into blocks of len {} for array {}".format( len(blocks), arrayid)) if arrayid <= len(blocks):