数字图像处理实验报告2

更新时间:2023-10-22 16:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二:数字图像的空间域滤波——平滑滤波

1.实验目的

1. 掌握图像滤波的基本定义及目的。 2. 理解空间域滤波的基本原理及方法。 3. 掌握进行图像的空域滤波的方法。

2.实验基本原理

1. 空间域增强

空间域滤波是在图像空间中借助模板对图像进行领域操作,处理图像每一个像素的取值都是根据模板对输入像素相应领域内的像素值进行计算得到的。空域滤波基本上是让图像在频域空间内某个范围的分量受到抑制,同时保证其他分量不变,达到增强图像的目的。

空域滤波一般分为线性滤波和非线性滤波两类。各种空域滤波器根据功能主要分为 平滑滤波器和锐化滤波器。平滑的目的可分为两类:一类是模糊,目的是在提取较大的目标前去除太小的细节或将目标内的小肩端连接起来;另一类是消除噪声。锐化的目的是为了增强被模糊的细节。结合这两种分类方法,可将空间滤波增强分为四类:

线性平滑滤波器(低通) 非线性平滑滤波器(低通) 线性锐化滤波器(高通) 非线性锐化滤波器(高通)

空间滤波器都是基于模板卷积,其主要工作步骤是:

1) 将模板在图中移动,并将模板中心与图中某个像素位置重合; 2) 将模板上的系数与模板下对应的像素相乘; 3) 将所有乘积相加;

4) 将和(模板的输出响应)赋给图中对应模板中心位置的像素。 2. 平滑滤波器 1) 线性平滑滤波器

线性低通平滑滤波器也称为均值滤波器,这种滤波器的所有系数都是正数,对3×3的模板来说,最简单的是取所有系数为1,为了保持输出图像任然在原来图像的灰度值范围内,模板与象素邻域的乘积都要除以9。

MATLAB 提供了fspecial 函数生成滤波时所用的模板,并提供filter2和 imfilter 函数用指定的滤波器模板对图像进行运算。函数fspecial 的语法格式为: h=fspecial(type);

h=fspecial(type,parameters);

其中参数type 指定滤波器的种类,parameters 是与滤波器种类有关的具体参数。

表2.1 MATLAB中预定义的滤波器种类

MATLAB 提供了一个函数imnoise 来给图像增添噪声,其语法格式为:

J=imnoise(I,type);

J=imnoise(I,type,parameters);

参数type 指定噪声的种类,parameters 是与噪声种类有关的具体参数。参数的种类见 表2.2。

表2.2 噪声种类及参数说明

2) 非线性平滑滤波器

中值滤波器是一种常用的非线性平滑滤波器,其滤波原理与均值滤波器方法类似,是把领域中的图像的象素按灰度级进行排序,然后选择改组的中间值作为输出像素值。

MATLAB 提供了medfilt2 函数来实现中值滤波,其语法格式为:

B=medfilt2(A,[m n]); B=medfilt2(A);

其中,A 是原图象,B 是中值滤波后输出的图像。[m n]指定滤波模板的大小,默认模

板为3×3。

3.实验内容与要求

1. 1) 2) 3) 4)

平滑空间滤波:

读出一幅图像,给这幅图像分别加入椒盐噪声和高斯噪声。

对加入噪声图像调用matlab自带均值和中值滤波函数进行处理。

设计均值滤波器,将加有噪声的图像进行均值滤波,显示处理后的图像。 设计中值滤波器,对有噪声的图像做处理,显示处理后的图像。

4.实验具体实现

1. 平滑空间滤波:(例子)

1) 读出eight.tif这幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与原图显示

在同一图像窗口中。

I=imread(’eight.tif’);imshow(I);

J = imnoise(I,’salt & pepper’,0.05); %noise density=0.05 K= imnoise(I,'gaussian',0.01,0.01);

subplot(1,3,1),imshow(I),title(‘Original Image’) subplot(1,3,2),imshow(J),title(‘Salt&Pepper Noise’) subplot(1,3,3),imshow(K),title(‘Gaussian Noise’)

贴图并分析

2)对加入噪声的图像用matlab平滑(低通)模板做运算。

