想象一位美食主播的厨房:她每天收来最新鲜的食材——有的水果沾着泥沙,有的青菜咬着虫眼,有的海鱼腥味冲天。她的处理手段五花八门:冲洗、削皮、腌制、调底味。这套流程看起来跟AI毫无关系,却和“滤波”在AI里的作用惊人地相似——把不想要的杂质去掉,把关键的风味留下来。 在AI的世界里,数据就是食材。图像有噪声,像镜头蒙了一层灰;音频有杂音,像锅底总有焦糊味;语音里有空调底噪,像厨房里嗡嗡的风扇声。滤波就是那套筛、洗、腌、调的工序:高斯滤波像温柔地过筛,中值滤波像用手挑出坏果,MFCC滤波器组像一套味觉标尺,CNN卷积则是一位会自己钻研菜谱的大厨,在训练中自动学会用什么“刀法”最出味。 这篇文章顺着这条厨房主线,从滤波的本质讲起,一路走到图像去噪、音频特征提取、CNN卷积,最后一头扎进特征工程的实战。读完你会发现:滤波不是被深度学习淘汰的“老手艺”,而是被内化进模型血管里的基本功。

岗位关联

对AI从业者而言,滤波是数据预处理与特征工程的地基——理解它,你才能打造更干净的数据、更有效的特征,也才能真正看懂CNN到底在学什么。

目录
  1. 可视化演示
  2. 滤波本质:汤底的筛子
  3. 图像去噪:温柔的冲洗与精准的挑拣
  4. 音频特征提取:调酒师的味觉标尺
  5. CNN卷积:会自学的大厨
  6. 滤波与特征工程:备菜决定上限
  7. 实战落地:火候与参数
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

Kernel 滤波去噪可视化:对比高斯滤波与中值滤波对含噪信号的去噪效果,调节参数观察滤波特性变化

滤波本质:汤底的筛子

老厨师熬高汤,大火烧开后汤面浮起一层杂质和血沫。他既不会把整锅汤倒掉,也不会把浮沫搅进汤里,而是拿起细网勺,精准地把浮沫一层层撇掉——留下清澈见底的汤底。这一撇,就是“滤”。

AI眼里的数据也是如此:摄像头采集的图像总带着传感器噪声,麦克风录下的语音夹着电流声和空调底噪,传感器传回的温度曲线有毛刺。这些噪声就像汤里的浮沫。滤波的本质,就是设计一把“筛子”:让有用的成分通过,把噪声拦在门外。在数学上,任何信号都可以看成许多不同频率的正弦波叠加而成——低频构成主体轮廓,高频负责细节和锐利。而噪声,恰恰喜欢躲在高频段里捣乱。

所以滤波器可以理解成一个“频率音量旋钮”:低通滤波让低频通过、调低高频,于是图像变平滑;高通滤波反过来,凸显边缘、压掉平坦区域;带通滤波只保留一段频率,比如人声所在的频段。最妙的是,在频域里做滤波只是一次简单的乘法——输入的频谱 X(ω) 乘上滤波器的响应曲线 H(ω),就得到输出频谱。一个世界级难题,瞬间化作逐点相乘。

回到厨房:低通滤波就像细网筛,只让细粉落下、拦住粗粒;高通滤波则反过来,专挑“棱角”。理解了筛子的方向和孔眼,就抓住了AI里一切滤波变体的共同灵魂——选择性地留住成分。

