简单概念
图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染,一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等;这里用一个函数实现 :imnoise函数。(见文末)
这里说明两种图像去噪算法:
- 均值滤波算法
也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。有效抑制加性噪声,但容易引起图像模糊,可以对其进行改进,主要避开对景物边缘的平滑处理。
- 中值滤波
基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。
话不多说附代码:
I=imread('C:\Users\wpc\Pictures\1.jpg');%读取图像
I = rgb2gray(I);%灰度处理
J=imnoise(I,'salt & pepper',0.2);%加入椒盐噪声,密度为0.2
subplot(2,3,1);imshow(I);
title('原始图像');
subplot(2,3,2); imshow(J);
title('加入椒盐噪声之后的图像');
%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
K1= medfilt2(J);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波
%采用MATLAB中的函数filter2对受噪声干扰的图像进行中值滤波
K2=filter2(fspecial('average',3),J)/255; %模板尺寸为3
K3=filter2(fspecial('average',5),J)/255;% 模板尺寸为5
K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9
subplot(2,3,3);imshow(K1);
title('中值滤波');
subplot(2,3,4); imshow(K2);
title('均值滤波,尺寸3');
subplot(2,3,5);imshow(K3);
title('均值滤波,尺寸5');
subplot(2,3,6);imshow(K4);
title('均值滤波,尺寸9');
分析与总结
通过目测?
- 中值滤波效果要比均值好
- 使用均值滤波去噪效果选用的邻域半径越大效果越好,当然其代价也会更大。
PS:
- fspecial函数
fspecial函数用于创建预定义的滤波算子,其语法格式为:
h = fspecial(type)
h = fspecial(type,parameters)
参数type制定算子类型,parameters指定相应的参数,具体格式为:
type=‘average’,为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
- imnoise函数
imnoise(I,type)
I:为处理的后的图像矩阵
type:添加噪声的类型,包含 ‘gaussian’ 、‘salt & pepper’…(不会自己查。。。啦啦啦)