✨ 第一部分:线性标准滤波器——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”; 就像“超市里的现成调料包”——不用自己配,拿起来就能做菜,味道还靠谱!