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

当信号与系统遇见深度学习:我用傅里叶变换和拉普拉斯算子,看懂了CNN的本质

当信号与系统遇见深度学习:我用傅里叶变换和拉普拉斯算子,看懂了CNN的本质

前言

最近在做一个信号与系统课程设计,题目是“基于CNN的人物图像特征提取——傅里叶变换与拉普拉斯变换的深度学习应用”。说实话,一开始看到这个题目我是懵的——傅里叶、拉普拉斯,这不是经典信号处理的内容吗?跟深度学习有什么关系?

但做完整个实验后,我发现了一个让我豁然开朗的事实:CNN里的卷积核,本质上就是一组“可学习的滤波器”,而傅里叶变换和拉普拉斯算子,正是理解这一切的钥匙

这篇文章,我想把这个思考过程分享出来。如果你也在学信号与系统,或者刚开始接触CNN,希望能帮你打通两个知识体系之间的“任督二脉”。


一、信号与系统课里,我们学了什么?

信号与系统课程的核心思想其实很简单:把一个信号从不同角度去看

  • 时域:信号随时间怎么变化。
  • 频域:信号由哪些频率成分组成。

傅里叶变换帮我们从时域跳到频域:

拉普拉斯变换更进一步,引入复频率 ( s = \sigma + j\omega ),在图像处理里,它的离散形式就是大家熟知的拉普拉斯算子

在数字图像里,一个经典的拉普拉斯核(4邻域)长这样:

[[ 0, 1, 0], [ 1, -4, 1], [ 0, 1, 0]]

这个核的作用是什么?——边缘检测。它本质上是一个高通滤波器,能放大图像中灰度变化剧烈的地方。

而CNN的第一层卷积核,很多也长得像边缘检测算子。这难道是巧合吗?

二、实验一:用傅里叶变换“看”图像的频率

我们先拿一张人物图像(分辨率1080×1502),做二维离散傅里叶变换(2D-DFT)。

原始灰度图 → 幅度谱(对数变换后) → 相位谱

幅度谱的中心是低频成分(平滑区域),四周是高频成分(边缘、细节)。相位谱则保留了图像的结构信息。

接下来构造理想低通滤波器(截止半径80像素)和高通滤波器,分别乘到频域上,再反变换回空域:

  • 低通滤波:图像变模糊,去除了噪声和细节。
  • 高通滤波:只留下边缘和纹理,背景几乎消失。

这就是卷积定理的直观体现:

空域的卷积,等于频域的乘积。而CNN里的卷积层,做的就是这件事——只不过滤波器 ( h ) 不是手工设计的,而是从数据中学出来的。

三、实验二:用拉普拉斯算子检测边缘

拉普拉斯算子是二阶微分算子,对噪声敏感,所以实际常用**高斯-拉普拉斯(LoG)**先平滑再求导。

我们对比了三种算子:

  1. 4邻域拉普拉斯:对水平和垂直边缘敏感。
  2. 8邻域拉普拉斯:对斜向边缘也敏感。
  3. LoG(σ=2):边缘更干净,噪声抑制好。

实验结果(详见报告图3-1):

  • 拉普拉斯边缘图:白色表示正响应,黑色表示负响应。
  • 锐化图像:原图减去拉普拉斯结果,轮廓变得清晰。

这些手工设计的核,虽然效果不错,但固定、不灵活。而CNN可以学到成千上万种不同的“拉普拉斯”变体。

四、实验三:看CNN到底学到了什么

我搭建了一个简单的三层卷积网络:

Conv1: 1 → 16 通道, 3×3 核, + BatchNorm + ReLU + MaxPool Conv2: 16 → 32 通道, 3×3 核, + BN + ReLU + MaxPool Conv3: 32 → 64 通道, 3×3 核, + BN + ReLU + MaxPool

训练前,我首先好奇:这个模型在毫无训练的情况下,卷积核是随机的,能提取特征吗?
在本次课设里,我们没有进行训练,只是随机初始化。但即便如此,当我们可视化这些随机核时,发现很多核已经表现出类似边缘检测的模式(比如中间亮、四周暗,或者方向性的梯度)。

