def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__( self, module_manager, vtk.vtkImageDivergence(), 'Processing.', ('vtkImageData',), ('vtkImageData',), replaceDoc=True, inputFunctions=None, outputFunctions=None)
def operation(self, operation, volume2=None): """ Perform operations with ``Volume`` objects. `volume2` can be a constant value. Possible operations are: ``+``, ``-``, ``/``, ``1/x``, ``sin``, ``cos``, ``exp``, ``log``, ``abs``, ``**2``, ``sqrt``, ``min``, ``max``, ``atan``, ``atan2``, ``median``, ``mag``, ``dot``, ``gradient``, ``divergence``, ``laplacian``. |volumeOperations| |volumeOperations.py|_ """ op = operation.lower() image1 = self._data if op in ["median"]: mf = vtk.vtkImageMedian3D() mf.SetInputData(image1) mf.Update() return Volume(mf.GetOutput()) elif op in ["mag"]: mf = vtk.vtkImageMagnitude() mf.SetInputData(image1) mf.Update() return Volume(mf.GetOutput()) elif op in ["dot", "dotproduct"]: mf = vtk.vtkImageDotProduct() mf.SetInput1Data(image1) mf.SetInput2Data(volume2._data) mf.Update() return Volume(mf.GetOutput()) elif op in ["grad", "gradient"]: mf = vtk.vtkImageGradient() mf.SetDimensionality(3) mf.SetInputData(image1) mf.Update() return Volume(mf.GetOutput()) elif op in ["div", "divergence"]: mf = vtk.vtkImageDivergence() mf.SetInputData(image1) mf.Update() return Volume(mf.GetOutput()) elif op in ["laplacian"]: mf = vtk.vtkImageLaplacian() mf.SetDimensionality(3) mf.SetInputData(image1) mf.Update() return Volume(mf.GetOutput()) mat = vtk.vtkImageMathematics() mat.SetInput1Data(image1) K = None if isinstance(volume2, (int, float)): K = volume2 mat.SetConstantK(K) mat.SetConstantC(K) elif volume2 is not None: # assume image2 is a constant value mat.SetInput2Data(volume2._data) if op in ["+", "add", "plus"]: if K: mat.SetOperationToAddConstant() else: mat.SetOperationToAdd() elif op in ["-", "subtract", "minus"]: if K: mat.SetConstantC(-K) mat.SetOperationToAddConstant() else: mat.SetOperationToSubtract() elif op in ["*", "multiply", "times"]: if K: mat.SetOperationToMultiplyByK() else: mat.SetOperationToMultiply() elif op in ["/", "divide"]: if K: mat.SetConstantK(1.0 / K) mat.SetOperationToMultiplyByK() else: mat.SetOperationToDivide() elif op in ["1/x", "invert"]: mat.SetOperationToInvert() elif op in ["sin"]: mat.SetOperationToSin() elif op in ["cos"]: mat.SetOperationToCos() elif op in ["exp"]: mat.SetOperationToExp() elif op in ["log"]: mat.SetOperationToLog() elif op in ["abs"]: mat.SetOperationToAbsoluteValue() elif op in ["**2", "square"]: mat.SetOperationToSquare() elif op in ["sqrt", "sqr"]: mat.SetOperationToSquareRoot() elif op in ["min"]: mat.SetOperationToMin() elif op in ["max"]: mat.SetOperationToMax() elif op in ["atan"]: mat.SetOperationToATAN() elif op in ["atan2"]: mat.SetOperationToATAN2() else: colors.printc("\times Error in volumeOperation: unknown operation", operation, c='r') raise RuntimeError() mat.Update() return self._update(mat.GetOutput())
#!/usr/bin/env python import vtk from vtk.test import Testing from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Divergence measures rate of change of gradient. # Image pipeline reader = vtk.vtkPNGReader() reader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/fullhead15.png") gradient = vtk.vtkImageGradient() gradient.SetDimensionality(2) gradient.SetInputConnection(reader.GetOutputPort()) derivative = vtk.vtkImageDivergence() derivative.SetInputConnection(gradient.GetOutputPort()) viewer = vtk.vtkImageViewer() viewer.SetInputConnection(derivative.GetOutputPort()) viewer.SetColorWindow(1000) viewer.SetColorLevel(0) viewer.Render() # --- end of script --
def imageOperation(image1, operation='+', image2=None): ''' Perform operations with vtkImageData objects. Image2 can contain a constant value. Possible operations are: +, -, /, 1/x, sin, cos, exp, log, abs, **2, sqrt, min, max, atan, atan2, median, mag, dot, gradient, divergence, laplacian. [**Example**](https://github.com/marcomusy/vtkplotter/blob/master/examples/volumetric/imageOperations.py) ![gradient](https://user-images.githubusercontent.com/32848391/48198940-d1ba2800-e35a-11e8-96a7-ffbff797f165.jpg) ''' op = operation.lower() if op in ['median']: mf = vtk.vtkImageMedian3D() mf.SetInputData(image1) mf.Update() return mf.GetOutput() elif op in ['mag']: mf = vtk.vtkImageMagnitude() mf.SetInputData(image1) mf.Update() return mf.GetOutput() elif op in ['dot', 'dotproduct']: mf = vtk.vtkImageDotProduct() mf.SetInput1Data(image1) mf.SetInput2Data(image2) mf.Update() return mf.GetOutput() elif op in ['grad', 'gradient']: mf = vtk.vtkImageGradient() mf.SetDimensionality(3) mf.SetInputData(image1) mf.Update() return mf.GetOutput() elif op in ['div', 'divergence']: mf = vtk.vtkImageDivergence() mf.SetInputData(image1) mf.Update() return mf.GetOutput() elif op in ['laplacian']: mf = vtk.vtkImageLaplacian() mf.SetDimensionality(3) mf.SetInputData(image1) mf.Update() return mf.GetOutput() mat = vtk.vtkImageMathematics() mat.SetInput1Data(image1) K = None if image2: if isinstance(image2, vtk.vtkImageData): mat.SetInput2Data(image2) else: # assume image2 is a constant value K = image2 mat.SetConstantK(K) mat.SetConstantC(K) if op in ['+', 'add', 'plus']: if K: mat.SetOperationToAddConstant() else: mat.SetOperationToAdd() elif op in ['-', 'subtract', 'minus']: if K: mat.SetConstantC(-K) mat.SetOperationToAddConstant() else: mat.SetOperationToSubtract() elif op in ['*', 'multiply', 'times']: if K: mat.SetOperationToMultiplyByK() else: mat.SetOperationToMultiply() elif op in ['/', 'divide']: if K: mat.SetConstantK(1.0/K) mat.SetOperationToMultiplyByK() else: mat.SetOperationToDivide() elif op in ['1/x', 'invert']: mat.SetOperationToInvert() elif op in ['sin']: mat.SetOperationToSin() elif op in ['cos']: mat.SetOperationToCos() elif op in ['exp']: mat.SetOperationToExp() elif op in ['log']: mat.SetOperationToLog() elif op in ['abs']: mat.SetOperationToAbsoluteValue() elif op in ['**2', 'square']: mat.SetOperationToSquare() elif op in ['sqrt', 'sqr']: mat.SetOperationToSquareRoot() elif op in ['min']: mat.SetOperationToMin() elif op in ['max']: mat.SetOperationToMax() elif op in ['atan']: mat.SetOperationToATAN() elif op in ['atan2']: mat.SetOperationToATAN2() else: vc.printc('Error in imageOperation: unknown operation', operation, c=1) exit() mat.Update() return mat.GetOutput()