Y(ω)=H(ω)×X(ω)Y(\omega) = H(\omega) \times X(\omega)
这句公式的意思是:把信号按频率拆开,逐个频率问“筛子”一句——放行还是拦下。
  1. X(ω)——输入信号的频谱把随时间起伏的信号,拆解成不同频率成分的一张“清单”,好比把一锅汤按食材颗粒的大小分了类。
    X(ω)=F{x(t)}X(\omega) = \mathcal{F}\{x(t)\}
  2. H(ω)——滤波器的频率响应这是筛子自身的“性格”,标明它对每个频率是放行、衰减还是彻底拦下。
    H(ω)=Y(ω)X(ω)H(\omega) = \frac{Y(\omega)}{X(\omega)}
  3. 逐频率相乘输入频谱逐点乘上响应曲线,想要的频率被保留、噪声所在的频率被调低,输出就是滤好的频谱。
    Y(ω)=H(ω)×X(ω)Y(\omega) = H(\omega) \times X(\omega)

图像去噪:温柔的冲洗与精准的挑拣

洗叶菜不能拿钢丝球猛刷,得用流水轻轻冲洗,把泥沙带走又不伤菜叶;挑草莓则要睁大眼睛,一个个把发霉的果子拣出来扔掉。这两种厨房动作,恰好对应图像处理里最经典的两把“刀”。

图像噪声主要有两种脾气。高斯噪声像蒙尘——每个像素都被轻微污染,画面整体灰蒙蒙、颗粒感重;椒盐噪声像虫眼——只有零星几个像素变成纯黑或纯白,突兀又刺眼。前者要用“冲洗”的思路,后者要用“挑拣”的思路。

高斯滤波的做法是:用一个按钟形曲线分配权重的小窗口(高斯核)盖在像素上,对窗口内的像素做加权平均,用这个平均值替换中心像素。因为噪声是随机上下跳动的,平均之后正负抵消,噪声就淡了,而真实图像结构在局部变化缓慢,被保留了下来。公式里的 σ 控制钟形曲线的胖瘦——σ 越大,窗口边缘的权重越小,平滑力度越强。

与高斯滤波互补的是中值滤波:把窗口里的像素按大小排序,取中间那个值替换中心像素。椒盐噪声是极端值——排在最前或最后,永远轮不到它当中位数,于是被“投票”出局。洗菜要轻柔、挑果要精准,两种刀法匹配两种伤情,这就是去噪的第一课。

G(x,y)=12πσ2×exp⁡(−x2+y22σ2)G(x, y) = \frac{1}{2\pi\sigma^{2}} \times \exp\left(-\frac{x^{2} + y^{2}}{2\sigma^{2}}\right)
高斯核就是一张“权重分配表”:越靠近中心的邻居,发言权越大。
  1. x, y——到核中心的偏移这两个变量描述窗口里每个格子离中心有多远,越远对应的权重越小。
    (x,y)∈{−k,…,k}×{−k,…,k}(x, y) \in \{-k, \ldots, k\} \times \{-k, \ldots, k\}
  2. 指数项——钟形衰减距离的平方越大,指数越小,权重呈平滑的钟形下降,模拟“近朱者赤”的直觉。
    exp⁡(−x2+y22σ2)\exp\left(-\frac{x^{2} + y^{2}}{2\sigma^{2}}\right)
  3. 归一化系数——权重总和为 1前面的分数保证整个核的权重加起来等于 1,这样平滑过后图像的整体亮度不会漂移。
    12πσ2\frac{1}{2\pi\sigma^{2}}

音频特征提取:调酒师的味觉标尺

调酒师对甜度的感知不是线性的:一杯水里加第一勺糖,甜味骤增;再加第二勺,感觉没那么强烈了。人耳对频率的感知也一样——100Hz 到 200Hz 的变化我们听得一清二楚,而 5000Hz 到 5100Hz 的变化几乎无感。调酒师需要一把贴合舌头的味觉标尺,语音识别也需要一把贴合人耳的频率标尺。

这把标尺叫梅尔刻度(Mel Scale),是 MFCC(梅尔频率倒谱系数)特征的地基。语音识别和唤醒词的流程大致是:把语音切成 25ms 左右的小帧,做傅里叶变换得到频谱,然后让频谱通过一组梅尔滤波器组——几十个三角形滤波器,每个三角形锁定一个“听觉频带”,把这一带的能量汇总成一个数。几百上千个频谱点,就这样被压缩成几十个能量值,像把一桌食材浓缩成一张“风味清单”。

