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

PyTorch实战:用傅里叶变换给你的图像做一次‘频谱体检’(附完整代码)

PyTorch实战用傅里叶变换给你的图像做一次‘频谱体检’附完整代码当你拿到一张照片时看到的只是像素的排列组合。但就像医生通过X光片能看到骨骼结构一样傅里叶变换能让我们看到图像背后隐藏的频谱DNA。今天我们就用PyTorch的torch.fft模块带你的图像做一次全面的频域体检。1. 准备工作理解图像频谱的基本概念在开始代码实操前我们需要建立几个关键认知频域 vs 空间域空间域是我们熟悉的像素网格而频域表示图像中不同频率成分的分布低频与高频低频对应图像中平缓变化的区域如蓝天、皮肤高频对应边缘、纹理等快速变化的部分频谱图将频域信息可视化的结果通常显示为对称的亮斑图案提示频谱图的中心代表低频边缘代表高频。这与我们直觉中的中心重要概念恰好相反。准备一张测试图像建议512×512像素我们将用这张城市风光照作为示例import torch import torchvision.transforms as transforms from PIL import Image import matplotlib.pyplot as plt # 加载图像 image Image.open(cityscape.jpg).convert(L) # 转为灰度 transform transforms.Compose([ transforms.ToTensor(), transforms.Resize((512, 512)) ]) img_tensor transform(image).unsqueeze(0) # 添加batch维度2. 执行傅里叶变换获取图像频谱现在让我们进行实际的变换操作# 执行2D傅里叶变换 fft torch.fft.fft2(img_tensor) fft_shifted torch.fft.fftshift(fft) # 将低频移到中心 # 计算幅度谱取对数便于可视化 magnitude torch.log(1 torch.abs(fft_shifted))可视化结果对比如下空间域图像频域幅度谱![原始图像]![频谱图]观察频谱图时注意中心亮斑代表图像的整体亮度和大面积平滑区域放射状条纹对应图像中的直线边缘对称性实数图像的频谱总是共轭对称的3. 频谱诊断解读图像特征现在我们来当一次图像医生通过频谱分析图像健康状况3.1 检测图像模糊模糊图像的频谱特征中心低频成分异常突出高频区域能量显著降低整体频谱范围收缩def check_blur(magnitude): h, w magnitude.shape[-2:] center_y, center_x h // 2, w // 2 # 计算低频能量占比 low_freq_radius 30 mask torch.zeros_like(magnitude) mask[..., center_y-low_freq_radius:center_ylow_freq_radius, center_x-low_freq_radius:center_xlow_freq_radius] 1 low_energy (magnitude * mask).sum() total_energy magnitude.sum() return low_energy / total_energy 0.85 # 经验阈值3.2 识别高频噪声噪声在频谱中的表现高频区域出现不规则亮点非对称的能量分布整体频谱能量偏高def detect_noise(magnitude): # 裁剪外围1/4区域纯高频 h, w magnitude.shape[-2:] cropped magnitude[..., h//4:3*h//4, w//4:3*w//4] # 计算高频能量方差 high_freq_variance cropped.var() return high_freq_variance 0.1 # 经验阈值4. 高级应用频域滤波实战理解了频谱特征后我们可以进行针对性的频域处理4.1 低通滤波去噪平滑def low_pass_filter(image_tensor, radius30): fft torch.fft.fft2(image_tensor) fft_shifted torch.fft.fftshift(fft) # 创建低通掩膜 h, w image_tensor.shape[-2:] center_y, center_x h // 2, w // 2 mask torch.zeros_like(image_tensor) mask[..., center_y-radius:center_yradius, center_x-radius:center_xradius] 1 # 应用滤波并逆变换 filtered fft_shifted * mask ifft torch.fft.ifft2(torch.fft.ifftshift(filtered)) return torch.abs(ifft)4.2 高通滤波边缘增强def high_pass_filter(image_tensor, radius30): fft torch.fft.fft2(image_tensor) fft_shifted torch.fft.fftshift(fft) # 创建高通掩膜 h, w image_tensor.shape[-2:] center_y, center_x h // 2, w // 2 mask torch.ones_like(image_tensor) mask[..., center_y-radius:center_yradius, center_x-radius:center_xradius] 0 # 应用滤波并逆变换 filtered fft_shifted * mask ifft torch.fft.ifft2(torch.fft.ifftshift(filtered)) return torch.abs(ifft)滤波效果对比表滤波类型效果描述适用场景低通滤波平滑图像抑制噪声去噪、模糊背景高通滤波增强边缘和纹理边缘检测、细节增强5. 相位与振幅的奥秘傅里叶变换实际上包含两部分信息幅度谱我们已经展示的部分表示频率成分的强度相位谱表示频率成分的空间位置关系# 提取相位信息 phase torch.angle(fft_shifted) # 有趣的实验交换幅度和相位 mixed torch.abs(fft_shifted) * torch.exp(1j * phase) reconstructed torch.fft.ifft2(torch.fft.ifftshift(mixed))实验发现相位信息对图像结构至关重要仅用原始幅度加随机相位图像会变得难以辨认相位谱中隐藏着图像的几何特征6. 实战技巧与性能优化在实际应用中还需要注意图像尺寸处理# 最佳实践使用2的幂次方尺寸 optimal_size 2 ** int(torch.log2(torch.tensor(max(h, w))))批处理加速# 同时处理多张图像 batch_fft torch.fft.fft2(image_batch)GPU加速device torch.device(cuda if torch.cuda.is_available() else cpu) image_tensor image_tensor.to(device) fft torch.fft.fft2(image_tensor)常见问题排查频谱全黑检查输入图像是否已经归一化结果不对确认是否执行了fftshift出现伪影尝试在变换前加窗函数7. 完整代码示例以下是整合所有功能的完整脚本import torch import torchvision.transforms as transforms from PIL import Image import matplotlib.pyplot as plt class ImageSpectrumAnalyzer: def __init__(self, image_path): self.image Image.open(image_path).convert(L) self.transform transforms.Compose([ transforms.ToTensor(), transforms.Resize((512, 512)) ]) self.img_tensor self.transform(self.image).unsqueeze(0) def compute_spectrum(self): fft torch.fft.fft2(self.img_tensor) self.fft_shifted torch.fft.fftshift(fft) self.magnitude torch.log(1 torch.abs(self.fft_shifted)) self.phase torch.angle(self.fft_shifted) return self.magnitude.squeeze().numpy() def apply_filter(self, filter_typelowpass, radius30): if filter_type lowpass: mask torch.zeros_like(self.img_tensor) else: # highpass mask torch.ones_like(self.img_tensor) h, w self.img_tensor.shape[-2:] cy, cx h // 2, w // 2 mask[..., cy-radius:cyradius, cx-radius:cxradius] ( 1 if filter_type lowpass else 0) filtered self.fft_shifted * mask ifft torch.fft.ifft2(torch.fft.ifftshift(filtered)) return torch.abs(ifft).squeeze().numpy() def diagnose(self): # 实现前面介绍的诊断方法 pass # 使用示例 analyzer ImageSpectrumAnalyzer(cityscape.jpg) magnitude analyzer.compute_spectrum() filtered_img analyzer.apply_filter(highpass, radius50) plt.figure(figsize(12, 6)) plt.subplot(121), plt.imshow(magnitude, cmapgray), plt.title(Magnitude Spectrum) plt.subplot(122), plt.imshow(filtered_img, cmapgray), plt.title(Highpass Filtered) plt.show()通过这个完整的频谱分析流程你现在可以像专业图像处理工程师一样深入洞察任何图像的内在频率特征。记住频谱分析不是终点而是理解图像本质的新起点。在实际项目中这种技术可以帮助你更精准地设计图像处理算法无论是去噪、增强还是压缩。

