当前位置: 首页 > news >正文

IdealHighPass 傅里叶变换在频率域的图像处理效果

一:主要的知识点

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()
http://www.jsqmd.com/news/244750/

相关文章:

  • [吾爱大神原创工具] 记账本app
  • 【必藏】构建高并发AI系统:从量化剪枝到边缘部署的完整实践指南
  • .NET微服务架构:从WebAPI到Docker实战
  • python基于flask框架的留守儿童身心关爱平台的设计与开发
  • python基于flask框架的高校学生宿舍报修系统
  • python基于flask框架的 蛋糕购物商城的设计
  • python基于flask框架的二手手机商城管理系统的设计与开发
  • python基于flask框架的健身运动比赛服务饮食推荐平台设计与实现
  • 揭秘工业级Web可视化系统:从技术困境到智能监控的突破之路
  • 亲测好用8个一键生成论文工具,自考学生轻松搞定毕业论文!
  • MySQL数据可视化实战指南
  • AI记忆之谜:为什么DeepSeek能记住你的规划?揭秘大模型内存管理技术,建议收藏不迷路
  • RAG优化策略终极指南:17种方法全对比+选型建议,开发者必藏!
  • 【珍藏】大模型开发全攻略:12个月从入门到精通,附ChatGPT、DeepSeek等实战案例
  • 【珍藏】LangGraph图模块深度剖析:构建复杂AI工作流的秘密武器,从节点到边的底层实现详解
  • MySQL数据可视化全流程解析
  • Agent工程进入深水区!LangChain最新调研揭秘:57%企业已部署Agent,收藏这份生产级落地指南
  • 传统机器学习(如xgboost、随机森林等)和深度学习(如LSTM等)在时间序列预测各有什么优缺点?/【原创改进代码】基于RFAConv(感受野注意力卷积)-BiGRU(双向门控循环单元)多变量时间序
  • C语言造轮子大赛:从零打造高性能轮子
  • 解决Agent上下文爆炸:三大支柱架构详解,技术人必看收藏指南
  • 详解最新PatchTST时间序列算法的原理及代码实现/【原创代码改进】基于贝叶斯优化的PatchTST综合能源负荷多变量时间序列预测
  • 【小技巧】用 VLOOKUP 实现表格合并
  • 玩转Linux命令:创意组合大赛全攻略
  • C语言造轮子大赛:从零打造高效轮子
  • 【必藏】10分钟精通LangChain Model:从基础到高级应用全攻略
  • TCP/IP协议栈深度解析技术文章大纲
  • 跨平台C++开发:挑战与解决方案
  • OBS NDI插件高级配置与网络视频传输优化技术指南
  • 从 WebView 到 React Native,再到 Flutter:用 Runtime 视角重新理解跨端框架
  • dfs|bfs建图