梅尔刻度的数学形式非常简洁:

有了这把味觉标尺,调酒师才能稳定复刻一杯鸡尾酒;语音模型也才能稳定复刻一个发音。滤波器组从原始频谱里拧出的那几十个数值,就够模型听出“你好”和“你好吗”的区别了。

Mel(f)=2595×log⁡10(1+f700)\mathrm{Mel}(f) = 2595 \times \log_{10}\left(1 + \frac{f}{700}\right)
它把人耳“低频敏感、高频迟钝”的非线性听觉,变成一条好用的换算公式。
  1. f——原始物理频率(Hz)这是麦克风真正捕捉到的频率,人耳实际听到的也是它。
    f∈[0,fs2]f \in [0, \frac{f_s}{2}]
  2. 1 + f/700——映射到感知域700Hz 是线性感知向对数感知过渡的参考点,低频段这个值变化平缓、高频段被压缩。
    (1+f700)\left(1 + \frac{f}{700}\right)
  3. log₁₀——对数压缩用对数把高频段的巨大跨度压扁,模拟人耳越往高频越“迟钝”的特性。
    log⁡10(1+f700)\log_{10}\left(1 + \frac{f}{700}\right)
  4. 2595——单位校准常数把压缩后的结果放大,让梅尔数值落在人耳习惯的刻度上,就像把“少许盐”翻译成“3 克”。
    2595=1000ln⁡(1+1000/700)2595 = \frac{1000}{\ln(1 + 1000/700)}

CNN卷积:会自学的大厨

传统滤波器的系数是专家手调出来的,像一本固定菜谱:糖放几克、盐放几克,写死不能改。而 CNN 的卷积核,是一位会自己钻研菜谱的大厨——它在无数次“试菜”(训练)中,自动调整每道菜的调味比例,直到客人口味(损失函数)满意为止。

卷积层的本质,就是一组可学习的滤波器。每个卷积核是一个小方块(比如 3×3),上面有 9 个可训练的数字;它像手电筒一样在图像上滑过,每停一处,就把覆盖的像素与核内的数字相乘再求和,得到一个响应值。如果核恰好“长得像”一条竖直边缘,那么遇到竖直边缘时响应值就会很大——这个核就成了边缘探测器。第一层卷积核学会检测边缘、颜色、纹理;深层的卷积核把浅层特征组合成眼睛、轮子、面孔等复杂部件。

许多人在 CNN 的第一课就会惊叹:这不就是滤波吗?没错。卷积核就是大厨的刀法,训练过程就是让刀法在反复试错中越磨越利。传统滤波器的系数是“死”的,而 CNN 让滤波器参数活了过来——这正是它强大的秘密。

H(x,y)=∑i=−kk∑j=−kkW(i,j)×X(x+i,y+j)+bH(x, y) = \sum_{i=-k}^{k}\sum_{j=-k}^{k} W(i, j) \times X(x+i, y+j) + b
卷积核的九个数字,就是大厨手里那把刀的九个“手感参数”——训练就是磨刀。
  1. W(i, j)——卷积核权重核内每个位置的可学习系数,九宫格里每个格子“看重”什么特征,都由它说了算。
    W(i,j),i,j∈[−k,k]W(i, j), \quad i, j \in [-k, k]
  2. X(x+i, y+j)——输入局部窗口输入图像里以 (x, y) 为中心的那一小块像素,是卷积核“手”覆盖住的区域。
    X(x+i,y+j)X(x+i, y+j)
  3. 双重求和——加权聚合把窗口内每个像素乘以对应权重再累加,局部信息被浓缩成一个响应值——这一步本质上就是“加权平均”式滤波。
    ∑i=−kk∑j=−kkW(i,j)×X(x+i,y+j)\sum_{i=-k}^{k}\sum_{j=-k}^{k} W(i, j) \times X(x+i, y+j)
  4. b——偏置给每个滤波器一个“口味基准”,响应值达不到这个基准就不激活,像大厨给每道菜设定的及格线。
    H(x,y)=加权和+bH(x, y) = \text{加权和} + b