相关文章:

PyTorch实战:用傅里叶变换给你的图像做一次‘频谱体检’(附完整代码)

PyTorch实战:用傅里叶变换给你的图像做一次‘频谱体检’(附完整代码) 当你拿到一张照片时,看到的只是像素的排列组合。但就像医生通过X光片能看到骨骼结构一样,傅里叶变换能让我们看到图像背后隐藏的"频谱DNA&quo…...

浏览器是如何对 HTML5 的离线储存资源进行管理和加载的?

浏览器对 HTML5 离线存储资源的管理和加载机制,主要取决于你使用的是现代方案(Service Workers Cache API)还是旧方案(Application Cache)。由于 AppCache 已废弃,我们将重点深入解析 Service Workers 的底…...

Granite TimeSeries FlowState R1模型架构创新点解析:FlowState机制如何提升长期预测精度

Granite TimeSeries FlowState R1模型架构创新点解析:FlowState机制如何提升长期预测精度 时间序列预测这事儿,听起来有点学术,但其实离我们特别近。比如,预测明天的天气、预估下个月的销售额,甚至是预判服务器未来几…...

AudioSeal问题解决:常见格式兼容与密钥恢复,手把手教你搞定

AudioSeal问题解决:常见格式兼容与密钥恢复,手把手教你搞定 1. 引言:音频水印技术的重要性 在数字内容保护领域,音频水印技术扮演着关键角色。AudioSeal作为Meta研发的前沿音频保护方案,能够在不影响听感的前提下&am…...

