def deformationField(sink=[], transformParameterFile=None, transformDirectory=None, resultDirectory=None): """Create the deformation field T(x) - x The map determined by elastix is :math:`T \\mathrm{fixed} \\rightarrow \\mathrm{moving}` Arguments: sink (str, [] or None): image sink to save the transformation field; if [] return the default name of the data file generated by transformix. transformParameterFile (str or None): parameter file for the primary transformation, if None, the file is determined from the transformDirectory. transformDirectory (str or None): result directory of elastix alignment, if None the transformParameterFile has to be given. resultDirectory (str or None): the directorty for the transformix results Returns: array or str: array or file name of the transformed data """ global TransformixBinary if resultDirectory == None: resultdirname = os.path.join(tempfile.gettempdir(), 'elastix_output') else: resultdirname = resultDirectory if not os.path.exists(resultdirname): os.makedirs(resultdirname) if transformParameterFile == None: if transformDirectory == None: raise RuntimeError( 'neither alignment directory and transformation parameter file specified!' ) transformparameterdir = transformDirectory transformParameterFile = getTransformParameterFile( transformparameterdir) else: transformparameterdir = os.path.split(transformParameterFile) transformparameterdir = transformparameterdir[0] #transform #make path in parameterfiles absolute setPathTransformParameterFiles(transformparameterdir) #transformix -in inputImage.ext -out outputDirectory -tp TransformParameters.txt cmd = TransformixBinary + ' -threads 8 -def all -out ' + resultdirname + ' -tp ' + transformParameterFile res = os.system(cmd) if res != 0: raise RuntimeError('deformationField: failed executing: ' + cmd) if sink == []: return getResultDataFile(resultdirname) elif sink is None: resultfile = getResultDataFile(resultdirname) data = io.readData(resultfile) if resultDirectory is None: shutil.rmtree(resultdirname) return data elif isinstance(sink, basestring): resultfile = getResultDataFile(resultdirname) data = io.convertData(resultfile, sink) if resultDirectory is None: shutil.rmtree(resultdirname) return data else: raise RuntimeError('deformationField: sink not valid!')
def deformationField(sink = [], transformParameterFile = None, transformDirectory = None, resultDirectory = None): """Create the deformation field T(x) - x The map determined by elastix is :math:`T \\mathrm{fixed} \\rightarrow \\mathrm{moving}` Arguments: sink (str, [] or None): image sink to save the transformation field; if [] return the default name of the data file generated by transformix. transformParameterFile (str or None): parameter file for the primary transformation, if None, the file is determined from the transformDirectory. transformDirectory (str or None): result directory of elastix alignment, if None the transformParameterFile has to be given. resultDirectory (str or None): the directorty for the transformix results Returns: array or str: array or file name of the transformed data """ global TransformixBinary; if resultDirectory == None: resultdirname = os.path.join(tempfile.tempdir, 'elastix_output'); else: resultdirname = resultDirectory; if not os.path.exists(resultdirname): os.makedirs(resultdirname); if transformParameterFile == None: if transformDirectory == None: raise RuntimeError('neither alignment directory and transformation parameter file specified!'); transformparameterdir = transformDirectory transformParameterFile = getTransformParameterFile(transformparameterdir); else: transformparameterdir = os.path.split(transformParameterFile); transformparameterdir = transformparameterdir[0]; #transform #make path in parameterfiles absolute setPathTransformParameterFiles(transformparameterdir); #transformix -in inputImage.ext -out outputDirectory -tp TransformParameters.txt cmd = TransformixBinary + ' -def all -out ' + resultdirname + ' -tp ' + transformParameterFile; res = os.system(cmd); if res != 0: raise RuntimeError('deformationField: failed executing: ' + cmd); if sink == []: return getResultDataFile(resultdirname); elif sink is None: resultfile = getResultDataFile(resultdirname); data = io.readData(resultfile); if resultDirectory is None: shutil.rmtree(resultdirname); return data; elif isinstance(sink, basestring): resultfile = getResultDataFile(resultdirname); data = io.convertData(resultfile, sink); if resultDirectory is None: shutil.rmtree(resultdirname); return data; else: raise RuntimeError('deformationField: sink not valid!');
def transformData(source, sink=[], transformParameterFile=None, transformDirectory=None, resultDirectory=None): """Transform a raw data set to reference using the elastix alignment results If the map determined by elastix is :math:`T \\mathrm{fixed} \\rightarrow \\mathrm{moving}`, transformix on data works as :math:`T^{-1}(\\mathrm{data})`. 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. transformParameterFile (str or None): parameter file for the primary transformation, if None, the file is determined from the transformDirectory. transformDirectory (str or None): result directory of elastix alignment, if None the transformParameterFile has to be given. resultDirectory (str or None): the directorty for the transformix results Returns: array or str: array or file name of the transformed data """ global TransformixBinary if isinstance(source, numpy.ndarray): imgname = os.path.join(tempfile.gettempdir(), 'elastix_input.tif') io.writeData(source, imgname) elif isinstance(source, basestring): if io.dataFileNameToType(source) == "TIF": imgname = source else: imgname = os.path.join(tempfile.gettempdir(), 'elastix_input.tif') io.transformData(source, imgname) else: raise RuntimeError('transformData: source not a string or array') if resultDirectory == None: resultdirname = os.path.join(tempfile.gettempdir(), 'elastix_output') else: resultdirname = resultDirectory if not os.path.exists(resultdirname): os.makedirs(resultdirname) if transformParameterFile == None: if transformDirectory == None: raise RuntimeError( 'neither alignment directory and transformation parameter file specified!' ) transformparameterdir = transformDirectory transformParameterFile = getTransformParameterFile( transformparameterdir) else: transformparameterdir = os.path.split(transformParameterFile) transformparameterdir = transformparameterdir[0] #transform #make path in parameterfiles absolute setPathTransformParameterFiles(transformparameterdir) #transformix -in inputImage.ext -out outputDirectory -tp TransformParameters.txt cmd = TransformixBinary + ' -threads 8 -in ' + imgname + ' -out ' + resultdirname + ' -tp ' + transformParameterFile res = os.system(cmd) if res != 0: raise RuntimeError('transformData: failed executing: ' + cmd) if not isinstance(source, basestring): os.remove(imgname) if sink == []: return getResultDataFile(resultdirname) elif sink is None: resultfile = getResultDataFile(resultdirname) return io.readData(resultfile) elif isinstance(sink, basestring): resultfile = getResultDataFile(resultdirname) return io.convertData(resultfile, sink) else: raise RuntimeError('transformData: sink not valid!')
def transformData(source, sink = [], transformParameterFile = None, transformDirectory = None, resultDirectory = None): """Transform a raw data set to reference using the elastix alignment results If the map determined by elastix is :math:`T \\mathrm{fixed} \\rightarrow \\mathrm{moving}`, transformix on data works as :math:`T^{-1}(\\mathrm{data})`. 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. transformParameterFile (str or None): parameter file for the primary transformation, if None, the file is determined from the transformDirectory. transformDirectory (str or None): result directory of elastix alignment, if None the transformParameterFile has to be given. resultDirectory (str or None): the directorty for the transformix results Returns: array or str: array or file name of the transformed data """ global TransformixBinary; if isinstance(source, numpy.ndarray): imgname = os.path.join(tempfile.gettempdir(), 'elastix_input.tif'); io.writeData(source, imgname); elif isinstance(source, basestring): if io.dataFileNameToType(source) == "TIF": imgname = source; else: imgname = os.path.join(tempfile.gettempdir(), 'elastix_input.tif'); io.transformData(source, imgname); else: raise RuntimeError('transformData: source not a string or array'); if resultDirectory == None: resultdirname = os.path.join(tempfile.tempdir, 'elastix_output'); else: resultdirname = resultDirectory; if not os.path.exists(resultdirname): os.makedirs(resultdirname); if transformParameterFile == None: if transformDirectory == None: raise RuntimeError('neither alignment directory and transformation parameter file specified!'); transformparameterdir = transformDirectory transformParameterFile = getTransformParameterFile(transformparameterdir); else: transformparameterdir = os.path.split(transformParameterFile); transformparameterdir = transformparameterdir[0]; #transform #make path in parameterfiles absolute setPathTransformParameterFiles(transformparameterdir); #transformix -in inputImage.ext -out outputDirectory -tp TransformParameters.txt cmd = TransformixBinary + ' -in ' + imgname + ' -out ' + resultdirname + ' -tp ' + transformParameterFile; res = os.system(cmd); if res != 0: raise RuntimeError('transformData: failed executing: ' + cmd); if not isinstance(source, basestring): os.remove(imgname); if sink == []: return getResultDataFile(resultdirname); elif sink is None: resultfile = getResultDataFile(resultdirname); return io.readData(resultfile); elif isinstance(sink, basestring): resultfile = getResultDataFile(resultdirname); return io.convertData(resultfile, sink); else: raise RuntimeError('transformData: sink not valid!');