✨ 第一部分:线性空间滤波是啥?——给图像“做个 SPA”
关键字:线性空间滤波、滤波模板、邻域运算
🧠 初学者先懂:你有没有给手机屏幕“擦灰”?线性空间滤波就像“用一块布(滤波模板)在图像上滑动”——布的每个位置(模板元素)对应图像的一个像素,通过“相乘再相加”的操作,给图像做“平滑 / 锐化”的“按摩”。
内容详解:
📖 核心原理:拿一个m×n 的滤波模板 w ,从图像左上角滑到右下角,每个位置都做“模板元素×对应像素,再求和”,结果就是该位置的新像素值(图 2.13 的 3×3 模板就是例子)。
🤖 类比理解:就像“给蛋糕撒糖霜”——糖霜模板(比如中间多、周围少)滑过蛋糕(图像),每个位置的糖霜量(新像素)是模板对应位置的糖量×蛋糕区域的甜度(原像素)之和。
💻 直观感受:用“全 1 模板”滑动图像,结果会让图像变模糊(平滑滤波);用“中间 1、周围 - 1 模板”滑动,结果会让图像细节更突出(锐化滤波)!
👐 第二部分:相关 vs 卷积——模板“正滑”还是“倒滑”?
关键字:相关运算、卷积运算、模板旋转 180°
🧠 初学者再懂:滤波的“滑动方式”分两种——相关(模板正着滑)和 卷积(模板倒着滑),差别就是模板是否旋转 180°。
内容详解:
📖 公式对比(以二维为例):
- 相关运算:
w(x,y)☆f(x,y) = ΣΣ w(s,t)·f(x+s, y+t)(模板直接和邻域像素相乘求和); - 卷积运算:
w(x,y)★f(x,y) = ΣΣ w(s,t)·f(x-s, y-t)(模板先旋转 180°,再和邻域像素相乘求和)。
🤖 类比理解:相关是“用印章正盖”,卷积是“把印章反过来盖”——如果模板是 中心对称的(比如全 1 模板、十字模板),正盖和反盖结果一样,相关和卷积就没差别!
💻 看课本图 2.14:一维情况下,相关的结果(图 2.14(g))和卷积的结果(图 2.14(o)),因为模板旋转了 180°,数值顺序反过来了。
🎯 第三部分:怎么用 imfilter 实现滤波?——代码 + 参数手把手
关键字:imfilter、边界填充、size 选项
🧠 初学者最后懂:MATLAB 的 imfilter 是线性滤波的“万能工具”,核心是选对 滤波模式、边界填充、输出尺寸 这三个参数。
内容详解:
📖 imfilter语法:
g = imfilter(f, w, filtering_mode, boundary_options, size_options);
📖 关键参数讲解(结合课本例 2.8):
- filtering_mode(滤波模式):
'corr':相关运算(默认,模板正滑);'conv':卷积运算(模板倒滑)。
- boundary_options(边界填充):图像边缘没有足够的邻域,需要填充(课本图 2.16 的例子):
'replicate':用边缘像素填充(推荐!避免边缘变黑,如图 2.16(c));'symmetric':镜像填充(边缘过渡自然,如图 2.16(d));'circular':循环填充(适合周期性图像,普通图会出问题,如图 2.16(e));- 默认:零填充(边缘变黑,如图 2.16(b))。
- size_options(输出尺寸):
'same':输出和输入图像一样大(默认,只保留模板中心在图像内的结果);'full':输出更大(包含模板部分在图像外的结果)。
💻 实战代码(平滑滤波,对应课本例 2.8):
% 1. 读入原图(double 类)f = imread('纹理图.jpg'); % 替换成你的图像路径
f = im2double(f);
% 2. 定义 31×31 的全 1 滤波模板(平滑用)w = ones(31);
% 3. 用 replicate 填充做相关滤波(避免边缘变黑)g = imfilter(f, w, 'corr', 'replicate');
% 4. 显示结果
imshow(g); title('平滑滤波后的图');
☁️ 注意:如果模板元素和大于 1,滤波后像素值会超过 0 - 1 范围,需要用 mat2gray 归一化,否则 uint8 图会“截掉”超出部分(如图 2.16(f)的失真)!
🌟 第四部分:线性滤波咋用?——现实场景的“按摩套餐”
关键字:平滑滤波、锐化滤波、工业检测
🧠 初学者懂应用:线性滤波是“图像后期的基础按摩”,不同模板对应不同效果:
内容详解:
1. 平滑滤波(全 1 模板、高斯模板):用来“去噪”——比如手机拍照的“夜景模式”,用平滑滤波把噪点磨平;
2. 锐化滤波(拉普拉斯模板):用来“增强细节”——比如医学影像的“边缘增强”,用锐化滤波让病灶轮廓更清晰;
3. 边缘检测(sobel 模板):用来“找边界”——工业检测中,用 sobel 模板找零件的边缘,判断是否有裂纹!
🎯 总结:线性滤波的“核心要点”
→ 本质是“模板滑动 + 乘加运算”,相关和卷积的差别是模板是否旋转 180°;
→ imfilter是工具,重点选对“边界填充方式”(优先'replicate');
→ 模板决定效果:全 1 = 平滑,边缘为 -1、中心为正 = 锐化;
就像“按摩师的手”——不同的手法(模板)对应不同的放松效果,选对手法才能让图像“舒服又好看”!