Nunchaku FLUX.1 CustomV3实战体验:19秒出图,效果惊艳的AI绘画神器

Nunchaku FLUX.1 CustomV3实战体验:19秒出图,效果惊艳的AI绘画神器 1. 初见惊艳:19秒生成专业级插画 当我第一次用Nunchaku FLUX.1 CustomV3生成图片时,计时器定格在19.3秒——这个速度让我下意识看了两遍确认。更令人惊讶的是&…...

2023最全Figma样机指南:从Free iPhone 12 Pro Mockup到实战透视效果

2023 Figma样机高阶应用指南:从资源整合到品牌化视觉呈现 在数字产品设计领域,样机展示早已超越了简单的界面包装功能,成为品牌叙事和用户体验验证的关键环节。Figma作为当下主流设计工具,其开放的插件生态和协作特性为样机应用提…...

跨境业务中的语音分析:FUTURE POLICE多语种与跨文化适配

跨境业务中的语音分析:FUTURE POLICE多语种与跨文化适配 1. 引言:当客服电话响起,你听懂的不只是语言 想象一下这个场景:一家公司的客服中心,每天要处理来自全球各地的客户电话。一个来自西班牙的客户,语…...

Asian Beauty Z-Image Turbo 古风主题作品特辑:还原诗词意境中的古典美人

Asian Beauty Z-Image Turbo 古风主题作品特辑:还原诗词意境中的古典美人 最近在尝试各种图像生成模型时,我偶然间用上了Asian Beauty Z-Image Turbo。这个名字听起来就挺有意思,专门针对亚洲审美做了优化。我突发奇想,用它来生成…...

OpenClaw技能动态加载机制详解

有兴趣的朋友可以到我的知识星球“小龙虾孵化实验室”共同探索智能工具的实现与应用(落地与变现)。 目录 核心概念OpenClaw 技能加载机制小龙虾技能加载机制对比分析最佳实践故障排查 注:小龙虾是我开发的类OpenClaw系统 核心概念 什么是技…...

掌握智能体技能:小白程序员必备的大模型进阶指南(收藏版)

本文介绍了大语言模型(LLM)从提示词工程到智能体技能(Agent Skills)的演进。重点解析了智能体技能与工具调用的区别,核心架构拆解,技能获取途径,安全挑战及解决方案。强调Agent Skills是大模型走…...

无人机巡田图像识别准确率从68%跃升至94.7%:农业物联网Python优化全链路解析

