实验目的和任务
(1)了解图像平滑滤波器(均值滤波和中值滤波)和图像锐化算子(Sobel 算子、Prewitt 算子、
Laplacian 算子)在工程领域中的应用;
(2)理解图像平滑滤波器和图像锐化算子的工程应用范围;
(3)掌握图像平滑滤波器和图像锐化算子的常用算法原理;
(4)熟悉图像中常见的几种噪声模型(高斯噪声、脉冲噪声、指数噪声、瑞利噪声);
(5)根据任务要求选择图像空域 增强算法并编程实现。
实验内容及原理
(1)噪声
高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。
椒盐噪声又称为脉冲噪声,它是一种随机出现的白点(盐噪声)或者黑点(椒噪声),类似把椒盐撒在图像上。椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果。
(2)均值滤波器的原理
均值滤波又称作邻域平均法,是典型的线性滤波算法,理想的均值滤波是用每个像素和它周围像素计算出来的平均值替换图像中每个像素。
从频率域观点来看均值滤波是一种低通滤波器(让图像的低频部分通过,通常弱化边缘,会得到比较平缓的图像),高频信号将会去掉,因此可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。因为此方法不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊。记A为原图像f(i,j) 上点(i,j)
的一个领域,M为领域A中像素点个数,或称为面积。领域均值滤波的公式如下:
其中, 为输出图像。
均值滤波的平滑效果与所使用的邻域半径有关。领域半径越大,平滑图像的模糊程度越大。
(3)中值滤波器的原理
统计排序滤波器是一种非线性空间滤波器,这种滤波器的响应以滤波器包围的图像区域中所包含的像素的排序(排队)为基础,然后使用统计排序结果决定的值代替中心像素的值。
中值滤波器是统计排序滤波器中的一种,它是将像素邻域内灰度的中值(在中值计算中包括原像素值)代替该像素的值。它对于一定类型的随机噪声,提供了一种优秀的去噪能力,而且比相同尺寸的线性平滑滤波器的模糊程度明显要低。中值滤波器对处理脉冲噪声非常有效,该种噪声也称为椒盐噪声,因为这种噪声是以黑白点的形式叠加在图像上的。
一个数值集合的中值E即数值集合中有一半小于或等于E,还有一半大于或等于E。为了对一幅图像上的某个点进行中值滤波处理,首先将邻域内的像素分类排序,确定其中值,并将中值赋予滤波后图像中的相应像素点。例如,对于一个3x3邻域,其中值是第5个最大的值,而在一个5x5邻域中,中值就是第13个最大的值,等等。当一个邻域中的一些像素值相同时,所有相等的值都可以作为中值。其公式可以表示为:
其中, 表示输出图像,
表示输入图像,
表示序列
的中值,
表示中值滤波选择的领域。
(4)使用锐化算子滤波的原理
图像平滑处理使图像的纹理和边缘信息受到损失,从而图像变得模糊。如果需要突出图像的纹理和边缘信息,则可通过锐化滤波器实现。锐化滤波器实际上是空域的高通滤波,它可以消除或减弱图像的低频分量,从而增强图像中的纹理和边缘信息。
1、罗伯特算子采用对角线方向两个相邻像素之差作为梯度的近似值来锐化图像。算法示意图如图2.1。
图2.1 罗伯特梯度算子运算示意图
常用近似公式
2、拉普拉斯算子由下式定义
其离散拉普拉斯算子的公式为
(2.4)
式2.4只考虑了水平和垂直两个方向。另外也可以再考虑45度和135度方向,理论类似。式2.4的拉普拉斯算子模板可以用下面的矩阵X表示
使用拉普拉斯算子锐化的输出图像F(x,y)和输入图像f(x,y)关系可以有公式
若使用矩阵X为拉普拉斯算子的模板,则式2.5中 .
实验步骤或程序流程
使用Matlab进行实验编写的步骤:
1、使用imread函数读取一个图像,并将其转化为灰度图像;
2、使用imnoise函数,对灰度图像添加不同类型不同程度的噪声信号,例如椒盐噪声、高斯高斯、指数噪声和瑞利噪声,使用imshow函数进行可视化显示;
3、使用filter2函数、medfilt2函数对上述四种含噪声图像进行均值滤波和中值滤波,通过修改参数,改变不同大小的领域,选用3×3和7×7两种领域进行滤波效果分析,可视化结果,并分析不同的滤波器对不同噪声的滤波效果;
4、使用imfilter函数对原灰度图像、含噪声图像进行锐化处理,选用Sobel 算子、Prewitt 算子、Laplacian 算子三种锐化算子进行编程实现对比分析;
5、可视化结果,进行对比分析。
matlab程序
clc;clear;
I=imread('lena1.png');
Gray_Image = rgb2gray(I);
% 生成椒盐噪声
density = 0.05; % 噪声参数
Salt_Image=imnoise(Gray_Image,'salt & pepper',density);
%均值滤波和中值滤波
Salt_aver33 = filter2(fspecial('average',3),Salt_Image )/255; % 3×3的邻域平均滤波图像
Salt_aver77 = filter2(fspecial('average',7),Salt_Image )/255; % 7×7的邻域平均滤波图像
filter_size = 3; % 指定中值滤波器的大小
Salt_med = medfilt2(Salt_Image, [filter_size, filter_size]); % 使用指定大小的中值滤波进行去噪
filter_size = 7; % 指定中值滤波器的大小
Salt_med2 = medfilt2(Salt_Image, [filter_size, filter_size]); % 使用指定大小的中值滤波进行去噪
figure(2);
subplot(231);imshow(Gray_Image);
subplot(232);imshow(Salt_Image);
subplot(233);imshow(Salt_med2);
subplot(234);imshow(Salt_aver33);
subplot(235);imshow(Salt_aver77);
subplot(236);imshow(Salt_med);
% 生成高斯噪声
variance = 0.01; % 方差,可调整
Gaussian_Image = imnoise(Gray_Image, 'gaussian', 0, variance);
Gaussian_Image = im2uint8(Gaussian_Image);% 防止图像像素值越界
Gauss_aver33 = filter2(fspecial('average',3),Gaussian_Image )/255; % 3×3的邻域平均滤波图像
Gauss_aver77 = filter2(fspecial('average',7),Gaussian_Image )/255; % 7×7的邻域平均滤波图像
filter_size = 3; % 指定中值滤波器的大小
Gauss_med = medfilt2(Gaussian_Image, [filter_size, filter_size]); %使用指定大小的中值滤波进行去噪
figure(3);
subplot(231);imshow(Gray_Image);
subplot(232);imshow(Gaussian_Image);
subplot(234);imshow(Gauss_aver33);
subplot(235);imshow(Gauss_aver77);
subplot(236);imshow(Gauss_med);
% 生成指数噪声
lambda = 0.05; % 参数
Speckle_Image = imnoise(Gray_Image, 'speckle', lambda);
Speckle_aver33 = filter2(fspecial('average',3),Speckle_Image )/255; % 3×3的邻域平均滤波图像
Speckle_aver77 = filter2(fspecial('average',7),Speckle_Image )/255; % 7×7的邻域平均滤波图像
filter_size = 3; % 指定中值滤波器的大小
Speckle_med = medfilt2(Speckle_Image, [filter_size, filter_size]); % 使用指定大小的中值滤波进行去噪
figure(4);
subplot(231);imshow(Gray_Image);
subplot(232);imshow(Speckle_Image);
subplot(234);imshow(Speckle_aver33);
subplot(235);imshow(Speckle_aver77);
subplot(236);imshow(Speckle_med);
% 生成瑞利噪声
scale_param = 30; % 可调整
[m, n] = size(Gray_Image);
noise = random('rician',zeros(m, n), scale_param);
Rician_Image = double(Gray_Image) + noise;
Rician_Image = uint8(Rician_Image);% 防止图像像素值越界
Rician_aver33 = filter2(fspecial('average',3),Rician_Image )/255; % 3×3的邻域平均滤波图像
Rician_aver77 = filter2(fspecial('average',7),Rician_Image )/255; % 7×7的邻域平均滤波图像
filter_size = 3; % 指定中值滤波器的大小
Rician_med = medfilt2(Rician_Image, [filter_size, filter_size]); % 使用指定大小的中值滤波进行去噪
figure(5);
subplot(231);imshow(Gray_Image);
subplot(232);imshow(Rician_Image);
subplot(234);imshow(Rician_aver33);
subplot(235);imshow(Rician_aver77);
subplot(236);imshow(Rician_med);
figure(1);
subplot(231);imshow(Gray_Image);
subplot(232);imshow(Salt_Image);
subplot(233);imshow(Gaussian_Image);
subplot(234);imshow(Speckle_Image);
subplot(235);imshow(Rician_Image);
% 锐化处理
Sharp_GrayImg = Gray_Image + imfilter(Gray_Image, fspecial('laplacian')); % 原灰度应用Laplace算子
Sharp_GrayImg2 =Gray_Image + imfilter(Gray_Image, fspecial('prewitt')); % 原灰度应用prewitt算子
Sharp_GrayImg3 =Gray_Image + imfilter(Gray_Image, fspecial('sobel')); % 原灰度应用sobel算子
Sharp_SaImage = Salt_Image + imfilter(Salt_Image, fspecial('prewitt')); % 椒盐应用prewitt算子
Sharp_GaImage = Gaussian_Image + imfilter(Gaussian_Image, fspecial('prewitt'));%高斯应用prewitt算子
Sharp_SpImage = Speckle_Image + imfilter(Speckle_Image, fspecial('prewitt')); % 指数应用prewitt算子
figure(6);
subplot(231);imshow(Sharp_GrayImg);
subplot(232);imshow(Sharp_GrayImg2);
subplot(233);imshow(Sharp_GrayImg3);
subplot(234);imshow(Sharp_SaImage);
subplot(235);imshow(Sharp_GaImage);
subplot(236);imshow(Sharp_SpImage);
结果
abc
de
a)原图 b)椒盐噪声 c)高斯噪声 d)指数噪声 e)瑞利噪声
图5.1 原图及加噪结果
由图5.1的五副图像可以看出,在分别加入椒盐、高斯、指数、瑞利噪声后,都出现了不同程度的失真。其中b)图可以明显看出椒盐噪声导致图像中出现孤立的亮或暗像素,降低图像的质量。c)d)e)三幅图像出现了模糊情况,降低了图片质量。
abc
def
a)原图b)含椒盐噪声c)领域为7×7的中值滤波
d)领域为3×3的均值滤波e)领域为7×7的均值滤波f)领域为3×3的中值滤波
图5.2 对含椒盐噪声图片均值、中值滤波结果
图5.2是利用均值滤波和中值滤波滤除椒盐噪声的结果。d、e两图是在不同领域大小下的均值滤波,可以看出e图相较于d图,图像更加模糊,细节不突出,但是降噪效果较好;c、f两图是在不同领域大小下的中值滤波,可以看出f图较于e图更加清晰,滤波效果好。在进行对椒盐噪声的滤除时,使用中值滤波的效果比均值滤波效果更好,可以在尽量保证图片细节的同时去除噪声。在领域大小上,可以看出,选取的领域越大,滤波效果结果越模糊。
ab
def
a)原图b)含高斯噪声图片
d)领域为3×3的均值滤波e)领域为7×7的均值滤波f)领域为3×3的中值滤波
图5.3 对含高斯噪声图片均值、中值滤波结果
图5.3是利用均值滤波和中值滤波滤除高斯噪声的结果。d、e两图是在不同领域大小下的均值滤波,可以看出d图相较于e图,图像较清晰,保留了细节,但是降噪效果较d图差;f图是在3×3领域大小下的中值滤波,可以看出图片保留了边缘细节,但是滤波效果很差。在进行对高斯噪声的滤除时,使用均值滤波的效果比中值滤波效果更好,可以在尽量保证图片细节的同时去除高斯噪声。
ab
def
a)原图b)含指数噪声图片
d)领域为3×3的均值滤波e)领域为7×7的均值滤波f)领域为3×3的中值滤波
图5.4 对含指数噪声图片均值、中值滤波结果
图5.4是利用均值滤波和中值滤波滤除指数噪声的结果。d、e两图是在不同领域大小下的均值滤波,可以看出d图相较于e图,图像较清晰,保留了细节,但是降噪效果较d图差;f图是在3×3领域大小下的中值滤波,滤波效果很差,仍存在较多的噪声。在进行对指数噪声的滤除时,使用均值滤波的效果比中值滤波效果更好,可以在尽量保证图片细节的同时去除指数噪声。
ab
def
a)原图b)含瑞利噪声图片
d)领域为3×3的均值滤波e)领域为7×7的均值滤波f)领域为3×3的中值滤波
图5.5对含瑞利噪声图片均值、中值滤波结果
图5.5是利用均值滤波和中值滤波滤除瑞利噪声的结果。d、e两图是在3×3和7×7领域大小下的均值滤波,可以看出d图相较于e图,保留了细节,但是降噪效果较d图差;f图是在3×3领域大小下的中值滤波,保留了细节,但存在少量的噪声。
abc
def
a)b)c) Prewitt算子对含椒盐、高斯、指数噪声图片锐化
d)e)f)图5.1a使用Laplacian、Prewitt、Sobel算子锐化结果
图5.6 锐化结果
图5.6是利用prewitt算子对含椒盐、高斯、指数噪声图片锐化结果和使用laplacian、prewitt、sobel算子对原灰度图像锐化的结果。由于大多数噪声的性质是高频成分,由图5.6 a)b)c)图看出,含噪图像在使用锐化算子后,锐化算子增强了这些高频信号,从而使图像中的噪声更加明显。由图5.6 d)e)f) 看出,Laplacian 锐化算子可以突出图像中的边缘和细节,增强图像的清晰度,它使得图像中的边缘更加明显。对比图5.6 e)f),Prewitt 算子的锐化效果类似于Sobel 锐化算子,使得边缘更加突出。