更有趣的是,即使随机初始化,各层的特征图也呈现出层次化的结构

  • Conv1的特征图:保留了较多的空间细节,响应边缘和纹理。
  • Conv2的特征图:开始出现重复模式,更抽象。
  • Conv3的特征图:分辨率降低,但语义信息更强(比如对人物轮廓、头发区域有选择响应)。

如果把Conv1的16个卷积核画出来(图4-3),你会发现——它们和拉普拉斯算子、Sobel算子、Gabor滤波器有极高的相似度:有的像水平边缘检测器,有的像垂直边缘检测器,有的像斑点检测器。

这说明了什么?CNN不是在“发明”新的操作,而是在学习信号处理里已有的“原子滤波器”,只是它们的形式更丰富、更适应数据

五、核心洞察:卷积定理是连接经典与现代的桥梁

我把整条思考链路画成了演进图(图5-1):

  1. 手工频域滤波(傅里叶高通) → 2.手工空域微分核(拉普拉斯)
    → 3.CNN第一层学习到的边缘检测核→ 4.CNN深层学习到的语义特征

每一步,卷积定理都在背后起作用:

传统方法手工设计 ( F_{\text{kernel}} ),而CNN用反向传播自动调整它。

更形象一点:CNN的第一层就是在学傅里叶频域里的“通带形状”,高层则在学组合这些基元来构建更复杂的模式

从这个角度看,深度学习并没有“推翻”经典信号处理,而是把它推广到了极致——用数据驱动的方式,在高维空间里做自适应滤波。

六、一些实验代码片段

整个实验用Python完成,主要依赖:

  • numpy,scipy:傅里叶变换、LoG滤波。
  • opencv-python:图像读写、基础滤波。
  • torch:CNN定义与特征可视化。
  • matplotlib:绘制所有图表。

下面贴几个关键片段(完整代码见课设报告附录):

6.1 二维傅里叶变换与滤波

importnumpyasnpimportcv2fromscipyimportndimagedeffourier_analysis(img_gray):# DFTf=np.fft.fft2(img_gray)fshift=np.fft.fftshift(f)magnitude=np.log(np.abs(fshift)+1)phase=np.angle(fshift)# 理想低通rows,cols=img_gray.shape crow,ccol=rows//2,cols//2lowpass=np.zeros((rows,cols))cv2.circle(lowpass,(ccol,crow),80,1,-1)# 应用滤波f_low=fshift*lowpass img_low=np.abs(np.fft.ifft2(np.fft.ifftshift(f_low)))returnmagnitude,phase,img_low

6.2 拉普拉斯算子

kernel_lap4=np.array([[0,1,0],[1,-4,1],[0,1,0]])lap4=cv2.filter2D(img_gray,-1,kernel_lap4)# LoG (高斯-拉普拉斯)fromscipy.ndimageimportgaussian_laplace log_result=gaussian_laplace(img_gray.astype(float),sigma=2.0)

6.3 CNN模型定义与特征提取

importtorch.nnasnnclassSimpleCNN(nn.Module):def__init__(self):super().__init__()self.conv1=nn.Conv2d(1,16,kernel_size=3,padding=1)self.pool1=nn.MaxPool2d(2)self.conv2=nn.Conv2d(16,32,3,padding=1)self.pool2=nn.MaxPool2d(2)self.conv3=nn.Conv2d(32,64,3,padding=1)self.pool3=nn.MaxPool2d(2)self.relu=nn.ReLU()defforward(self,x,return_features=False):f1=self.relu(self.conv1(x))x=self.pool1(f1)f2=self.relu(self.conv2(x))x=self.pool2(f2)f3=self.relu(self.conv3(x))ifreturn_features:returnf1,f2,f3returnself.pool3(f3)

可视化特征图时,我们把每个卷积层的输出(batch=1)取前几个通道画出来。即使模型没训练,随机核也能产生有结构的响应。

七、最大收获:别把“信号与系统”和“深度学习”割裂开

很多同学学信号与系统时觉得“这玩意儿古老、数学多、没用”,学深度学习时又把它当成一个全新的黑盒。但这次课设让我深刻意识到:

  • 傅里叶变换告诉你:图像 = 频率的叠加。
  • 拉普拉斯算子告诉你:边缘 = 二阶导数的过零点。
  • CNN告诉你:这些操作可以组合、堆叠、自动化。

