空域低通滤波
将空间域模板用于图像处理,通常称为空间滤波,而空间域模板称为空间滤波器。
空间域滤波按线性和非线性特点有:线性、非线性平滑滤波器。线性滤波在消除图像噪声的同时也会模糊图像的细节,利用非线性平滑滤波可在消除图像中噪声的同时较好的保持图像的细节。
线性平滑滤波器包括邻近域平均法。非线性平滑滤波器有中值滤波器。
平滑滤波:平滑滤波能减弱或消除图像中高频率的分量,但不影响低频率的分量。因为高频分量对应图像中的区域边缘等灰度值具有较大、变化较快的部分,平滑滤波将这个分量滤除可以减少局部灰度的起伏,使图像变得平滑。经常用于模糊处理和减小噪声。
邻域平均法的思想是用像素及其指定邻域内像素的平均值或加权平均值作为该像素的新值,以便去除突变的像素点,从而滤除一定的噪声。邻域平均法的数学含义可用下式表示:
式中:x,y =0,1,2,…,N-1;S为(x,y)点邻域中到的坐标集合,但其中不包括(x,y)点;M为集合坐标点的总数。
邻域平均法中常用的模板是(线性平滑滤波所用的卷积模板均为正值):
邻域平均处理方法是以图像模糊为代价来减小噪声的,且模板尺寸越大,噪声减小的效果越显著,灰度突变的边缘图像更模糊。
中值滤波的算法原理是,首先确定一个奇数像素的窗口W,窗口内各像素按灰度大小排队后,用其中间位置的灰度值代替原f(x,y)灰度值成为窗口中心的灰度值g(x,y)。数学含义可用下式表示:
式中:W为选定窗口大小,f(m-i,n-j)为窗口W的像素灰度值。通常窗内像素为奇数,以便于有中间像素。若窗内像素为偶数时,则中值取中间两像素灰度值的平均值。
给选定的图像加上椒盐噪声、高斯噪声
P=rgb2gray(imread('E:\文本文件\作业\数字图像处理与分析\camema.jpg'));
noise_bl=imnoise(P,'salt & pepper',0.1); %添加椒盐噪声
noise_gs=imnoise(P,'gaussian'); %添加高斯噪声
subplot(131),imshow(P),title('原图'); %一行三列第一个显示原图
subplot(132),imshow(noise_bl),title('添加椒盐噪声'); %一行三列第二个显示添加椒盐噪声图像
subplot(133),imshow(noise_gs),title('添加高斯噪声'); %一行三列第三个显示添加高斯噪声图像
运行结果如下:
代码如下:
clear;close all;clc;
P=rgb2gray(imread('E:\\作业\数字图像处理与分析\图片\camema.jpg')); %读取图像并转为灰色图像
noise_jy=imnoise(P,'salt & pepper',0.1); %添加椒盐噪声
noise_gs=imnoise(P,'gaussian'); %添加高斯噪声
h1=fspecial('average'); % 产生3x3的默认均值模板
h2=fspecial('average',7); % 产生7x7的均值模板
P1=imfilter(P,h1); %进行3*3模板的均值滤波处理
P2=imfilter(P,h2); %进行7*7模板的均值滤波处理
B1=imfilter(noise_jy,h1); %3x3模板均值滤波处理椒盐噪声图片
B2=imfilter(noise_gs,h1); %3x3模板均值滤波处理高斯噪声图片
subplot(3,3,1),imshow(P),title('原图');
subplot(3,3,2),imshow(noise_jy),title('添加椒盐噪声');
subplot(3,3,3),imshow(noise_gs),title('添加高斯噪声');
subplot(3,3,4);imshow(P1);title('3*3 均值滤波处理原图后的图像 ');
subplot(3,3,5);imshow(B1);title('3*3 均值滤波处理椒盐噪声图片后的图像 ');
subplot(3,3,6);imshow(B2);title('3*3 均值滤波处理高斯噪声图片后的图像 ');
subplot(3,3,7);imshow(P2);title('7*7 均值滤波处理原图后的图像 ');
运行结果如下:
原 图
添加椒盐噪声图
添加高斯噪声图
3*3均值处理椒盐噪声图
3*3均值处理高斯噪声图
3*3均值处理原图
7*7均值处理原图
中值滤波的基本步骤是:
(1)将模板在图中漫游,并将模板中心与图中某个像素位置重合;
(2)读取模板下各对应像素的灰度值;
(3)将这些灰度值从小到大排成一列;
(4)找出这些灰度值里排在中间的一个;
(5)将这个中间值赋给对应模板中心位置的像素。
选定了一幅二维图像,分别加入椒盐噪声和高斯噪声,均是期望为 0 ,椒盐噪声方差为 0.1 。然后利用中值滤波法进行滤波去噪。 Matlab 自带了中值滤波的函数,因此较为便捷。
①用P=imread(’图片位置’)与读取图像;
②用noise_jy=imnoise(P,’salt & pepper’,0.1);得到椒盐噪声图像
③用noise_gs=imnoise(P,’gaussian’);得到高斯噪声图像
④用 h1= medfilt2(noise_jy,[5,5] ); 对有椒盐噪声图像进行5×5方形窗口中值滤波
⑤相同函数对高斯噪声图片进行平滑处理
⑥显示原图和处理后的图片
代码如下:
clear;close all;clc;
P=rgb2gray(imread('E:\文本文件\作业\数字图像处理与分析\图片\camema.jpg'));
noise_jy=imnoise(P,'salt & pepper',0.1); %添加椒盐噪声
noise_gs=imnoise(P,'gaussian'); %添加高斯噪声
h1= medfilt2(noise_jy,[5,5] ); %对有椒盐噪声图像进行5×5方形窗口中值滤波
h2= medfilt2(noise_gs,[5,5] ); %对有高斯噪声图像进行5×5方形窗口中值滤波
subplot(2,3,1),imshow(P),title('原图');
subplot(2,3,2),imshow(noise_jy),title('添加椒盐噪声');
subplot(2,3,3),imshow(noise_gs),title('添加高斯噪声');
subplot(2,3,5);imshow(h1);title('中值滤波处理椒盐噪声图片后的图像 ');
subplot(2,3,6);imshow(h2);title('中值滤波处理高斯噪声图片后的图像 ');
运行结果如下:
原图
添加椒盐噪声图
添加高斯噪声图
中值滤波处理椒盐噪声图
中值滤波处理高斯噪声图
比较处理后的图像结果可知:
(1)邻域平均法的平滑效果与所采用邻域的编辑有关,模板尺寸越大,则图像的模糊程度越大;此时消除噪声的效果也将增强,但同时所得到的图像将变得更模糊;
(2)加入椒盐噪声的图呈现出随机分布的黑白斑点,用均值滤波后,噪声并未消除多少,且图片反而变得更加模糊了,而经过中值滤波器之后噪声不但得到了有效的消除,同时图片也并没怎么模糊。