一:主要的知识点
1、说明
本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①图像从空间域到时间域的转换,②图像通道的提取
二:代码及注释
from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkIOImage import vtkImageReader2Factory from vtkmodules.vtkImagingCore import vtkImageExtractComponents from vtkmodules.vtkImagingFourier import ( vtkImageButterworthHighPass, vtkImageFFT, vtkImageIdealHighPass, vtkImageRFFT ) from vtkmodules.vtkImagingColor import vtkImageMapToWindowLevelColors from vtkmodules.vtkInteractionStyle import vtkInteractorStyleImage from vtkmodules.vtkRenderingCore import ( vtkImageActor, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() fileName = "Data/fullhead15.png" readerFactory = vtkImageReader2Factory() reader = readerFactory.CreateImageReader2(fileName) reader.SetFileName(fileName) reader.Update() """ vtkImageFFT 将图像从 空间域(spatial domain) 转换到 频率域 输入: vtkImageData,实数图像 输出:vtkImageData,每个像素有 2 个分量:实部 (Re) 和 虚部 (Im) """ fft = vtkImageFFT() fft.SetInputConnection(reader.GetOutputPort()) """ vtkImageIdealHighPass 主要用于 高通滤波(High-Pass Filtering),也就是让图像的高频部分(细节)通过,抑制低频部分(平滑区域) """ idealHighPass = vtkImageIdealHighPass() idealHighPass.SetInputConnection(fft.GetOutputPort()) idealHighPass.SetXCutOff(0.1) # 设置X方向的截断频率 idealHighPass.SetYCutOff(0.1) # 设置Y方向的截断频率 """ vtkImageRFFT 傅里叶变换逆变换 """ idealRfft = vtkImageRFFT() idealRfft.SetInputConnection(idealHighPass.GetOutputPort()) """ vtkImageExtractComponents 从输入图像的多分量(如 RGB、RGBA、矢量场)中,提取出指定的通道/分量,输出单分量或少数几分量的图像 例如现在有一个彩色图像,每个像素有3个分量R,G,B 如果只想看红色通道: extract = vtk.vtkImageExtractComponents() extract.SetInputConnection(reader.GetOutputPort()) extract.SetComponents(0) # 提取第 0 个分量(R 通道) """ idealReal = vtkImageExtractComponents() idealReal.SetInputConnection(idealRfft.GetOutputPort()) idealReal.SetComponents(0) """ vtkImageButterworthHighPass 巴特沃斯高通滤波,实现一种平滑的高通滤波器 与 vtkImageIdealHighPass 类似,但有更柔和的频率过渡,不会在边缘产生明显的“振铃”伪影 """ butterworthHighPass = vtkImageButterworthHighPass() butterworthHighPass.SetInputConnection(fft.GetOutputPort()) butterworthHighPass.SetXCutOff(0.1) butterworthHighPass.SetYCutOff(0.1) butterworthRfft = vtkImageRFFT() butterworthRfft.SetInputConnection(butterworthHighPass.GetOutputPort()) butterworthReal = vtkImageExtractComponents() butterworthReal.SetInputConnection(butterworthRfft.GetOutputPort()) butterworthReal.SetComponents(0) idealColor = vtkImageMapToWindowLevelColors() idealColor.SetWindow(500) idealColor.SetLevel(0) idealColor.SetInputConnection(idealReal.GetOutputPort()) idealActor = vtkImageActor() idealActor.GetMapper().SetInputConnection(idealColor.GetOutputPort()) idealActor.GetProperty().SetInterpolationTypeToNearest() butterworthColor = vtkImageMapToWindowLevelColors() butterworthColor.SetWindow(500) butterworthColor.SetLevel(0) butterworthColor.SetInputConnection(butterworthReal.GetOutputPort()) butterworthActor = vtkImageActor() butterworthActor.GetMapper().SetInputConnection(butterworthColor.GetOutputPort()) butterworthActor.GetProperty().SetInterpolationTypeToNearest() idealRenderer = vtkRenderer() idealRenderer.SetViewport(0.0, 0.0, 0.5, 1.0) idealRenderer.AddActor(idealActor) idealRenderer.ResetCamera() idealRenderer.SetBackground(colors.GetColor3d("SlateGray")) butterworthRenderer = vtkRenderer() butterworthRenderer.SetViewport(0.5, 0.0, 1.0, 1.0) butterworthRenderer.AddActor(butterworthActor) butterworthRenderer.SetActiveCamera(idealRenderer.GetActiveCamera()) butterworthRenderer.SetBackground(colors.GetColor3d("LightSlateGray")) renderWindow = vtkRenderWindow() renderWindow.SetSize(600, 300) renderWindow.SetWindowName('IdealHighPass') renderWindow.AddRenderer(idealRenderer) renderWindow.AddRenderer(butterworthRenderer) renderWindowInteractor = vtkRenderWindowInteractor() style = vtkInteractorStyleImage() renderWindowInteractor.SetInteractorStyle(style) renderWindowInteractor.SetRenderWindow(renderWindow) idealRenderer.GetActiveCamera().Dolly(1.4) idealRenderer.ResetCameraClippingRange() renderWindowInteractor.Initialize() renderWindowInteractor.Start() if __name__ == '__main__': main()