灰度变换与空间滤波 – 图像的“滑动按摩”:线性空间滤波咋回事儿💆

274次阅读

✨ 第一部分:线性空间滤波是啥?——给图像“做个 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):

  1. filtering_mode(滤波模式)
    • 'corr':相关运算(默认,模板正滑);
    • 'conv':卷积运算(模板倒滑)。
  2. boundary_options(边界填充):图像边缘没有足够的邻域,需要填充(课本图 2.16 的例子):
    • 'replicate':用边缘像素填充(推荐!避免边缘变黑,如图 2.16(c));
    • 'symmetric':镜像填充(边缘过渡自然,如图 2.16(d));
    • 'circular':循环填充(适合周期性图像,普通图会出问题,如图 2.16(e));
    • 默认:零填充(边缘变黑,如图 2.16(b))。
  3. 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、中心为正 = 锐化;

就像“按摩师的手”——不同的手法(模板)对应不同的放松效果,选对手法才能让图像“舒服又好看”!

正文完
 0