滤波与特征工程:备菜决定上限

再厉害的大厨,面对发臭的鱼也做不出清蒸鲈鱼。食材处理得干不干净,直接决定了菜品的天花板。在 AI 里,特征工程就是备菜——而滤波,是备菜的第一道工序。

一条典型的 ML 预处理管线长这样:原始数据 → 去噪 → 对齐/归一化 → 特征提取 → 喂模型。滤波站在最前面,负责把数据里的脏东西先清一遍。去噪后的数据,信噪比更高,模型学到的特征更稳定,收敛更快,泛化也更好。所谓信噪比(SNR),就是衡量“菜量”和“沙子”比例的指标:

滤波在特征工程里还有第二重身份——数据增强。训练时故意给图像加高斯模糊、随机噪声,或者随机调整锐度,相当于让模型“尝遍各种火候的菜”,面对真实世界的脏数据时才不会慌。备菜不只是洗干净,有时还要故意“做旧”,让模型见过世面。

SNR=10×log⁡10(PsignalPnoise)\mathrm{SNR} = 10 \times \log_{10}\left(\frac{P_{\text{signal}}}{P_{\text{noise}}}\right)
信噪比每提高 3dB,相当于噪声功率减半——备菜更干净,模型更有底气。
  1. P_signal / P_noise——信号与噪声的功率之比分子是有用信息的“音量”,分母是干扰的“音量”,比值越大说明数据越干净。
    PsignalPnoise\frac{P_{\text{signal}}}{P_{\text{noise}}}
  2. log₁₀——对数压缩功率比值动不动相差几千倍,用对数拉回可读的数字范围,像用“级”而不是“倍”来描述地震。
    log⁡10(PsignalPnoise)\log_{10}\left(\frac{P_{\text{signal}}}{P_{\text{noise}}}\right)
  3. ×10——换算成 dB 单位工程上习惯用分贝说话,乘 10 之后信噪比提升 3dB 就意味着噪声减半,直观好记。
    10×log⁡10(⋯ )10 \times \log_{10}(\cdots)

实战落地:火候与参数

菜谱上写着“盐少许”“中火慢炖”,但真正动手时靠的全是经验。滤波落地也一样:公式是死的,参数是活的。

第一个参数是核大小。 3×3 的核只照顾最近的 8 个邻居,细节保留好但去噪弱;15×15 的核覆盖面大,噪声去得干净,边缘也被糊成一片。经验上,图像去噪常用 3×3 到 7×7;σ 通常取 0.5 到 2 之间,σ 越大,越“佛系”,整个画面都变得朦胧。

第二个选择是滤波器类型。 看到椒盐噪声(黑白斑点)用中值滤波,看到高斯噪声(均匀灰蒙)用高斯滤波。中值滤波的数学操作简单但威力精准:

第三是工程细节。 滤波是滑动窗口操作,计算量随核大小平方增长,大图要用快速算法或降采样;边界像素没有完整邻居,常用“边缘复制”填充。工具方面,图像滤波用 scipy.ndimage 和 OpenCV,音频滤波器组用 librosa,卷积层则直接交给 PyTorch/TensorFlow。火候靠尝,参数靠调——多跑几组对比实验,比背任何公式都管用。

