梯度算子
import vtk
reader = vtk.vtkJPEGReader() # 读入灰度图
reader.SetFileName(r'E:\lena-gray.jpg')
reader.Update()
gradientFilter = vtk.vtkImageGradient()
'''
计算梯度时,采用的是中间差分法,即像素在每个方向的差分都是利用前后两个像素值之差
'''
gradientFilter.SetInputConnection(reader.GetOutputPort())
gradientFilter.SetDimensionality(2) # 用于设置要计算的图像维数,默认为二维,此时梯度矢量也为二维
magnitudeFilter = vtk.vtkImageMagnitude() # 计算梯度矢量的2-范数。即矢量的模
magnitudeFilter.SetInputConnection(gradientFilter.GetOutputPort())
magnitudeFilter.Update()
range = magnitudeFilter.GetOutput().GetScalarRange()
ShiftScale = vtk.vtkImageShiftScale() # 将图像的数据范围调整为[0,255]然后显示。
ShiftScale.SetOutputScalarTypeToUnsignedChar()
ShiftScale.SetScale(255 / range[1])
ShiftScale.SetInputConnection(magnitudeFilter.GetOutputPort())
ShiftScale.Update()
originalActor = vtk.vtkImageActor()
originalActor.SetInputData(reader.GetOutput())
gradActor = vtk.vtkImageActor()
gradActor.SetInputData(ShiftScale.GetOutput())
originalViewport = [0.0, 0.0, 0.5,