第一章:无人机巡田图像识别准确率跃升的工程背景与业务价值农业智能化正从“能用”迈向“好用”,而无人机巡田作为数字农田的核心感知入口,其图像识别准确率直接决定病虫害预警时效性、作物长势评估可信度与变量作业执行精度。过去依赖通用目…...

从数据清洗到特征提取:手把手教你用Matlab的tabulate函数挖掘数组规律

从数据清洗到特征提取:手把手教你用Matlab的tabulate函数挖掘数组规律 在数据科学和机器学习项目中,80%的时间往往花在数据预处理上。而理解数据分布特征,正是这个过程中最基础也最关键的环节。Matlab的tabulate函数就像一把瑞士军刀&#xf…...

OpenClaw技能扩展:用Qwen3.5-4B-Claude实现Markdown文档自动整理

OpenClaw技能扩展:用Qwen3.5-4B-Claude实现Markdown文档自动整理 1. 为什么需要文档自动化整理 作为一个经常需要处理技术文档的开发者,我发现自己每周要花费至少3小时在重复性的文档整理上。那些散落在不同文件夹的Markdown文件,有的缺少层…...

OpenClaw关键SKILL技能优化

对比分析:self-improving vs self-improving-agent技能深度对比评估核心差异总结特性self-improving (核心版)self-improving-agent存储位置~/self-improving/(家目录)~/.openclaw/workspace/.learnings/(工作区)架构设计分层存储系统 (HOT/WARM/COLD)扁平日志文件 …...

论文洞察:基于重要性感知的多层级前缀KV Cache存储系统

研究背景 本文基于浙江大学、华为在FAST25上发表的研究成果《IMPRESS: An Importance-Informed Multi-Tier Prefix KV Storage System for Large Language Model Inference》进行深入分析。 当CPU内存不足时需要将前缀KV Cache存储在磁盘上,由于磁盘I/O延迟较高&a…...

Lychee Rerank MM算力方案:单卡A10实现图文混合检索重排序的低成本部署

Lychee Rerank MM算力方案:单卡A10实现图文混合检索重排序的低成本部署 1. 项目背景与核心价值 在多模态搜索成为主流的今天,用户不再满足于单纯的文本检索。当你在电商平台搜索"适合海边度假的连衣裙"时,既希望看到相关的文字描…...

Dynamics 365 FO新手必看:Visual Studio 2019搭建项目框架全流程(含Model避坑指南)

Dynamics 365 F&O开发实战:Visual Studio 2019项目框架搭建与Model设计精要 当第一次打开Visual Studio 2019准备开始Dynamics 365 Finance and Operations开发时,很多开发者会陷入配置迷宫。不同于常规.NET开发,F&O项目框架的搭建涉…...

Fish Speech 1.5生成语音作品集:中英日三语惊艳效果

Fish Speech 1.5生成语音作品集:中英日三语惊艳效果 想体验专业级的多语言语音合成效果?Fish Speech 1.5支持12种语言的流畅语音生成,本文将展示其中文、英文和日语的实际合成效果,带你感受这款先进TTS模型的强大能力。 1. 核心…...

[GESP202603 一级] 数字替换

2026年3月GESP一级 真题解析 T2数字替换#编程#信奥赛#c语言#c https://www.bilibili.com/video/BV1iXwvzDEX5/ 202603 GESP C 一级真题解析 -- 选择 https://www.bilibili.com/video/BV1yMwEz2Egg/ GESP数字替换 https://www.bilibili.com/video/BV1kKAnzSEev/ GESP1级202603 h…...

Crmeb二开服务号静默授权登录

序言:前提这个走不开是基于原来的架构,前后端分离的。一、前端组织判断是是否有token,token是否有效。二、如果token无效,则由前端来组装跳转的URI,如下:https://open.weixin.qq.com/connect/oauth2/author…...

Realistic Vision V5.1 虚拟摄影棚开发实战:使用JavaScript实现批量图像生成工具

Realistic Vision V5.1 虚拟摄影棚开发实战:使用JavaScript实现批量图像生成工具 最近在做一个创意项目,需要为几十个不同的产品概念生成配套的展示图。如果一张张手动去生成,不仅效率低下,而且风格很难保持一致。这让我开始思考…...

