Example #1
0
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;
Example #2
0
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;
Example #3
0
    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):