快速傅里叶变换
import vtk
reader = vtk.vtkJPEGReader() # 读入灰度图
reader.SetFileName(r'E:\lena-gray.jpg')
reader.Update()
# 1 频域处理
# 1.1快速傅里叶变换
fftFilter = vtk.vtkImageFFT() # 进行二维快速傅里叶变换
fftFilter.SetInputConnection(reader.GetOutputPort())
fftFilter.SetDimensionality(2)
fftFilter.Update()
fftExtractReal = vtk.vtkImageExtractComponents() # 需要显示频域图像,提取某一个组分图像再进行显示
fftExtractReal.SetInputConnection(fftFilter.GetOutputPort())
fftExtractReal.SetComponents(0)
range = fftExtractReal.GetOutput().GetScalarRange()
ShiftScale = vtk.vtkImageShiftScale()
ShiftScale.SetOutputScalarTypeToUnsignedChar() # 转类型
ShiftScale.SetScale(255.0 / (range[1] - range[0]))
ShiftScale.SetShift(-range[0])
ShiftScale.SetInputConnection(fftExtractReal.GetOutputPort())
ShiftScale.Update()
rfftFilter = vtk.vtkImageRFFT() # 快速傅里叶逆变换
rfftFilter.SetInputConnection(fftFilter.GetOutputPort())
rfftFilter.SetDimensionality(2)
rfftFilter.Update()
ifftExtractReal = vtk.vtkImageExtractComponents()
ifftExtractReal.SetInputConnection(rfftFilter.GetOutputPort())
ifftExtractReal.SetComponents(0)
rfftCastFilter = vtk.vtkImageCast()
rfftCastFilter.SetInputConnection(ifftExtractReal.GetOutputPort())
rfftCastFilter.SetOutputScalarTypeToUnsignedChar()
rfftCastFilter.Update()
'''
ImageData --> vtkImageFFT--> Filter --> vtkImageRFFT --> vtkImageExtractComponents
'''
originalActor = vtk.vtkImageActor()
originalActor.SetInputData(reader.GetOutput())
fftActor = vtk.vtkImageActor()
fftActor.SetInputData(ShiftScale.GetOutput())
rfftActor = vtk.vtkImageActor()
rfftActor.SetInputData(rfftCastFilter.GetOutput())
originalViewport = [0.0, 0.0, 0.33, 1.0]
fftViewport = [0.33, 0.0, 0.66, 1.0]
rfftViewport = [0.66, 0.0, 1.0, 1.0]
originalRenderer = vtk.vtkRenderer()
originalRenderer.SetViewport(originalViewport)
originalRenderer.AddActor(originalActor)
originalRenderer.ResetCamera()
originalRenderer.SetBackground(1.0, 1.0, 1.0)
fftRenderer = vtk.vtkRenderer()
fftRenderer.SetViewport(fftViewport)
fftRenderer.AddActor(fftActor)
fftRenderer.ResetCamera()
fftRenderer.SetBackground(1.0, 1.0, 1.0)
rfftRenderer = vtk.vtkRenderer(