数字图像去噪典型算法及matlab实现
J=imnoise(I,'gaussian',0,0.005);%加入均值为0,方差为0.005的高斯噪声
subplot(2,3,1);imshow(I);
title('原始图像');
subplot(2,3,2); imshow(J);
title('加入高斯噪声之后的图像');
%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
K1=filter2(fspecial('average',3),J)/255; %模板尺寸为3
K2=filter2(fspecial('average',5),J)/255;% 模板尺寸为5
K3=filter2(fspecial('average',7),J)/255; %模板尺寸为7
K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9
subplot(2,3,3);imshow(K1);
title('改进后的图像1');
subplot(2,3,4); imshow(K2);
title('改进后的图像2');
subplot(2,3,5);imshow(K3);
title('改进后的图像3');
subplot(2,3,6);imshow(K4);
title('改进后的图像4');
h = fspecial(type)
h = fspecial(type,parameters)
参数type制定算子类型,parameters指定相应的参数,具体格式为:
type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为
type= 'laplacian',为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2。
type= 'log',为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5
type= 'prewitt',为prewitt算子,用于边缘增强,无参数。
type= 'sobel',为著名的sobel算子,用于边缘提取,无参数。
type= 'unsharp',为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。
J=imnoise(I,'gaussian',0,0.005); %加入均值为0,方差为0.005的高斯噪声
K2=wiener2(J,[3 3]); %对加噪图像进行二维自适应维纳滤波
K2=wiener2(J,[5 5]); %对加噪图像进行二维自适应维纳滤波
K2=wiener2(J,[7 7]); %对加噪图像进行二维自适应维纳滤波
K2=wiener2(J,[9 9]); %对加噪图像进行二维自适应维纳滤波
subplot(2,3,1);imshow(I);
title('原始图像');
subplot(2,3,2);imshow(J);
title('加噪图像');
subplot(2,3,3);imshow(K1);
title('恢复图像1');
subplot(2,3,4);imshow(K2);
title('恢复图像2');
subplot(2,3,5);imshow(K3);
title('恢复图像3');
subplot(2,3,6);imshow(K4);
title('恢复图像3');
J = imnoise(I,type)
J = imnoise(I,type,parameters)
其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。
参数type和parameters用于确定噪声的类型和相应的参数。
下面的命令是对图像1.gif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:
J1=imnoise(I,'gaussian',0,0.02);
J2=imnoise(I,'salt & pepper',0.02);
J3=imnoise(I,'speckle',0.02);
运行效果见图2
I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');
J=imnoise(I,'salt & pepper',0.02);
%h=ones(3,3)/9;%产生3*3的全1数组
%B=conv2(J,h);%卷积运算
K2=filter2(fspecial('average',3),J)/255; %均值滤波模板尺寸为3
K= medfilt2(J);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波
K1=wiener2(J,[3 3]); %对加噪图像进行二维自适应维纳滤波
subplot(2,3,1);imshow(I);
title('原始图像');
subplot(2,3,2);imshow(J);
title('加噪图像');
subplot(2,3,3);imshow(K2);
title('均值滤波后的图像');
subplot(2,3,4);imshow(K);
title('中值滤波后的图像');
subplot(2,3,5);imshow(K1);
title('维纳滤波后的图像');
C = conv2(A,B)
C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb+1)×(na+nb+1)。
Y = filter2(h,X)
其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:
其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
Fspecial函数用于创建预定义的滤波算子,其语法格式为:
h = fspecial(type)
h = fspecial(type,parameters)
参数type制定算子类型,parameters指定相应的参数,具体格式为前文已有叙述。
ones(a,b)产生a行b列全1数组
ones(a)产生a行a列全1叔祖
J1=imnoise(I,'salt & pepper',0.004);
subplot(2,3,1);imshow(I);
title('原始图像');
subplot(2,3,2);imshow(J1);
title('加椒盐噪声后的图像');
J= ordfilt2(J1,5,ones(3,4));% 进行二维统计顺序过滤
subplot(2,3,3);imshow(J);
title('椒盐噪声滤波后的图像');
J2=imnoise(I,'gaussian',0,0.004);
subplot(2,3,4);imshow(J2);
title('加高斯噪声后的图像');
J3= ordfilt2(J2,5,ones(3,4));
subplot(2,3,5);imshow(J3);
title('高斯噪声滤波后的图像');
J=imnoise(I,'gaussian',0,0.005);
[c,l]=wavedec2(J,2,'sym4');
J1= wrcoef2('a',c,l,'sym4',1);
J2= wrcoef2('a',c,l,'sym4',2);
subplot(2,2,1);imshow(I);
title('原始图像');
subplot(2,2,2);imshow(J);
title('含噪图像');
subplot(2,2,3);imshow(J1,[]);
title('第一次去噪图像');
subplot(2,2,4);imshow(J2,[]);
title('第二次去噪图像');
I=im2double(I);
subplot(2,2,1);imshow(I);
title('原始图像');
J=imnoise(I,'gaussian',0,0.05);
subplot(2,2,2);imshow(J);
title('含噪图像');
thr=0.1;sorh='s';
crit='shannon';
keepapp=0;
J1=wpdencmp(J,sorh,3,'sym4',crit,thr,keepapp);
subplot(2,2,3);imshow(J1);
title('全局阈值去噪图像');
J2=medfilt2(J1);
subplot(2,2,4);imshow(J2);
title('第二次去噪图像');
Medfilt2函数的语法格式为:
B = medfilt2(A) 用3×3的滤波窗口对图像A进行中值滤波。
B = medfilt2(A,[m n]) 用指定大小为m×n的窗口对图像A进行中值滤波。
数字图像去噪典型算法及matlab实现的更多相关文章
- GMM算法的matlab程序
GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
- GMM算法的matlab程序(初步)
GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
- KFCM算法的matlab程序(用FCM初始化聚类中心)
KFCM算法的matlab程序(用FCM初始化聚类中心) 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行实现,用FCM初始化聚类中心,并求其准确度与 ...
- KFCM算法的matlab程序
KFCM算法的matlab程序 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行简单的实现,并求其准确度. 作者:凯鲁嘎吉 - 博客园 http:// ...
- FCM算法的matlab程序2
FCM算法的matlab程序2 在“FCM算法的matlab程序”这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进 ...
- FCM算法的matlab程序
FCM算法的matlab程序 在“FCM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
- K-means算法的matlab程序
K-means算法的matlab程序 在“K-means算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 ...
- FCM算法的matlab程序(初步)
FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
- K-means算法的matlab程序(初步)
K-means算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648369.html 文章中已经介绍了K-means算法,现在用matlab程序实现 ...
随机推荐
- 程序员必须知道的几个国外IT网站
1.TheServerSide 这是一个老牌的IT信息网站,从名称上你就能看出,它是关注服务器端编程的,以Java和Java周边信息为主,不过最近它也有向客户端和微软产品扩展的趋势.这个网站最初是以免 ...
- jvm 内存整理 -----学习
分为:方法区 ,堆 ,栈 ,本地栈 ,程序计数器 1.程序计数器 保存当前线程执行的字节码行号指示器,解释器工作时,都是通过改变计数器的值来获取下一条程序指令,循环.异常.跳转.分支. ...
- Java 异常 —— java.io.InvalidClassException: javax.xml.namespace.QName; local class incompatible
项目中有个 WebService 接口,调试时使用 Main 方法运行,别人的机器上都能运行,就笔者的机器出问题.他们说是RP的问题…… 异常信息: java.io.InvalidClassExcep ...
- PHP 时间函数 date 参数详解
time();表示的是从1970-01-01到现在共走了多少秒,不便于看,但便于计算 要找出前一天的时间就是 time()-60*60*24; 要找出前一年的时间就是 time()*60*60*24* ...
- Codeforces Round #215 (Div. 1) B
出来冒个泡 由于数比较大 开了map计数 然后边走边删边加 勉强可过 #include <iostream> #include<cstdio> #include<cs ...
- 使用ajaxfileupload插件提示Uncaught TypeError:has no method 'handleError'
最近使用ajaxfileupload插件上传文件时,后台正常运行时,可以正常使用:当后台出现异常时,上传后没有任何反应,也无任何返回信息,使用chrome查看时,发现ajaxfileupload插件报 ...
- how bootstrap fit into our website design?
在web相关技术中,HTML代表了content,structure, CSS则负责styling,决定内容是如何展示的,javascript则主要负责interactive, behaviour. ...
- CSS visibility与display 属性
所有主流浏览器都支持 visibility 属性. 注释:任何的版本的 Internet Explorer (包括 IE8)都不支持 "inherit" 和 "colla ...
- find命令下的atime,ctime,mtime
Linux下的find命令在目录结构中搜索文件,并执行指定的操作.linux下的find命令提供了相当多的查找条件,功能很强大,由于find的功能很强大,所以他的选项也很多,今天我们来细说一下find ...
- codevs 1138 聪明的质监员
二分+前缀和. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> ...