def watershed_ift(input, markers, structure=None, output=None): """Apply watershed from markers using a iterative forest transform algorithm. Negative markers are considered background markers which are processed after the other markers. A structuring element defining the connectivity of the object can be provided. If none is provided, an element is generated with a squared connectivity equal to one. An output array can optionally be provided. """ input = numpy.asarray(input) if input.dtype.type not in [numpy.uint8, numpy.uint16]: raise TypeError('only 8 and 16 unsigned inputs are supported') if structure is None: structure = morphology.generate_binary_structure(input.ndim, 1) structure = numpy.asarray(structure, dtype = bool) if structure.ndim != input.ndim: raise RuntimeError('structure and input must have equal rank') for ii in structure.shape: if ii != 3: raise RuntimeError('structure dimensions must be equal to 3') if not structure.flags.contiguous: structure = structure.copy() markers = numpy.asarray(markers) if input.shape != markers.shape: raise RuntimeError('input and markers must have equal shape') integral_types = [numpy.int0, numpy.int8, numpy.int16, numpy.int32, numpy.int_, numpy.int64, numpy.intc, numpy.intp] if markers.dtype.type not in integral_types: raise RuntimeError('marker should be of integer type') if isinstance(output, numpy.ndarray): if output.dtype.type not in integral_types: raise RuntimeError('output should be of integer type') else: output = markers.dtype output, return_value = _ni_support._get_output(output, input) _nd_image.watershed_ift(input, markers, structure, output) return return_value
def watershed_ift(input, markers, structure=None, output=None): """Apply watershed from markers using a iterative forest transform algorithm. Negative markers are considered background markers which are processed after the other markers. A structuring element defining the connectivity of the object can be provided. If none is provided an element is generated iwth a squared connecitiviy equal to one. An output array can optionally be provided. """ input = numpy.asarray(input) if input.dtype.type not in [numpy.uint8, numpy.uint16]: raise TypeError('only 8 and 16 unsigned inputs are supported') if structure is None: structure = morphology.generate_binary_structure(input.ndim, 1) structure = numpy.asarray(structure, dtype = bool) if structure.ndim != input.ndim: raise RuntimeError('structure and input must have equal rank') for ii in structure.shape: if ii != 3: raise RuntimeError('structure dimensions must be equal to 3') if not structure.flags.contiguous: structure = structure.copy() markers = numpy.asarray(markers) if input.shape != markers.shape: raise RuntimeError('input and markers must have equal shape') integral_types = [numpy.int0, numpy.int8, numpy.int16, numpy.int32, numpy.int_, numpy.int64, numpy.intc, numpy.intp] if markers.dtype.type not in integral_types: raise RuntimeError('marker should be of integer type') if isinstance(output, numpy.ndarray): if output.dtype.type not in integral_types: raise RuntimeError('output should be of integer type') else: output = markers.dtype output, return_value = _ni_support._get_output(output, input) _nd_image.watershed_ift(input, markers, structure, output) return return_value
def watershed_ift(input, markers, structure=None, output=None): """Apply watershed from markers using a iterative forest transform algorithm. Negative markers are considered background markers which are processed after the other markers. A structuring element defining the connectivity of the object can be provided. If none is provided an element is generated iwth a squared connecitiviy equal to one. An output array can optionally be provided. """ input = numarray.asarray(input) if input.type() not in [numarray.UInt8, numarray.UInt16]: raise TypeError, 'only 8 and 16 unsigned inputs are supported' if structure == None: structure = morphology.generate_binary_structure(input.rank, 1) structure = numarray.asarray(structure, type=numarray.Bool) if structure.rank != input.rank: raise RuntimeError, 'structure and input must have equal rank' for ii in structure.shape: if ii != 3: raise RuntimeError, 'structure dimensions must be equal to 3' if not structure.iscontiguous(): structure = structure.copy() markers = numarray.asarray(markers) if input.shape != markers.shape: raise RuntimeError, 'input and markers must have equal shape' if not isinstance(markers.type(), numarray.IntegralType): raise RuntimeError, 'marker should be of integer type' if isinstance(output, numarray.NumArray): if not isinstance(output.type(), numarray.IntegralType): raise RuntimeError, 'output should be of integer type' else: output = markers.type() output, return_value = _ni_support._get_output(output, input) _nd_image.watershed_ift(input, markers, structure, output) return return_value
def watershed_ift(input, markers, structure = None, output = None): """Apply watershed from markers using a iterative forest transform algorithm. Negative markers are considered background markers which are processed after the other markers. A structuring element defining the connectivity of the object can be provided. If none is provided an element is generated iwth a squared connecitiviy equal to one. An output array can optionally be provided. """ input = numarray.asarray(input) if input.type() not in [numarray.UInt8, numarray.UInt16]: raise TypeError, 'only 8 and 16 unsigned inputs are supported' if structure == None: structure = morphology.generate_binary_structure(input.rank, 1) structure = numarray.asarray(structure, type = numarray.Bool) if structure.rank != input.rank: raise RuntimeError, 'structure and input must have equal rank' for ii in structure.shape: if ii != 3: raise RuntimeError, 'structure dimensions must be equal to 3' if not structure.iscontiguous(): structure = structure.copy() markers = numarray.asarray(markers) if input.shape != markers.shape: raise RuntimeError, 'input and markers must have equal shape' if not isinstance(markers.type(), numarray.IntegralType): raise RuntimeError, 'marker should be of integer type' if isinstance(output, numarray.NumArray): if not isinstance(output.type(), numarray.IntegralType): raise RuntimeError, 'output should be of integer type' else: output = markers.type() output, return_value = _ni_support._get_output(output, input) _nd_image.watershed_ift(input, markers, structure, output) return return_value