数字图像处理(三)——Matlab实现图像去噪

实验内容

1.自选一幅图像或自制一幅图像,图像的主体目标物形状有块状、圆形等形状,且有细线及尖角细节等多样化的细节
2、添加不同强度的高斯噪声、椒盐噪声,编程实现图像的均值滤波、高斯加权均值滤波、中值滤波运算,对比分析不同尺寸平滑模板对高斯噪声和椒盐噪声的去噪效果差异。

1.1对图像添加椒盐噪声和高斯噪声

通过imnoise函数分别对图像添加椒盐噪声和高斯噪声,即I2=imnoise(I1,‘gaussian’,0,0.04);
P2=imnoise(I1,‘salt & pepper’,0.1);
当添加方差为0.04的高斯噪声和噪声密度为0.1的椒盐噪声后,图像分别变为如下图所示:
数字图像处理(三)——Matlab实现图像去噪_第1张图片
数字图像处理(三)——Matlab实现图像去噪_第2张图片

1.2图像去噪

分别通过均值滤波模板和高斯加权均值滤波模板对图像的像素点进行挨个处理,得到去噪后的图像,在使用中值滤波时对图像使用sort()函数进行排序,取中间的像素点作为该位置的像素点灰度值,处理后的图像如下图所示:

当高斯噪声方差为0.04时

数字图像处理(三)——Matlab实现图像去噪_第3张图片
由图像结果可以看出,加入高斯噪声后图像变得不平滑,而在分别进行均值滤波,高斯加权均值滤波和中值滤波后,图像变得平滑,但同时清晰度也降低了。

当椒盐噪声密度为0.2时:

数字图像处理(三)——Matlab实现图像去噪_第4张图片
可以看出中值滤波非常适合处理椒盐噪声。
附代码如下:

clc
clear all
close all
A1 = imread('lenna.jpg'); % 读入图像
A1=rgb2gray(A1);    %将彩色图转化为二维的灰度图
I1=im2double(A1);

V=0.12;
I2=imnoise(I1,'gaussian',0,V);%加入高斯噪声
P2=imnoise(I1,'salt & pepper',0.4); %加入椒盐躁声
figure;
imshow(I2),title('加入高斯噪声后');
figure;
imshow(P2),title('加入椒盐噪声后');
[row,col]=size(I2);   %获取图像的像素点个数
I3=I2;
P3=P2;
for i=2:row-1
    for j=2:col-1
        I3(i,j)=(I2(i,j)+I2(i-1,j)+I2(i+1,j)+I2(i,j-1)+I2(i,j+1)+I2(i-1,j-1)+I2(i-1,j+1)+I2(i+1,j-1)+I2(i+1,j+1))/9;
        P3(i,j)=(P2(i,j)+P2(i-1,j)+P2(i+1,j)+P2(i,j-1)+P2(i,j+1)+P2(i-1,j-1)+P2(i-1,j+1)+P2(i+1,j-1)+P2(i+1,j+1))/9;
    end
end    

I4=I2;
P4=P2;
for i=2:row-1
    for j=2:col-1
        I4(i,j)=(I2(i,j)*4+I2(i-1,j)*2+I2(i+1,j)*2+I2(i,j-1)*2+I2(i,j+1)*2+I2(i-1,j-1)+I2(i-1,j+1)+I2(i+1,j-1)+I2(i+1,j+1))/16;
        P4(i,j)=(P2(i,j)*4+P2(i-1,j)*2+P2(i+1,j)*2+P2(i,j-1)*2+P2(i,j+1)*2+P2(i-1,j-1)+P2(i-1,j+1)+P2(i+1,j-1)+P2(i+1,j+1))/16;
    end
end    

a=zeros(1,9);
c=zeros(1,9);
I5=I2;
P5=P2;
for i=2:row-1
    for j=2:col-1
        a=[I2(i,j),I2(i-1,j),I2(i+1,j),I2(i,j-1),I2(i,j+1),I2(i-1,j-1),I2(i-1,j+1),I2(i+1,j-1),I2(i+1,j+1)];
        c=[P2(i,j),P2(i-1,j),P2(i+1,j),P2(i,j-1),P2(i,j+1),P2(i-1,j-1),P2(i-1,j+1),P2(i+1,j-1),P2(i+1,j+1)];
        b=sort(a);
        d=sort(c);
        I5(i,j)=b(5);
        P5(i,j)=d(5);
    end
end
figure;
subplot(2,3,1),imshow(I1),title('原图','fontsize',16);       
subplot(2,3,2),imshow(I2),title('高斯噪声','fontsize',16);    
subplot(2,3,4),imshow(I3),title('均值滤波','fontsize',16);    
subplot(2,3,5),imshow(I4),title('高斯加权均值滤波','fontsize',16);    
subplot(2,3,6),imshow(I5),title('中值滤波','fontsize',16);    
figure;
subplot(2,3,1),imshow(I1),title('原图','fontsize',16);       
subplot(2,3,2),imshow(P2),title('椒盐噪声','fontsize',16);    
subplot(2,3,4),imshow(P3),title('均值滤波','fontsize',16);    
subplot(2,3,5),imshow(P4),title('高斯加权均值滤波','fontsize',16);    
subplot(2,3,6),imshow(P5),title('中值滤波','fontsize',16);                 

三种滤波方法的对比分析:

1、均值滤波是一种线性滤波器,处理思路也很简单,就是将一个窗口区域中的像素计算平均值,然后将窗口中计算得到的均值设置为锚点上的像素值。
该算法有优点在于效率高,思路简单。同样,缺点也很明显,计算均值会将图像中的边缘信息以及特征信息“模糊”掉,会丢失很多特征。
2、高斯滤波是一种线性滤波,是常用的一种滤波算法,利用二维高斯函数的分布方式来对图像进行平滑。
高斯滤波的优点可以集中在高斯函数的特点上来看
首先,二维高斯函数是旋转对称的,在各个方向上平滑程度相同,不会改变原图像的边缘走向。
第二,高斯函数是单值函数,高斯卷积核的锚点为极值,在所有方向上单调递减,锚点像素不会受到距离锚点较远的像素影响过大,保证了特征点和边缘的特性。
第三,在频域上,滤波过程中不会被高频信号污染。
3、中值滤波是一种非线性滤波,在处理脉冲噪声以及椒盐噪声时效果极佳,能够有效的保护好图像的边缘信息。
中值滤波的处理思路很简单,取卷积核当中所覆盖像素中的中值作为锚点的像素值即可。

你可能感兴趣的:(数字图像处理)