没有信号与系统的基础,你只能把卷积核当成一个“神奇的模板”,而理解了卷积定理,你就能从频域的角度去思考:为什么浅层学边缘,深层学语义?本质上是因为多次卷积等价于频域多次乘积,相当于构造了更复杂的带通滤波器。

八、如果想继续深挖,可以做什么?

本次实验只用了随机初始化的CNN(未训练)。如果真正训练一个分类任务(比如人脸识别),观察训练前后卷积核的变化,会更有说服力。另外,还可以:

  • 对比手工设计的Gabor滤波器与CNN第一层核的相似度。
  • 梯度上升可视化每个卷积核最“喜欢”的模式。
  • 结合傅里叶域分析,计算每个卷积核的频响曲线,看它到底是低通、高通还是带通。

这些都能让经典理论与现代方法的联系更加紧密。


写在最后

这次课程设计让我对“信号处理”这门课彻底改观。它远不只是教我们算积分、拉普拉斯逆变换,而是在教我们用“变换”的眼光看问题。当我把这个眼光投射到CNN上时,很多以前觉得玄乎的东西,一下子变得清晰了。

如果你也在学这两门课,强烈建议找一张图片,自己动手:

  1. 做一次FFT,看看幅度谱和相位谱。
  2. 用拉普拉斯核做一次边缘检测。
  3. 搭一个最简单的CNN,把第一层卷积核画出来。

你一定会看到,它们之间那条隐秘而优美的连线。

附录:完整代码、所有实验结果图(傅里叶幅度谱、拉普拉斯边缘图、CNN核及特征图)已上传,见课程设计报告原文。


作者:陌生Boy
指导教师:GYY
课程:信号与线性系统分析课程设计
日期:2026年5月

http://www.zskr.cn/news/1500479.html

相关文章:

  • 集合 USB,AI ENC,AEC,BF,全面功能的语音处理模组
  • 如何在Windows上高效读写Btrfs分区:实用跨平台文件系统指南
  • MC68HC908MR24 TIMB定时器与SPI模块实战配置与避坑指南
  • 如何挑选正宗新疆干果:无添加养生特产选购攻略
  • NX许可回收无感测试,对比4款工具谁更隐形
  • 零成本启动的安全生产月巡检工具,安全检查 + 隐患上报一步到位
  • 【手把手教学】:OpenClaw 解压安装与运行全流程(包含安装包)
  • java feign调用第三方服务出现序列化错误的排查过程
  • 状态压缩 DP 与树形 DP:从空间优化到树状结构的动态规划
  • 计算机毕业设计之django基于大数据的旅游景区推荐系统
  • 第六节:Slash Commands斜杠命令——AI 的快捷指令
  • 海外商标注册后怎么管?出海企业不能让商标停在代理邮件里 - 客啦啦视界
  • AD生成图形交互式bom表的方法
  • Dify日志与标注时间显示问题
  • DBHub:一款免费开源的数据库MCP服务器
  • 从“盲跑”到“智控”:耐高温RFID驱动喷涂线柔性升级
  • 小说阅读器,真好用
  • 一分钟学会 Guice - 简单的 Java 依赖注入框架
  • 2026年AI大模型接口调度服务全维度实测:主流服务商性能对比与高性价比选型参考
  • 前端免费高效的接入天气组件(天气网),控制组件的样式
  • MarkItDown:把世界上的文件变成 LLM 爱读的 Markdown
  • 2026年实测AI论文网站指南(合规高效版)
  • 2026 采购竹笋干时,供应商只做一种产品会不会有供应风险?
  • 2026年 广东吸塑机厂家推荐榜:真空/高速/全自动/伺服/厚片吸塑机,塑料托盘吸塑设备专业实力之选! - 品牌发掘
  • 6 ChatGPT 错误状态组件 —— 语义降级与情绪权重混乱
  • Akagi:麻雀AI助手如何让你的对局胜率飙升300%?
  • 2026AI营销新风口 性价比GEO监测工具有哪些
  • 如何让3D视频在你的普通电脑上“活“起来?VR-Reversal的魔法揭秘
  • 如何快速掌握DeepLabV3Plus语义分割:从零到实战的完整指南
  • 北京遗产继承律所怎么选?——从继承纠纷类型、流程与风控看北京家理律所的专业化服务 - 外贸老黄