H = fspecial('average'); J1 = imfilter(J,H,'replicate'); imshow(J1) K1= imfilter(K,H); figure, imshow(K1) B=medfilt2(J); figure,imshow(B);

贴图并分析

3) 设计均值滤波器,将加有噪声的图像进行均值滤波,显示处理后的图像。(例子) I=imread(' def.tif');

imshow(I);

J = imnoise(I,'salt & pepper',0.05);%noise density=0.05 figure,imshow(J); J=double(J);

K= imnoise(I,'gaussian',0.01,0.01); figure,imshow(K); K=double(K); [M,N]=size(I); for i=2:M-1 for j=2:N-1

J1(i,j)=(J(i-1,j-1)+J(i-1,j)+J(i-1,j+1)+J(i,j-1)+J(i,j)+J(i,j+1)+J(i+

1,j-1)+J(i+1,j)+J(i+1,j+1))/9; end end

figure,imshow(uint8(J1)); for i=2:M-1 for j=2:N-1

K1(i,j)=(K(i-1,j-1)+K(i-1,j)+K(i-1,j+1)+K(i,j-1)+K(i,j)+K(i,j+1)+K(i+1,j-1)+K(i+1,j)+K(i+1,j+1))/9; end end

figure,imshow(uint8(K1));

贴图并分析

4) 设计中值滤波器,对有噪声的图像做处理,显示处理后的图像。

请帖图并分析 1.平滑空间滤波: I=imread('def.tif'); I1=rgb2gray(I);

J = imnoise(I1, 'salt & pepper',0.05); K= imnoise(I1, 'gaussian',0.01,0.01); subplot(1,4,1),imshow(I),title('原图')

subplot(1,4,2),imshow(I1),title('灰度图像')

subplot(1,4,3),imshow(J),title('原图+椒盐噪声') subplot(1,4,4),imshow(K),title('原图+高斯噪声')

2. 对加入噪声的图像用matlab平滑(低通)模板做运算。

H = fspecial('average'); J1 = imfilter(J,H,'replicate'); K1= imfilter(K,H); B=medfilt2(J);

subplot(1,3,1),imshow(J1);title(‘J1’); subplot(1,3,2),imshow(K1);title(‘K1’); subplot(1,3,3), imshow(B);title(‘B’);

3.设计均值滤波器,将加有噪声的图像进行均值滤波,显示处理后的图像。

>> subplot(2,2,1),imshow(I),title('I'); >> subplot(2,2,2),imshow(J),title('J');

>> subplot(2,2,3),imshow(uint8(J1)),title('uint8(J1)'); >> subplot(2,2,4),imshow(uint8(K1)),title('uint8(K1)');

4.设计中值滤波器,对有噪声的图像做处理,显示处理后的图像。

I=imread('def.tif');

J = imnoise(I,'salt & pepper',0.05);%noise density=0.05 J=double(J);

K= imnoise(I,'gaussian',0.01,0.01); K=double(K); [M,N]=size(I); for i=2:M-1

for j=2:N-1

a=[J(i-1,j-1),J(i-1,j),J(i-1,j+1),J(i,j-1),J(i,j),J(i,j+1),J(i+1,j-1),J(i+1,j),J(i+1,j+1)]; for kk=1:8

for k=1:8

if a(1,k+1)>a(1,k) temp=a(1,k); a(1,k)=a(1,k+1); a(1,k+1)=temp; end end end J1(i,j)=a(1,5);

end

end

for i=2:M-1

for j=2:N-1

b=[J(i-1,j-1),J(i-1,j),J(i-1,j+1),J(i,j-1),J(i,j),J(i,j+1),J(i+1,j-1),J(i+1,j),J(i+1,j+1)]; for kk=1:8

for k=1:8

if b(1,k+1)>b(1,k) temp=b(1,k); b(1,k)=b(1,k+1); b(1,k+1)=temp; end end end K1(i,j)=b(1,5); end end

subplot(2,2,1),imshow(I),title('I'); subplot(2,2,2),imshow(J),title('J');

subplot(2,2,3),imshow(uint8(J1)),title('uint8(J1)'); subplot(2,2,4),imshow(uint8(K1)),title('uint8(K1)');

本文来源:https://www.bwwdw.com/article/bv6f.html

Top