✨ 第一部分:线性标准滤波器——fspecial 帮你“预制按摩头”
关键字:fspecial、线性标准滤波器、拉普拉斯滤波
🧠 初学者先懂:不用自己写滤波模板啦!MATLAB 的 fspecial 是“滤波器预制工厂”——内置了平均、高斯、拉普拉斯等常用模板,直接调用就能生成,省事儿又标准。
内容详解:
📖 fspecial语法:w = fspecial('type', parameters),核心是选对“滤波器类型”:
'average':平均滤波器(平滑去噪,比如 3×3 全 1 模板);'gaussian':高斯滤波器(更柔和的平滑,适合保留边缘的去噪);'laplacian':拉普拉斯滤波器(锐化图像,增强细节)。
🤖 重点案例:拉普拉斯滤波(课本例 2.10,月球图像锐化)
% 1. 生成拉普拉斯模板(alpha= 0 对应中心 -4、周围 1 的模板)w = fspecial('laplacian', 0);
% 2. 读入并转换为浮点型(避免 uint8 截断负数)f = imread('月球图.jpg');
f2 = tofloat(f); % 转成浮点型(支持正负值)% 3. 用 imfilter 做滤波(replicate 填充边缘)g2 = imfilter(f2, w, 'replicate');
% 4. 原图像减去滤波结果(锐化公式:g = f - c*∇²f)g = f2 - g2;
% 5. 显示锐化后的图
imshow(g); title('拉普拉斯锐化后的月球图');
💡 为啥要减?拉普拉斯是“二阶导数”,能突出边缘(对应滤波后的正负值),原图像减去它,就能让边缘更清晰(图 2.17(d)比原图清晰多啦)!
☁️ 扩展:中心系数改成 -8(周围 1),锐化效果会更强(图 2.18(c))——适合更模糊的图像!
👐 第二部分:非线性标准滤波器——ordfilt2/medfilt2 的“排序魔法”
关键字:ordfilt2、medfilt2、中值滤波、排序滤波器
🧠 初学者再懂:非线性滤波不用自己写匿名函数啦!ordfilt2是“排序滤波器”,medfilt2是它的“中值滤波专用版”——专门对付“椒盐噪声”(图像上的白点黑点)。
内容详解:
📖 ordfilt2(排序滤波):按邻域像素的排序结果替换中心像素
- 最小值滤波:
g = ordfilt2(f, 1, ones(3,3))(取邻域第 1 小的像素); - 最大值滤波:
g = ordfilt2(f, 9, ones(3,3))(取邻域第 9 大的像素); - 中值滤波:
g = ordfilt2(f, 5, ones(3,3))(取邻域第 5 个(中间)的像素)。
📖 medfilt2(中值滤波专用):直接实现中值滤波(去椒盐噪声神器)
% 1. 给图像加椒盐噪声(白点 + 黑点)fn = imnoise(f, 'salt & pepper', 0.2); % 20% 的噪声
% 2. 中值滤波(3×3 邻域,symmetric 填充边缘)gm = medfilt2(fn, [3 3], 'symmetric');
% 3. 显示结果
imshow(gm); title('中值滤波去椒盐噪声后的图');
🤖 为啥好用?椒盐噪声是“极端值”(0 或 255),中值滤波取邻域中间值,能直接把噪声点替换成正常像素——图 2.19(c)的电路板图,噪声几乎全没了!
💡 技巧:用 'symmetric' 填充边缘,能避免滤波后边缘出现黑点(图 2.19(d)比默认填充的边缘更干净)!
🎯 第三部分:啥时候用啥滤波器?——场景“按摩仪”选型指南
关键字:场景匹配、平滑、锐化、去噪
🧠 初学者懂应用:不同滤波器对应不同“图像问题”,选对工具效率翻倍:
内容详解:
1. 图像模糊→锐化:用fspecial('laplacian')(拉普拉斯滤波),适合月球图、老照片;
2. 图像有噪点→平滑:高斯噪声用fspecial('gaussian'),椒盐噪声用medfilt2;
3. 突出亮区域→最大值滤波:用ordfilt2(f, 9, ones(3,3)),适合医学影像的高亮病灶;
4. 突出暗区域→最小值滤波:用ordfilt2(f, 1, ones(3,3)),适合工业检测的暗裂纹。
🌟 总结:标准滤波器的“核心优势”
→ 不用自己写模板 / 函数:fspecial/medfilt2内置了常用滤波器,开箱即用;
→ 参数可调:拉普拉斯的 alpha、中值滤波的邻域大小,能适配不同图像;
→ 效果稳定:是行业通用的标准方法,不会出现“自定义函数的 bug”;
就像“超市里的现成调料包”——不用自己配,拿起来就能做菜,味道还靠谱!