7 #include "imstkImageGradient.h" 8 #include "imstkGeometryUtilities.h" 9 #include "imstkImageData.h" 10 #include "imstkLogger.h" 12 #include <vtkImageData.h> 13 #include <vtkImageGradient.h> 14 #include <vtkImageGradientMagnitude.h> 18 ImageGradient::ImageGradient()
21 setRequiredInputType<ImageData>(0);
36 std::shared_ptr<ImageData> inputImage = std::dynamic_pointer_cast<
ImageData>(
getInput(0));
37 if (inputImage ==
nullptr)
39 LOG(WARNING) <<
"No input to compute gradients";
42 if (inputImage->getNumComponents() != 1)
44 LOG(WARNING) <<
"Can only compute gradient on single channel image";
47 vtkSmartPointer<vtkImageData> inputImageVtk = GeometryUtils::coupleVtkImageData(inputImage);
48 if (m_ComputeMagnitude)
50 vtkNew<vtkImageGradientMagnitude> gradientMagnitude;
51 gradientMagnitude->SetInputData(inputImageVtk);
52 gradientMagnitude->Update();
53 setOutput(GeometryUtils::copyToImageData(gradientMagnitude->GetOutput()));
57 vtkNew<vtkImageGradient> gradients;
58 gradients->SetInputData(inputImageVtk);
59 gradients->SetHandleBoundaries(
true);
61 setOutput(GeometryUtils::copyToImageData(gradients->GetOutput()));
void requestUpdate() override
Users can implement this for the logic to be run.
std::shared_ptr< Geometry > getInput(size_t port=0) const
Returns input geometry given port, returns nullptr if doesn't exist.
void setNumOutputPorts(const size_t numPorts)
Get/Set the amount of output ports.
void setInput(std::shared_ptr< Geometry > inputGeometry, size_t port=0)
Set the input at the port.
void setOutput(std::shared_ptr< Geometry > inputGeometry, const size_t port=0)
Set the output at the port.
void setNumInputPorts(const size_t numPorts)
Get/Set the amount of input ports.
void setInputImage(std::shared_ptr< ImageData > inputImage)
Required input, port 0.
Class to represent 1, 2, or 3D image data (i.e. structured points)