【计算机视觉基础】图像线性滤波、滤波器核、图像噪声、图像非线性滤波等图像滤波操作的MATLAB程序|CSDN创作打卡

利用MATLAB程序实现以下要求:

  1. 对一张彩色或灰度图像截取感兴趣区域,并显示;
  2. 对要求1中的感兴趣区域添加不同程度的噪声,要求至少添加三种类型的噪声,如高斯、椒盐、局部方差等,且每种类型噪声需采用两种不同的噪声参数形式添加。
  3. 设计一种线性滤波方法,对要求2中添加的噪声图像(一种噪声类型即可)去噪,要求去除噪声的同时最大程度保留原图像信息;
  4. 设计一种非线性滤波方法,对要求2中添加的噪声图像(一种噪声类型即可)去噪,要求去除噪声的同时最大程度保留原图像信息。

 MATLAB程序代码如下:

%% 1、截取感兴趣区域
I=imread('lenag.bmp');
Ix=I(100:180,100:180);
%Ix=imcrop(I); %可交互式选择感兴趣区域
figure('Name','截取感兴趣区域','NumberTitle','off')
subplot(1,2,1),imshow(I),title('原图像')
subplot(1,2,2),imshow(Ix),title('感兴趣区域')
%% 2、分别添加三种噪声
%Gaussian noise
gn=imnoise(Ix,'gaussian',0,0.02);
gn1=imnoise(Ix,'gaussian',0,0.1);
figure('Name','添加高斯噪声','NumberTitle','off')
subplot(2,3,1),imshow(Ix),title('原感兴趣区域');
subplot(2,3,2),imshow(gn),title('方差0.02高斯噪声');
subplot(2,3,3),imshow(gn1),title('方差0.1高斯噪声');
subplot(2,3,4),imhist(Ix),title('原图直方图');
subplot(2,3,5),imhist(gn),title('方差0.02高斯噪声图像直方图');
subplot(2,3,6),imhist(gn1),title('方差0.1高斯噪声图像直方图');
%Salt & pepper noise
sp=imnoise(Ix,'salt & pepper',0.05);
sp1=imnoise(Ix,'salt & pepper',0.1);
figure('Name','添加椒盐噪声','NumberTitle','off')
subplot(2,3,1),imshow(Ix),title('原感兴趣区域');
subplot(2,3,2),imshow(sp),title('噪声密度0.05椒盐噪声');
subplot(2,3,3),imshow(sp1),title('噪声密度0.1椒盐噪声');
subplot(2,3,4),imhist(Ix),title('原图直方图');
subplot(2,3,5),imhist(sp),title('密度0.05椒盐噪声图像直方图');
subplot(2,3,6),imhist(sp1),title('密度0.1椒盐噪声图像直方图');
%Speckle noise
sn=imnoise(Ix,'speckle',0.02);
sn1=imnoise(Ix,'speckle',0.1);
figure('Name','添加斑点噪声','NumberTitle','off')
subplot(2,3,1),imshow(Ix),title('原感兴趣区域');
subplot(2,3,2),imshow(sn),title('方差0.02斑点噪声');
subplot(2,3,3),imshow(sn1),title('方差0.1斑点噪声');
subplot(2,3,4),imhist(Ix),title('原图直方图');
subplot(2,3,5),imhist(sn),title('方差0.02斑点噪声图像直方图');
subplot(2,3,6),imhist(sn1),title('方差0.1斑点噪声图像直方图');
%% 3、线性滤波
figure('Name','高斯噪声高斯平滑滤波','NumberTitle','off')
gs=fspecial('gaussian',[4 4],1.9);
w1=imfilter(gn,gs);
subplot(2,3,1),imshow(Ix),title('原感兴趣区域');
subplot(2,3,2),imshow(gn),title('方差0.02高斯噪声');
subplot(2,3,3),imshow(w1),title('高斯平滑滤波');
subplot(2,3,4),imhist(Ix),title('原感兴趣区域直方图');
subplot(2,3,5),imhist(w1),title('高斯平滑滤波直方图');
%% 4、非线性滤波
sel=strel(ones(2)); 
C1=imopen(sp,sel); 
D=imclose(C1,sel);
figure('Name','椒盐噪声图像形态学运算滤波','NumberTitle','off')
subplot(1,3,1),imshow(Ix),title('原感兴趣区域');
subplot(1,3,2),imshow(sp),title('噪声密度0.02椒盐噪声');
subplot(1,3,3),imshow(D),title('形态学滤波');

程序算法原理如下:

1、截取感兴趣区域,我选择的是一张灰度图像‘lenag.bmp’,并将其事先保存在程序的路径之下,使用函数imread将图像读取,然后使用直接截取图像矩阵的方法对图像感兴趣区域进行截取,也可以使用函数imcrop交互式的对图像感兴趣进行截取,这里为了方便我使用了前者。最后使用函数imshow将选择的图像和截取的感兴趣图像分别显示出来。

2、分别添加三种噪声,我选择使用函数imnoise通过修改其参数对截取的图像感兴趣区域添加不同类型和不同参数条件下的噪声,首先选择噪声类型为‘gaussian’对图像分别添加方差为0.02和0.1(均值均为0)的高斯噪声,得到两幅添加了不同方差的高斯噪声的图像;然后选择噪声类型为‘salt & pepper’对图像分别添加噪声密度为0.05和0.1的椒盐噪声,得到两幅添加了不同噪声密度的椒盐噪声的图像;最后选择噪声类型为‘speckle’对图像分别添加方差为0.02和0.1的斑点噪声,得到两幅添加不同方差的斑点噪声的图像;使用函数imhist分别显示原图和上述处理得到的结果的直方图进行对比和分析,对于添加了不同类型、不同参数的噪声得到的图像的不同视觉特征我将在在实验总结中进行分析。

3、在线性滤波,我选择的线性滤波方法是高斯平滑滤波器,用此滤波方法对添加了方差为0.02的高斯噪声的图像进行滤波,使用函数fspecial获得一个指定了滤波器核的大小及标准差的值的高斯滤波器,然后使用函数imfilter使用此滤波器对噪声图像进行滤波,多次调整高斯平滑滤波器核的大小和标准差的值对图像进行滤波,以获得更好地滤波效果,最大程度保留原图像的信息,最后我选定的是大小为4×4、标准差为1.9的高斯平滑滤波器对图像进行滤波,因为通过尝试,此滤波器对于添加了高斯噪声的图像的滤波效果较好。

4、在非线性滤波,我选择的非线性滤波方法是形态学运算滤波,通过对噪声图像先后进行形态学的开运算和闭运算从而达到滤波的目的;用此滤波方法对添加了噪声密度为0.05的椒盐噪声的图像进行滤波,首先使用函数strel生成一个2×2大小的形态学结构元素,然后使用函数imopen利用形态学结构元素对噪声图像进行开运算,使噪声图像变得平滑,断开狭窄的间断和消除细小的凸起,再使用函数imclose利用形态学结构元素对开运算得到的结果进行闭运算,以消弭狭窄的间断和细长的鸿沟,消除细小的空洞,并填补边缘线的断裂,进而最后使滤波后得到的图像最大程度去除掉添加的噪声,保留原图像的信息。

程序运行结果如下:

1、截取感兴趣区域

2、分别添加三种噪声

 3、线性滤波

4、非线性滤波

 看到这里的小伙伴记得点个赞再走哦!谢谢!

关注博主学习更多计算机视觉基础与MATLAB图像处理知识!

原创内容未经允许不得转载。

猜你喜欢

转载自blog.csdn.net/qq_59049513/article/details/122641988