y(i,j)=median{x(i+m,j+n)∣m,n∈[−k,k]}y(i, j) = \mathrm{median}\left\{ x(i+m, j+n) \mid m, n \in [-k, k] \right\}
一句话:把窗口里的像素排序,取中间那个顶替中心——极端值再嚣张也当不了“中位数”。
  1. (2k+1)×(2k+1) 窗口以 (i, j) 为中心框出一个方形邻域,k=1 就是 3×3,k=3 就是 7×7。
    m,n∈[−k,k]m, n \in [-k, k]
  2. median——中位数把窗口内所有像素按大小排队,取队列正中间的值——除非噪声点超过窗口的一半,否则它永远排不到中间。
    median{x(i+m,j+n)}\mathrm{median}\{x(i+m, j+n)\}
  3. 替换中心像素用这个“民意代表”替代原来那个可疑的中心像素,异常点就被悄无声息地淘汰了。
    y(i,j)=median(窗口)y(i, j) = \text{median}(\text{窗口})

AI 应用场景

医学影像去噪预处理

阶段:数据预处理

解决的问题:CT、MRI 影像在采集时受设备电子噪声和患者轻微移动影响,产生椒盐样伪影和高斯噪声。直接送入分割模型,会让病灶边缘被噪声干扰,模型误判率上升。先用中值滤波去除孤立伪影、再用高斯滤波平滑,能显著提升影像质量,相当于把食材先洗好再下锅。

具体案例:某医疗 AI 团队在肺结节检测项目中,对 2 万张胸部 CT 切片先做 3×3 中值滤波,再用 σ=1.0 的高斯滤波去噪,肺部结节分割的 Dice 系数提升了约 4%,假阳性率下降 15%。

语音助手的 MFCC 特征提取

阶段:特征提取

解决的问题:原始语音波形动辄每秒 16000 个采样点,直接输入模型维度爆炸且噪声敏感。MFCC 通过梅尔滤波器组把频谱压缩成 13~40 维特征,模拟人耳听觉,让“你好”在嘈杂客厅和安静书房里听起来是同一个词。

具体案例:智能音箱的唤醒词检测管线,每 25ms 一帧提取 40 维 MFCC 特征(含一阶差分),喂给一个小型 CNN 分类器。滤波器组的存在让模型在电视声、厨房噪音背景下仍能保持 95% 以上的唤醒准确率。

工业质检中的可学习滤波

阶段:特征提取与模型设计

解决的问题:PCB 板缺陷检测中,传统固定滤波器无法适应不同光照、不同板材的纹理差异。CNN 的卷积层通过训练自动学习到类似 Sobel 边缘检测、Gabor 纹理滤波的核,相当于给每条产线配了一位会自我调整刀法的大厨。

具体案例:某电子厂部署的缺陷检测模型,第一层 32 个 3×3 卷积核在训练后可视化,发现其中 6 个核自动演化成水平/垂直/对角边缘检测器,与经典高通滤波器的形状高度相似——滤波思想被模型“内化”了。

Python 演示