SpringBoot 2.x 集成 MQTT 踩坑实录:从配置文件报错到消息成功收发(EMQX 4.4.1 Docker版)

SpringBoot 2.x 集成 MQTT 实战避坑指南:EMQX 4.4.1 Docker 部署全解析 在物联网和消息中间件领域,MQTT协议凭借其轻量级、低带宽消耗和高效发布/订阅模式,已成为设备互联的首选方案。本文将带您深入SpringBoot 2.x与EMQX 4.4.1(D…...

一般算法题java数组能开多大

int 占 4 字节 10^6 个 int:约 4MB 10^7 个 int:约 40MB 10^8 个 int:约 400MB 10^9 个 int:约 4GB 而大多数 OJ 给 Java 的内存一般是 64MB / 128MB / 256MB / 512MB。 10^6 级别:很稳 10^7 级别:有时还能…...

嵌入式ARM方向毕设入门指南:从开发环境搭建到第一个裸机程序

最近在帮学弟学妹们看嵌入式方向的毕业设计,发现很多同学卡在了第一步:开发环境都搭不起来,或者对着芯片型号一脸茫然。今天我就以最主流的ARM Cortex-M平台(比如STM32)为例,梳理一份从零到一的实战指南&am…...

仓储空间动态建模与全流程认知计算关键技术攻关——基于镜像视界 Pixel-to-Space、多视角视频融合、动态三维重构、无感定位与轨迹建模的空间计算引擎

仓储空间动态建模与全流程认知计算关键技术攻关——基于镜像视界 Pixel-to-Space、多视角视频融合、动态三维重构、无感定位与轨迹建模的空间计算引擎一、研究背景与建设必要性在当前仓储体系中,信息化建设已基本完成从“人工记录”向“系统管理”的初步跃迁&#x…...

别再只会用df -h了!CentOS 7/8硬盘监控,这8个命令让你成为运维老手

从基础到实战:CentOS硬盘监控的8个高阶命令组合技 当服务器磁盘空间告警邮件突然弹出时,大多数运维工程师的第一反应是执行df -h查看磁盘使用率。但真正的问题往往隐藏在表象之下——可能是某个失控的日志文件正在吞噬空间,或是磁盘I/O性能骤…...

Java 中的 String、StringBuffer 与 StringBuilder:区别、联系与实战选型

String、StringBuffer、StringBuilder 是 Java 中处理字符串的核心类,三者都用于字符串操作,但在可变性、线程安全、性能上差异显著。本文从「核心特性→底层原理→性能对比→实战选型」全维度拆解,帮你精准掌握三者的使用场景。一、核心特性…...

万界星空奶油制造工厂MES系统完整解决方案

——覆盖原材料、全链路追溯、不合格品闭环、成本能效与智能合规的一体化乳品智造平台 一、行业背景与挑战奶油(稀奶油、黄油、无水奶油等)作为高敏感度乳制品,具有原料易变质、工艺复杂、保质期短(2–30天)、微生物风…...

Ubuntu 22.04上安装Isaac Gym避坑全记录:从Vulkan报错到Segmentation Fault解决

Ubuntu 22.04上安装Isaac Gym避坑全记录:从Vulkan报错到Segmentation Fault解决 Isaac Gym作为NVIDIA推出的物理仿真平台,在机器人强化学习领域展现出强大的性能优势。然而在Ubuntu 22.04系统上的安装过程却可能成为开发者的"噩梦"——从Vulka…...

2024最新版:Java集成微信支付APIV3保姆级教程(含完整代码)

2024年Java集成微信支付APIV3全流程实战指南 微信支付作为国内移动支付领域的核心基础设施,其APIV3版本在安全性、易用性和功能性上都实现了显著提升。本文将带您从零开始,全面掌握Java环境下微信支付APIV3的集成方法,包含最新技术要点和实战…...