空间平滑滤波器毕业论文 - 图文 下载本文

第三章 基于空域平滑的乳腺超声图像去噪方法

了大量的仿真实验。现以乳腺组织超声图像为例来进行去噪实验。对图像加以强度为0.3的speckle噪声,利用被噪声污染的图像作为输入,他们的大小均为256×256,灰度级为256。取滤波器窗口大小为3×3、5×5、9×9、11×11的‘十’字型模板。实验去噪结果如下:

(a)乳腺超声原图像 (b)加入噪声的图像 (c) 3×3‘十’模板

(d)5×5‘十’模板 (e)9×9‘十’模板 (f)11×11‘十’模板

图3.6基于卷积的平滑滤波去噪效果图

3.2.4. 实验分析及评价

在上述的实验中,选择的是“十字”型的模板来对乳腺超声图像进行卷积处理,其他型的模板也可以按照这个方法来进行。从图像中我们可以看出,应用的卷积的模板越大,对图像像素的处理也就越多,相对的图像也就越模糊。下面是对于乳腺组织超声图像加入0.3speckle噪声,计算的客观评价指标如表2。

表2对噪声图像进行基于卷积平滑输出图像指标比较

由表中均方误差和峰值值信噪比的指标可以看出,基于卷积的平滑滤波去噪,信噪比都得到了提高,均方误差减少,取得了较好的去噪效果。

27

第三章 基于空域平滑的乳腺超声图像去噪方法

原始图像 加入噪声的图像 3×3‘十’模板 5×5‘十’模板 9×9‘十’模板 11×11‘十’模板

MSE 39.2365 94.7436 27.6547 38.6230 47.4542 109.6754 PSNR 31.9851 27.9294 33.7131 32.2623 31.3681 24.0685 3.3. 自适应中值滤波

从前章节中值滤波器对乳腺超声图像的去噪处理,可知中值滤波器在消除噪声的同时,还具有保护边界信息的优点,对图像中的某些细节起到保护作用。但是中值滤波去噪声的性能受滤波窗口尺寸的影响较大,而且它在抑制图像噪声和保护细节两方面存在一定的矛盾:如果我们取的滤波窗口越小,就可较好地保护图像中某些细节,但滤除噪声的能力会受到限制;反之,取的滤波窗口越大,就可加强噪声抑制能力,但对细节的保护能力会减弱,有时会滤去图像中的一些细线、尖锐边角等重要细节,从而破坏图像的几何结构。这种矛盾在图像中噪声干扰较大时表现得尤为明显。

由于常规中值滤波器所使用的滤波窗口大小是固定不变的,所以我们在选择窗口大小和保护细节两方面只能做到二选一,这样矛盾始终不能解决。因此,单单采用常规中值滤波的方法在图像去噪应用中是远远不够的,我们就要寻求其他的改进算法来解决这一矛盾。

3.3.1. 基本原理

自适应中值滤波器的滤波方式和常规的中值滤波器一样,都使用一个矩形区域的窗口Sxy。不同的是在滤波过程中,自适应滤波器会根据一定的设定条件改变(即增加)滤波窗的大小,同时当判断滤波窗中心的像素是噪声时,该值用中值代替,否则不改变其当前像素值,这样用滤波器的输出来替代像素(x,y)处(即目前滤波窗中心的坐标)的值。自适应中值滤波器可以处理噪声概率更大的脉冲噪声,同时能够更好地保持图像细节,这是常规中值滤波器做不到的[39][40][41][42]。 自适应中值滤波总体上可以分为三步:

28

第三章 基于空域平滑的乳腺超声图像去噪方法

(1)对图像各区域进行噪声检测;

(2)根据各区域受噪声污染的状况确定滤波窗口的尺寸; (3)对检测出的噪声点进行滤波。 自适应中值滤波器具体算法如下:

Zmin是在Sxy在滤波窗内灰度的最小值; Zmax是在Sxy在滤波窗内灰度的最大值; Zmed是在Sxy在滤波窗内灰度的中值; Zxy是坐标(x,y)处的灰度值; Smax指定Sxy所允许的最大值。

自适应中值滤波算法由两个部分组成,称为第一层(Leve1A)和第二层(Leve1B)。

A1?Zmed?Zmin;Leve1A:

A2?Zmed?Zmax;如果Al>0并且AZ

?Smax,则重复执行Lvee1A,否则Zxy把作为输出值。

B1?Zxy?Zmin;Leve1B:

B2?Zxy?Zmax;如果Bl>0并且B

29

第三章 基于空域平滑的乳腺超声图像去噪方法

图3.7 自适应中值滤波器流程图

3.3.2. 算法程序

clear;

I=imread('one.JPG'); [m,n]=size(I); figure(1),

imshow(I),title('源图像');

I1=imnoise(I,'salt & pepper',0.3); %添加椒盐脉冲噪声 figure(2),

imshow(I1);title('加入强度为0.3的脉冲噪声'); Iz=I1;

w=[1 2 3 4 5 4 3 2 1 ]; for i=2:m-1 for j=2:n-1 k=0;

Temp = Iz(i-1:i+1,j-1:j+1); T=Temp; while 1

[Tv,ind] = sort(double(T(:))); zmin=Tv(1); zmax=Tv(9);

30