我想问一下:怎么用matlab编写函数对图像进行高斯滤波以去除噪声?
2个回答
2013-03-29
展开全部
2. 噪声及其噪声的 Matlab 实现
imnoise 函数
格式:J=imnoise(I,type)
J=imnoise(I,type,parameter)
说明:J=imnoise(I,type) 返回对图像 I 添加典型噪声后的有噪图像 J ,参数 type 和 parameter 用于确定噪声的类型和相应的参数。
加权领域平均算法来进行滤波处理
由实验我们可以看出,一般的滤波器在对图像进行噪声滤除的同时对图像中的细节部分有不同程度的破坏,都不能达到理想的效果。但是采用加权的邻域平均算法对图像进行噪声滤除, 不仅能够有效地平滑噪声, 还能够锐化模糊图像的边缘。 加权的邻域平均算法的基本思想是: 在一个邻域内, 除了可以利用灰度均值外, 灰度的上偏差和下偏差也能够提供某些局部信息。算法的计算公式描述如下, 用f (x ,y ) 表示原始图像, g (x , y ) 为平滑后点(x , y ) 的灰度值,V x , y 表示以点(x , y ) 为中心的邻域, 该邻域包含N 个象素,m (x , y ) 表示邻域V x , y 内的灰度均值。NI表示邻域内大于平均值的像素个数,Ng表示小于平均值的像素个数,而N0表示等于平均值的像素个数。则修正的邻域平均法由下式给出:
m - A�0�3 m l; N l > max{N g ,N 0}
g(x,y)= m + A�0�3 m g; N g > max{N l ,N 0} (1)
m ; else
(1)式(1) 中, A为修正系数, 取值范围为0~ 1, 其大小反映V x , y 中的边缘状况。 以上是我认为在图像处理中比较有价值的两点,有兴趣的可以上网查阅相关的资料。
3. 图像滤波的 Matlab 实现
3.1 conv2 函数
功能:计算二维卷积
格式:C=conv2(A,B)
C=conv2(Hcol,Hrow,A)
C=conv2(...,'shape')
说明:对于 C=conv2(A,B) ,conv2 的算矩阵 A 和 B 的卷积,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 则 size(C)=[Ma+Mb-1,Na+Nb-1]; C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与 Hcol 向量在列方向和 Hrow 向量在行方向上进行卷积;C=conv2(...,'shape') 用来指定 conv2 返回二维卷积结果部分,参数 shape 可取值如下:
》full 为缺省值,返回二维卷积的全部结果;
》same 返回二维卷积结果中与 A 大小相同的中间部分;
valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分,当 size(A)>size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]。
3.2 conv 函数
功能:计算多维卷积
格式:与 conv2 函数相同
3.3 filter2函数
功能:计算二维线型数字滤波,它与函数 fspecial 连用
格式:Y=filter2(B,X)
Y=filter2(B,X,'shape')
说明:对于 Y=filter2(B,X) ,filter2 使用矩阵 B 中的二维 FIR 滤波器对数据 X 进行滤波,结果 Y 是通过二维互相关计算出来的,其大小与 X 一样;对于 Y=filter2(B,X,'shape') ,filter2 返回的 Y 是通过二维互相关计算出来的,其大小由参数 shape 确定,其取值如下:
》full 返回二维相关的全部结果,size(Y)>size(X);
》same 返回二维互相关结果的中间部分,Y 与 X 大小相同;
》valid 返回在二维互相关过程中,未使用边缘补 0 部分进行计算的结果部分,有 size(Y)<size(X) 。
3.4 fspecial 函数
功能:产生预定义滤波器
格式:H=fspecial(type)
H=fspecial('gaussian',n,sigma) 高斯低通滤波器
H=fspecial('sobel') Sobel 水平边缘增强滤波器
H=fspecial('prewitt') Prewitt 水平边缘增强滤波器
H=fspecial('laplacian',alpha) 近似二维拉普拉斯运算滤波器
H=fspecial('log',n,sigma) 高斯拉普拉斯(LoG)运算滤波器
H=fspecial('average',n) 均值滤波器
H=fspecial('unsharp',alpha) 模糊对比增强滤波器
说明:对于形式 H=fspecial(type) ,fspecial 函数产生一个由 type 指定的二维滤波器 H ,返回的 H 常与其它滤波器搭配使用。
imnoise 函数
格式:J=imnoise(I,type)
J=imnoise(I,type,parameter)
说明:J=imnoise(I,type) 返回对图像 I 添加典型噪声后的有噪图像 J ,参数 type 和 parameter 用于确定噪声的类型和相应的参数。
加权领域平均算法来进行滤波处理
由实验我们可以看出,一般的滤波器在对图像进行噪声滤除的同时对图像中的细节部分有不同程度的破坏,都不能达到理想的效果。但是采用加权的邻域平均算法对图像进行噪声滤除, 不仅能够有效地平滑噪声, 还能够锐化模糊图像的边缘。 加权的邻域平均算法的基本思想是: 在一个邻域内, 除了可以利用灰度均值外, 灰度的上偏差和下偏差也能够提供某些局部信息。算法的计算公式描述如下, 用f (x ,y ) 表示原始图像, g (x , y ) 为平滑后点(x , y ) 的灰度值,V x , y 表示以点(x , y ) 为中心的邻域, 该邻域包含N 个象素,m (x , y ) 表示邻域V x , y 内的灰度均值。NI表示邻域内大于平均值的像素个数,Ng表示小于平均值的像素个数,而N0表示等于平均值的像素个数。则修正的邻域平均法由下式给出:
m - A�0�3 m l; N l > max{N g ,N 0}
g(x,y)= m + A�0�3 m g; N g > max{N l ,N 0} (1)
m ; else
(1)式(1) 中, A为修正系数, 取值范围为0~ 1, 其大小反映V x , y 中的边缘状况。 以上是我认为在图像处理中比较有价值的两点,有兴趣的可以上网查阅相关的资料。
3. 图像滤波的 Matlab 实现
3.1 conv2 函数
功能:计算二维卷积
格式:C=conv2(A,B)
C=conv2(Hcol,Hrow,A)
C=conv2(...,'shape')
说明:对于 C=conv2(A,B) ,conv2 的算矩阵 A 和 B 的卷积,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 则 size(C)=[Ma+Mb-1,Na+Nb-1]; C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与 Hcol 向量在列方向和 Hrow 向量在行方向上进行卷积;C=conv2(...,'shape') 用来指定 conv2 返回二维卷积结果部分,参数 shape 可取值如下:
》full 为缺省值,返回二维卷积的全部结果;
》same 返回二维卷积结果中与 A 大小相同的中间部分;
valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分,当 size(A)>size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]。
3.2 conv 函数
功能:计算多维卷积
格式:与 conv2 函数相同
3.3 filter2函数
功能:计算二维线型数字滤波,它与函数 fspecial 连用
格式:Y=filter2(B,X)
Y=filter2(B,X,'shape')
说明:对于 Y=filter2(B,X) ,filter2 使用矩阵 B 中的二维 FIR 滤波器对数据 X 进行滤波,结果 Y 是通过二维互相关计算出来的,其大小与 X 一样;对于 Y=filter2(B,X,'shape') ,filter2 返回的 Y 是通过二维互相关计算出来的,其大小由参数 shape 确定,其取值如下:
》full 返回二维相关的全部结果,size(Y)>size(X);
》same 返回二维互相关结果的中间部分,Y 与 X 大小相同;
》valid 返回在二维互相关过程中,未使用边缘补 0 部分进行计算的结果部分,有 size(Y)<size(X) 。
3.4 fspecial 函数
功能:产生预定义滤波器
格式:H=fspecial(type)
H=fspecial('gaussian',n,sigma) 高斯低通滤波器
H=fspecial('sobel') Sobel 水平边缘增强滤波器
H=fspecial('prewitt') Prewitt 水平边缘增强滤波器
H=fspecial('laplacian',alpha) 近似二维拉普拉斯运算滤波器
H=fspecial('log',n,sigma) 高斯拉普拉斯(LoG)运算滤波器
H=fspecial('average',n) 均值滤波器
H=fspecial('unsharp',alpha) 模糊对比增强滤波器
说明:对于形式 H=fspecial(type) ,fspecial 函数产生一个由 type 指定的二维滤波器 H ,返回的 H 常与其它滤波器搭配使用。
展开全部
如何学好VB
一.VB是什么?
VB
是Visual
Basic编程语言
编写计算机程序需要使用计算机编程语言。计算机编程语言是人和计算机“对话”的桥梁。就像人类的语言一样,计算机编程语言也有很多。目前较为广泛使用的语言有“C++”、“Pascal”、“Basic”等。在众多的计算机编程语言中,以BASIC语言最为易学易用。
BASIC是英文Beginner’s
All
purpose
Symbolic
Instruction
Code的缩写,意思为初学者通用符号指令代码,一直都是程序设计入门的首选语言。
二.学VB有什么用?
VB能做很多东西,只要你想去做。
应用程序。数据库程序。只要能想得到的基本上都可以。但是像操作系统等大型复杂的编程现在一般都用C来编的。用VB很难做得到。要做程序员,单单只会VB还不行。最好多学点其他的。比如ASP数据库。NET。这样才做出更好的东西来
三.如何学好VB
VB是一种很容易上手的语言,属于典型的入门容易,精通很难。
在现在,VB仍然是世界上应用最广泛的语言.比较适合的领域是C/S架构的MIS,衍生语言VBScript又是一种非常适合B/S架构MIS等的语言,他的简单和易修改非常适合管理系统需求多变的情况.对数据库的支持也很好,有MS在后面支持,你还担心什么,不过任何语言都在进化,VB也不例外,LZ可以以现在的基础学习.net架构,适应发展的需要.
如果你是一巧不通的话,我可以介绍一个学习的方法:
1.先看看书,大致的了解了一些基本的东西,不至于"盲人摸象"
2.从小东西学起(一切在于实践),例如:VB
的三角函数啊.时钟啊.我想在书中是会有的.也可以看看网上的教程...
3.一个很重要的建议:等你已经有所见效了,最好去上个VB的高级补习班.打个比喻:工夫练的最好,也得有个人来帮你打通经脉啊...
4.建议看的书:
(1)《看实例学编程--Visual
Basic程序设计》
__西安电子科技大学出版社
(2)机械工业出版社出的曹青,邱李华,郭志强编著的VB程序设计教程
一.VB是什么?
VB
是Visual
Basic编程语言
编写计算机程序需要使用计算机编程语言。计算机编程语言是人和计算机“对话”的桥梁。就像人类的语言一样,计算机编程语言也有很多。目前较为广泛使用的语言有“C++”、“Pascal”、“Basic”等。在众多的计算机编程语言中,以BASIC语言最为易学易用。
BASIC是英文Beginner’s
All
purpose
Symbolic
Instruction
Code的缩写,意思为初学者通用符号指令代码,一直都是程序设计入门的首选语言。
二.学VB有什么用?
VB能做很多东西,只要你想去做。
应用程序。数据库程序。只要能想得到的基本上都可以。但是像操作系统等大型复杂的编程现在一般都用C来编的。用VB很难做得到。要做程序员,单单只会VB还不行。最好多学点其他的。比如ASP数据库。NET。这样才做出更好的东西来
三.如何学好VB
VB是一种很容易上手的语言,属于典型的入门容易,精通很难。
在现在,VB仍然是世界上应用最广泛的语言.比较适合的领域是C/S架构的MIS,衍生语言VBScript又是一种非常适合B/S架构MIS等的语言,他的简单和易修改非常适合管理系统需求多变的情况.对数据库的支持也很好,有MS在后面支持,你还担心什么,不过任何语言都在进化,VB也不例外,LZ可以以现在的基础学习.net架构,适应发展的需要.
如果你是一巧不通的话,我可以介绍一个学习的方法:
1.先看看书,大致的了解了一些基本的东西,不至于"盲人摸象"
2.从小东西学起(一切在于实践),例如:VB
的三角函数啊.时钟啊.我想在书中是会有的.也可以看看网上的教程...
3.一个很重要的建议:等你已经有所见效了,最好去上个VB的高级补习班.打个比喻:工夫练的最好,也得有个人来帮你打通经脉啊...
4.建议看的书:
(1)《看实例学编程--Visual
Basic程序设计》
__西安电子科技大学出版社
(2)机械工业出版社出的曹青,邱李华,郭志强编著的VB程序设计教程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询