一、定义
点运算:对像素点的单独计算,不涉及到领域像素
局部运算:计算像素点时涉及到领域像素
常见的点运算:膨胀、腐蚀、开、闭
常见的局部运算:均值滤波器、高斯滤波器、中值滤波器、锐化滤波器——均为空间滤波器
二、原理介绍
膨胀

- a为待膨胀图像 b为膨胀结构元 (c为膨胀结构元的映像) d阴影部分为膨胀后的图像
- 腐蚀结构元原点 对准 某个图像的像素,当该像素为1,该像素对应的结构元位置被置为1
- 处理后的效果为原图像的目标被放大,填补目标的空洞
腐蚀

- a为待腐蚀图像 b为腐蚀结构元 c阴影部分为腐蚀后的图像
- 腐蚀结构元原点 对准 某个图像的像素,当该像素对应的结构元位置有不为1的,该像素被置为0
- 处理后的效果为原图像的目标被缩小,消除小而无意义的像素
开运算
- 先腐蚀后膨胀
- 处理后的效果为:去除比结构元小的像素
闭运算
- 先膨胀后腐蚀
- 处理后的效果为:填充比结构元小的像素
均值滤波器

步骤:
- 将卷积核内的像素进行相加
- 将相加的和 除以 卷积核的大小
- 使用均值填充卷积核的中心元素
效果:
- 平滑图像
- 减少噪声——特别是高斯噪声
- 模糊边缘
- 产生振铃现象——高斯卷积核可以解决
高斯滤波器

步骤:
- 确认卷积核大小
- 确认卷积核方差
- 计算卷积核每个位置的权重
- 对权重值进行归一化

效果:
- 平滑图像
- 减少噪声
- 不会出现振铃现象
中值滤波器

步骤:
- 对卷积核内像素进行排序
- 取排序后的中值
- 使用中值代替卷积核的中心像素
效果:
- 减少噪声——特别是椒盐噪声
- 较好保留锐化部分和图像细节
锐化滤波器

步骤:
- 提高中心权重
- 计算局部均值
- 利用中心减去局部均值,凸显中心
效果:
- 图像锐化
- 突出细节
三、基础实验
一、matlab点运算函数介绍
%结构元的建立
strel = strel('arbitrary',eye(5))
创建一个对角线为1的,大小为5*5的结构元
其他类型的结构元创建 参考strel函数
%腐蚀
imerode(I,strel)
I为待处理图像,strel为结构元
%膨胀
imdilate(I,strel)
I为待处理图像,strel为结构元
%开运算——先腐蚀后膨胀
imdilate(imerode(I,strel),strel)
%闭运算——先膨胀后腐蚀
imdilate(imerode(I,strel),strel)
二、点运算实现
% 1、图片读取与显示
circbw=imread('circbw.tif');
subplot(2,4,1),imshow(circbw),title('原图像');
% 2、图片的腐蚀
template=strel('arbitrary',eye(5));
circbw_imerode=imerode(circbw,template);
subplot(2,4,5),imshow(circbw_imerode),title('腐蚀后');
% 3、图片的膨胀
template=strel('arbitrary',eye(5));
circbw_imdilate=imdilate(circbw,template);
subplot(2,4,6),imshow(circbw_imdilate),title('膨胀后');
% 4、图片的开运算——先腐蚀后膨胀
template=strel('arbitrary',eye(5));
circbw_imdilate=imdilate(imerode(circbw,template),template);
subplot(2,4,7),imshow(circbw_imdilate),title('开运算后');
% 5、图片的闭运算——先膨胀后腐蚀
template=strel('arbitrary',eye(5));
circbw_imerode=imerode(imdilate(circbw,template),template);
subplot(2,4,8),imshow(circbw_imerode),title('闭运算后');

三、matlab局部运算函数介绍
%选取指定滤波器
H = fspecial(TYPE)
TYPE为滤波的类型,可取
'average' 'disk' 'gaussian' 'laplacian' 'log' 'motion' 'prewitt' 'sobel'
%使用指定滤波器进行卷积
Y = filter2(B,X)
Y = filter2(B,X,SHAPE)
B为滤波器,X为待处理图像
SHAPE为输出图像大小,可取'same' 'valid' 'full'
%均值滤波
filter2(fspecial('average',3),lena_noise)/255;
%高斯滤波
filter2(fspecial('gaussian',3),lena_noise)/255;
%中值滤波
B = medfilt2(A,[M N])
B = medfilt2(A)
[M,N]为指定滤波大小
四、局部运算实现
(图像平滑滤波器)
% 1、图片读取与显示
lena=imread('lena.png');
subplot(2,3,1),imshow(lena),title('原图像');
% 2、均值滤波
average_lena=filter2(fspecial('average',3),lena)/255;
subplot(2,3,4),imshow(average_lena),title('均值滤波');
% 3、高斯滤波
gaussian_lena=filter2(fspecial('gaussian',3),lena)/255;
subplot(2,3,5),imshow(gaussian_lena),title('高斯滤波');
% 4、中值滤波
median_lena=medfilt2(lena);
subplot(2,3,6),imshow(median_lena),title('中值滤波');
(图像锐化滤波器)
% 1、图片读取与显示
lena=imread('lena.png');
subplot(1,2,1),imshow(lena),title('原图像');
% 2、图片锐化
template=[-1/9,-1/9,-1/9;-1/9,17/9,-1/9;-1/9,-1/9,-1/9;];
result=filter2(template,lena)/255;
subplot(1,2,2),imshow(result),title('图片锐化后');

