news 2026/2/24 12:17:01

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 19:03:38

【必藏】构建高并发AI系统:从量化剪枝到边缘部署的完整实践指南

本文详细介绍了大规模AI系统的设计与优化技术,包括模型量化、剪枝等推理优化方法,不同平台部署策略,实时应用的延迟与吞吐量平衡,边缘AI部署,系统瓶颈诊断与性能监控,以及AI系统的CI/CD流水线和调试工具&am…

作者头像 李华
网站建设 2026/2/24 0:03:34

Spring Boot核心注解详解:@ResponseBody深度解析与实战

在Spring MVC/Spring Boot的开发体系中,前后端分离已是主流架构模式,而数据交互的核心离不开各类注解的支撑。其中,ResponseBody作为处理HTTP响应的关键注解,是后端返回数据给前端的“桥梁”。本文将从核心作用、工作原理、实战示…

作者头像 李华
网站建设 2026/2/6 21:15:33

python基于flask框架的高校实验室管理系统

目录高校实验室管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!高校实验室管理系统摘要 高校实验室管理系统基于Flask框架开发,旨在通过信息化手段解决传统实验室管…

作者头像 李华
网站建设 2026/2/20 5:49:39

【收藏】RAG架构分块技术全攻略:5种方法对比与应用场景分析

本文详细解析了RAG架构落地的5种文档分块技术:固定大小分块、语义分块、递归分块、基于文档结构分块和基于LLM分块。分析了各技术的原理、优缺点及适用场景,指出语义分块在多数情况下效果最佳,但最终选择需根据内容性质、嵌入模型能力和计算资…

作者头像 李华