python75 行
import numpy as np  def gaussian_kernel(size, sigma):    """生成高斯卷积核(二维钟形权重)"""    axis = np.linspace(-(size // 2), size // 2, size)    x, y = np.meshgrid(axis, axis)    kernel = np.exp(-(x ** 2 + y ** 2) / (2 * sigma ** 2))    return kernel / kernel.sum()  def correlate(image, kernel):    """用卷积核扫描图像:局部加权求和"""    k = kernel.shape[0]    pad = k // 2    padded = np.pad(image, pad, mode='edge')    out = np.zeros_like(image)    for i in range(image.shape[0]):        for j in range(image.shape[1]):            out[i, j] = np.sum(padded[i:i + k, j:j + k] * kernel)    return out  def median_filter(image, size):    """中值滤波:窗口排序后取中位数,专克椒盐噪声"""    pad = size // 2    padded = np.pad(image, pad, mode='edge')    out = np.zeros_like(image)    for i in range(image.shape[0]):        for j in range(image.shape[1]):            out[i, j] = np.median(padded[i:i + size, j:j + size])    return out  def snr_db(clean, estimate):    """信噪比(dB):信号功率与误差功率之比"""    return 10 * np.log10(np.sum(clean ** 2) / np.sum((estimate - clean) ** 2) + 1e-9)  def mel_filter_bank(n_filters, n_fft, sr):    """梅尔滤波器组:把频谱压缩成模拟人耳的几十个能量值"""    mel_max = 2595 * np.log10(1 + (sr / 2) / 700.0)    mels = np.linspace(0, mel_max, n_filters + 2)    hz = 700 * (10 ** (mels / 2595.0) - 1)    bins = np.floor((n_fft + 1) * hz / sr).astype(int)    bank = np.zeros((n_filters, n_fft // 2 + 1))    for i in range(1, n_filters + 1):        left, center, right = bins[i - 1], bins[i], bins[i + 1]        for k in range(left, center):            bank[i - 1, k] = (k - left) / (center - left)        for k in range(center, right):            bank[i - 1, k] = (right - k) / (right - center)    return bank  if __name__ == "__main__":    rng = np.random.default_rng(42)    clean = np.zeros((60, 60))    clean[18:42, 20:45] = 1.0     noisy = clean + 0.3 * rng.standard_normal(clean.shape)    gauss_out = correlate(noisy, gaussian_kernel(5, 1.5))    print("高斯去噪前 SNR: %.2f dB -> 后: %.2f dB" % (        snr_db(clean, noisy), snr_db(clean, gauss_out)))     sp = clean.copy()    mask = rng.random(clean.shape) < 0.3    sp[mask] = rng.choice([0.0, 1.0], size=mask.sum())    med_out = median_filter(sp, 3)    print("中值去噪前 SNR: %.2f dB -> 后: %.2f dB" % (        snr_db(clean, sp), snr_db(clean, med_out)))     bank = mel_filter_bank(26, 512, 16000)    print("梅尔滤波器组形状:", bank.shape,          "(26个三角滤波器覆盖频谱)")
目的:用纯 NumPy 实现高斯滤波、中值滤波和梅尔滤波器组,直观展示滤波在 AI 预处理与特征提取中的实际效果。
  1. kernel = np.exp(-(x ** 2 + y ** 2) / (2 * sigma ** 2))这一步直接翻译了高斯公式:距离中心越远,权重按钟形曲线衰减。
  2. return kernel / kernel.sum()归一化让所有权重加起来等于 1,保证滤波后图像亮度不漂移。
  3. out[i, j] = np.sum(padded[i:i + k, j:j + k] * kernel)卷积核滑过每个像素,做局部加权求和——这就是“滤波窗口扫过食材”的数学本质。
  4. out[i, j] = np.median(padded[i:i + size, j:j + size])中值滤波把所有邻居排序取中间值,极端黑白点永远当不上中位数。
  5. 10 * np.log10(np.sum(clean ** 2) / np.sum((estimate - clean) ** 2) + 1e-9)用 dB 量化“菜量/沙子”比,滤波前后的 SNR 提升一目了然。
  6. bins = np.floor((n_fft + 1) * hz / sr).astype(int)把梅尔刻度上的频率点换算回 FFT 频点下标,是构建三角滤波器组的关键一步。

常见误区

误区我去噪时把高斯核调到 15×15,画面超级平滑,效果看着很明显,核越大肯定越好吧?

正解核越大,平滑越强,细节和边缘也一起被抹平了。这就像洗菜用高压水枪——泥沙是冲掉了,菜叶也烂了。去噪的目标是“去噪保边”,核的尺寸要匹配噪声的尺度,图像去噪一般 3×3 到 7×7 就够,再大就要用双边滤波等保边手段。判断效果不能只看“平不平”,要看信噪比和边缘保留程度。

为何常见:平滑带来的“变干净”错觉太直观,让人忽略了信息保真同样是目标,一叶障目。

误区既然中值滤波能把椒盐噪声去得干干净净,那所有图像噪声都用它处理不就行了?

正解中值滤波对高斯噪声几乎无效。高斯噪声是每个像素都轻微污染,不是个别极端点,把窗口排序取中值,结果跟没滤差不多,还可能产生块状伪影。好比挑烂苹果能救一筐好果,但如果每颗苹果都有轻微碰伤,靠一颗颗挑是没用的,得整筐温柔冲洗(高斯滤波)。选滤波器的第一原则是:先看清噪声的“伤害模式”。

为何常见:看到一个成功案例就急着推广到所有场景,没意识到不同噪声的统计特性天差地别。

误区CNN 能自己学习特征,直接把带噪的原始图喂进去就行,省掉预处理这步多省事。

正解噪声会白耗模型的拟合能力——它得先学会“去噪”,再学“识别”,在小数据集上很容易过拟合到噪声上。好比大厨再厉害,食材发臭也做不出好菜。预处理把数据弄干净,模型才能把算力花在真正的特征上。当然,数据增强阶段故意加噪(随机滤波)是另一回事——那是让模型见见世面、提高鲁棒性。

为何常见:把“端到端学习”误读为“不需要任何工程手段”,混淆了模型的学习能力与数据质量之间的分工。

误区Mel 公式里的 2595 和 700 是科学家测出来的物理常数,永远不会变,任何语音任务都用这一套。

正解梅尔刻度是经验公式,是对人耳听觉的近似拟合,不同研究者和语音库会给出略有差异的版本。700Hz 是“线性感知到对数感知”的过渡参考点,2595 只是把对数结果缩放到合适单位的系数。这更像菜谱里“盐少许”的经验标定,而不是万有引力常数。理解了这一点,才会明白为什么采样率变了、滤波器组就要重新设计。

为何常见:公式里的数字看起来精确,就误以为有物理必然性,忽略了它本质是拟合人类感知的工程近似。

误区滤波是上一代信号处理的东西,现在深度学习时代了,谁还用得着它?

正解滤波思想在 AI 里无处不在:MFCC 依然是语音识别的主流特征,CNN 的卷积核本质就是可学习滤波,频域数据增强也大量借用滤波视角。它没有被淘汰,而是被“内化”进了模型结构里。好比筛子从手工竹编升级成全自动筛选机——工具进化了,筛选的本质还在。放弃滤波思维,等于放弃了理解模型内部行为的钥匙。

为何常见:把“传统”等同于“过时”,没看到技术是演化延续的,而不是推倒重来的。

面试题

Q1. 高斯滤波的核心思想是什么?

单选题 · easy

  • A.取邻域像素的最大值
  • B.按高斯权重对邻域像素加权平均← 正确答案
  • C.取邻域像素的中位数
  • D.随机替换中心像素

答案:B。高斯滤波用一个钟形权重核,对窗口内像素做加权平均,距离中心越近权重越大。取最大值(A)是膨胀操作,取中位数(C)是中值滤波,随机替换(D)会引入新噪声。

Q2. 下面哪个滤波器最适合去除椒盐噪声?

单选题 · easy

  • A.均值滤波
  • B.高斯滤波
  • C.中值滤波← 正确答案
  • D.高通滤波

答案:C。椒盐噪声是极端的黑白点,中值滤波按大小排序后取中间值,极端值永远排不到中间,所以能干净利落地去掉它。均值和高斯会被极端点“带偏”产生拖影,高通滤波反而会放大噪声点。

Q3. 中值滤波的具体做法是?

单选题 · easy

  • A.求窗口内像素的平均值
  • B.用窗口内像素的中位数替换中心像素← 正确答案
  • C.求窗口内像素的方差
  • D.用窗口内最大像素替换中心像素

答案:B。中值滤波把窗口内所有像素排序,取正中间的值替换中心像素,就像“民意投票”选出代表。取均值(A)是均值滤波,方差(C)不产生输出图像,取最大(D)是膨胀操作。

Q4. MFCC 中梅尔滤波器组的主要作用是什么?

单选题 · mid

  • A.模拟人耳对频率的非线性感知,压缩频谱← 正确答案
  • B.去除音频中的混响
  • C.提高音频的采样率
  • D.把单声道转成立体声

答案:A。梅尔滤波器组由一串三角滤波器组成,每个锁定一个听觉频带并汇总能量,把几百上千个频谱点压缩成几十个特征值,本质是模拟人耳“低频敏感、高频迟钝”的非线性。它与混响、采样率、声道数无关。

Q5. 关于 CNN 的卷积核,下列说法正确的有?

多选题 · mid

  • A.卷积核参数是在训练过程中学习出来的← 正确答案
  • B.不同的卷积核可以检测不同的特征← 正确答案
  • C.卷积核数量越少模型效果一定越好
  • D.卷积核本质上是可学习的滤波器← 正确答案

答案:ABD。CNN 卷积核的权重通过反向传播自动更新,不同核会演化为边缘、纹理等不同特征检测器,与“可学习滤波”是同一件事。选项 C 错误——核太少会限制模型表达能力,容易欠拟合,需要权衡而非一味求少。

Q6. 梅尔公式 Mel(f) = 2595 × log₁₀(1 + f/700) 中取对数的主要目的是?

单选题 · mid

  • A.把线性频率压缩成模拟人耳非线性感知的刻度← 正确答案
  • B.让计算速度更快
  • C.消除音频中的直流分量
  • D.增强高频噪声

答案:A。人耳对频率的感知是非线性的,低频变化敏感、高频变化迟钝,对数正好把高频段的巨大跨度“压扁”,模拟这种听觉特性。它与计算速度、直流分量、噪声增强都没有关系。

Q7. 高斯滤波中 σ(标准差)越大,图像会怎样?

单选题 · mid

  • A.边缘越锐利
  • B.平滑越强、细节越模糊← 正确答案
  • C.噪声越明显
  • D.图像亮度变高

答案:B。σ 越大,高斯核的钟形曲线越“胖”,远处像素的权重相对增大,平滑范围更广,细节和边缘随之变模糊。σ 不直接影响噪声强度,也不改变亮度,更不可能让边缘锐利。

Q8. 频域滤波公式 Y(ω) = H(ω) × X(ω) 中,H(ω) 表示什么?

单选题 · hard

  • A.输入信号的频谱
  • B.滤波器的频率响应,决定各频率的保留或衰减← 正确答案
  • C.噪声的功率谱
  • D.采样频率

答案:B。H(ω) 是滤波器自身的频率响应曲线,刻画它对每个频率成分的态度——放行、衰减还是拦下。输入频谱是 X(ω),输出频谱是 Y(ω),采样频率不在公式里。把它想象成“筛子的孔眼分布”就好理解了。

Q9. 以下哪些属于滤波在 AI 中的实际应用?

多选题 · hard

  • A.图像去噪预处理← 正确答案
  • B.MFCC 音频特征提取← 正确答案
  • C.CNN 卷积特征学习← 正确答案
  • D.数据库索引优化

答案:ABC。图像去噪是滤波最直接的应用;MFCC 用梅尔滤波器组压缩频谱属于典型的滤波式特征提取;CNN 卷积核本质是可学习滤波。数据库索引优化是工程问题,与信号滤波无关。

Q10. 采样率 16kHz、FFT 点数 512 时,梅尔滤波器组矩阵的列数(每个滤波器的频点个数)是多少?

单选题 · extreme

  • A.257← 正确答案
  • B.512
  • C.1024
  • D.8000

答案:A。FFT 产生对称频谱,实数信号只需保留前一半加直流,即 N/2 + 1 = 257 个频点,因此梅尔滤波器组每行的长度是 257,与代码中 bank.shape 的结果一致。512 是 FFT 总点数,1024 是双倍补零后的点数,8000 是奈奎斯特频率值,都不是矩阵列数。