四、综合实验——中值与均值的去噪能力
一、matlab噪声处理函数介绍
%高斯噪声
J = imnoise(I,'gaussian')
J = imnoise(I,'gaussian',M,V)
M为均值默认0,V为方差默认0.01
%泊松噪声
J = imnoise(I,'poisson')
%椒盐噪声
J = imnoise(I,'salt & pepper')
J = imnoise(I,'salt & pepper',D)
D为噪声强度默认0.05,即噪声像素之和
二、高斯噪声下三种滤波器的去噪效果
- 代码
% 1、图片读取与显示
lena=imread('lena.png');
subplot(2,3,1),imshow(lena),title('原图像');
lena_noise=imnoise(lena,'gaussian');
subplot(2,3,2),imshow(lena_noise),title('加高斯噪声后');
% 2、均值滤波
average_lena=filter2(fspecial('average',3),lena_noise)/255;
subplot(2,3,4),imshow(average_lena),title('均值滤波');
% 3、高斯滤波
gaussian_lena=filter2(fspecial('gaussian',3),lena_noise)/255;
subplot(2,3,5),imshow(gaussian_lena),title('高斯滤波');
% 4、中值滤波
median_lena=medfilt2(lena_noise);
subplot(2,3,6),imshow(median_lena),title('中值滤波');
- 结果

- 结论
去噪效果:均值滤波>中值滤波>高斯滤波
三、椒盐噪声下三种滤波器的去噪效果
- 代码
% 1、图片读取与显示
lena=imread('lena.png');
subplot(2,3,1),imshow(lena),title('原图像');
lena_noise=imnoise(lena,'salt & pepper');
subplot(2,3,2),imshow(lena_noise),title('加椒盐噪声后');
% 2、均值滤波
average_lena=filter2(fspecial('average',3),lena_noise)/255;
subplot(2,3,4),imshow(average_lena),title('均值滤波');
% 3、高斯滤波
gaussian_lena=filter2(fspecial('gaussian',3),lena_noise)/255;
subplot(2,3,5),imshow(gaussian_lena),title('高斯滤波');
% 4、中值滤波
median_lena=medfilt2(lena_noise);
subplot(2,3,6),imshow(median_lena),title('中值滤波');
-
结果

-
结论
去噪效果:中值滤波>均值滤波>高斯滤波
五、实验讨论与总结
- 为什么均值滤波器处理高斯噪声优于中值滤波器?
因为高斯噪声出现是一定的,幅值大小均值为0,通过均值滤波可以很好的抵消,但是中值滤波器选取的中值是噪声,无法选取未被污染的像素进行取代。 - 为什么中值滤波器处理椒盐噪声优于均值滤波器?
因为椒盐噪声幅值大小是固定的,而出现是随机的,通过中值滤波器可以找到干净点去取代污染点,而因为其均值不为0,所以均值滤波器无法很好得去除。 - 为什么在两种噪声下高斯滤波表现得不好?
因为高斯滤波器的出发点是中间值权重大,而周围点权重逐渐减小,如果像素中心点是噪点,那么它的权重被放大了,反而无法很好地去除噪声。 - 点运算与局部运算适用场景?
| 点运算 | 备注 |
|---|---|
| 腐蚀 | 原图像目标变小,消除小而无意义的像素 |
| 膨胀 | 原图像目标变大,填补目标的空洞 |
| 开运算 | 去除比结构元小的像素 |
| 闭运算 | 填补比结构元小的像素 |
| 局部运算 | 备注 |
|---|---|
| 均值滤波器 | 能较好去除高斯噪声 |
| 高斯滤波器 | 去噪能力一般 |
| 中值滤波器 | 能很好去除椒盐噪声 |
| 锐化滤波器 | 用于增强图像细节 |
本文介绍了点运算(膨胀、腐蚀、开闭运算)和局部运算(均值、高斯、中值、锐化滤波)的基本原理及Matlab实现。重点比较了不同滤波器在处理高斯和椒盐噪声时的去噪效果,以及它们在不同场景下的适用性。
1万+





