深圳大学图像的灰度变换与空域滤波

更新时间:2024-04-14 07:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

深 圳 大 学 实 验 报 告

课程名称:数字图像处理

实验项目名称:图像的灰度变换与空域滤波

学院:信息工程学院

专业:电子信息工程

指导教师:张坤华

报告人:学号:班级:

实验时间:2016.4.14

实验报告提交时间:2016.4.20

教务部制

实验目的与要求: 1、掌握Matlab 显示直方图的方法。 2、掌握Matlab 对比度调整与灰度直方图均衡化的方法。 3、理解图像滤波的基本定义及目的,掌握Matlab 空域滤波的基本原理及方法。 实验原理: 1、MATLAB 中灰度直方图的显示 MATLAB 图像处理工具箱提供了imhist 函数来计算和显示图像的直方图,imhist 函数 的语法格式为: imhist(I, n) imhist(X, MAP) 其中imhist(I,n)计算和显示灰度图像I 的直方图,n 为指定的灰度级数目,默认值为256。 imhist(X, MAP)计算和显示索引色图像X 的直方图,map 为调色板。 2、对比度调整 如果原图像f(x, y)的灰度范围是[m, M],我们希望对图像的灰度范围进行线性调整,调 整后的图像g(x, y)的灰度范围是[n, N],那么下述变换: [f x y m] n M m g x y N n ? + ? ? ( , ) = ( , ) 就可以实现这一要求。 MATLAB 图像处理工具箱中提供的imadjust 函数,可以实现上述的线性变换对比度调 整。imadjust 函数的语法格式为: J = imadjust(I,[low_in high_in], [low_out high_out]) J = imadjust(I, [low_in high_in], [low_out high_out])返回原图像I 经过直方图调整后的新图 像J,[low_in high_in]为原图像中要变换的灰度范围,[low_out high_out]指定了变换后的 灰度范围,灰度范围可以用[ ] 空矩阵表示默认范围,默认值为[0, 1]。 不使用imadjust 函数,利用matlab 语言直接编程也很容易实现灰度图像的对比度调整。 但运算的过程中应当注意以下问题,由于我们读出的图像数据一般是uint8 型,而在 MATLAB 的矩阵运算中要求所有的运算变量为double 型(双精度型)。因此读出的图像数 据不能直接进行运算,必须将图像数据转换成双精度型数据。 3、直方图均衡化 直方图均衡化的目的是将原始图像的直方图变为均衡分布的形式,即将一已知灰度概 率密度分布的图像,经过某种变换变成一幅具有均匀灰度概率密度分布的新图像,从而改善 图像的灰度层次。 MATLAB 图像处理工具箱中提供的histeq 函数,可以实现直方图的均衡化。 对于灰度图像,histeq 函数的基本调用格式为 J=histeq(I, n) 该函数返回原图像I 经过直方图均衡化处理后的新图像J。n 为指定的均衡化后的灰度级数, 缺省值为64。 对于索引图像,调用格式为: Newmap=histeq(X, map) 返回值Newmap 将是输出图像的新的调色板。 利用matlab 语言直接编程也很容易实现直方图均衡化处理。 4、均值滤波 均值滤波是在空间域对图像进行平滑处理的一种方法,易于实现,效果也挺好。 设噪声η(m,n)是加性噪声,其均值为0,方差(噪声功率)为σ2,而且噪声与图像f(m,n) 不相关。其有噪声的图像f’(m, n)为: f '(m,n) = f (m,n) +η(m,n) (4.1) 经均值滤波处理后的图像g(m, n)为: ( , ) ( , ) ( , ) ( , ) 1 1 1 1 ( , ) '( , ) [ ( , ) ( , )] ( , ) ( , ) i j s i j s i j s i j s gmn f i j f i j i j f i j i j N N N N ηη ∈∈∈∈ = ΣΣ= ΣΣ+ = ΣΣ+ ΣΣ(4.2) 其中s 是(m, n)点的领域内的点集。 除了对噪声有上述假定之外,该算法还基于这样一种假设:图像是由许多灰度值相近的 小块组成。这个假设大体上反映了许多图像的结构特征。(4.2)式表达的算法是由某像素领 域内各点灰度值的平均值来代替该像素原来的灰度值。 可用模块反映领域平均算法的特征。 模版沿水平和垂直两个方向逐点移动,相当于用这样一个模块与图像进行卷积运算,从 而平滑了整幅图像。模版内各系数和为1,用这样的模版处理常数图像时,图像没有变化; 对一般图像处理后,整幅图像灰度的平均值可不变。 5、中值滤波 中值滤波是一种非线性处理技术,能抑制图像中的噪声。它是基于图像的这样一种特性: 噪声往往以孤立的点的形式出现,这些点对应的象素很少,而图像则是由像素数较多、面积 较大的小块构成。 在一维的情况下,中值滤波器是一个含有奇数个像素的窗口。在处理之后,位于窗口正 中的像素的灰度值,用窗口内各像素灰度值的中值代替。例如若窗口长度为5,窗口中像素 的灰度值为80、90、200、110、120,则中值为110,因为按小到大(或大到小)排序后, 第三位的值是110。于是原理的窗口正中的灰度值200 就由110 取代。如果200 是一个噪声 的尖峰,则将被滤除。然而,如果它是一个信号,则滤波后就被消除,降低了分辨率。因此 中值滤波在某些情况下抑制噪声,而在另一些情况下却会抑制信号。 中值滤波很容易推广到二维的情况。二维窗口的形式可以是正方形、近似圆形的或十字 形的。在图像增强的具体应用中,中值滤波只能是一种抑制噪声的特殊工具,在处理中应监 视其效果,以决定最终是否采用这种方案。实施过程中的关键问题是探讨一些快速算法。 MATLAB 中提供了卷积运算的函数命令conv2,其语法格式为: C = conv2(A, B) C = conv2(A, B)返回矩阵A 和B 的二维卷积C。若A 为ma×na 的矩阵,B 为mb×nb 的矩 阵,则C 的大小为(ma+mb+1)×(na+nb+1)。 MATLAB 图像处理工具箱提供了基于卷积的图像滤波函数filter2。filter2 的语法格式为: 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 指定相应的参数,具体格式为: type='average',为均值滤波,参数parameters 为n,代表模版尺寸,用向量表示,默认 值为[3,3]。 type= 'gaussian',为高斯低通滤波器,参数parameters 有两个,n 表示模版尺寸,默认值 为[3,3],sigma 表示滤波器的标准差,单位为像素,默认值为0.5。 type= 'laplacian',为拉普拉斯算子,参数parameters 为alpha,用于控制拉普拉斯算子的 形状,取值范围为[0,1],默认值为0.2。 type= 'log',为拉普拉斯高斯算子,参数parameters 有两个,n 表示模版尺寸,默认值为 [3,3],sigma 为滤波器的标准差,单位为像素,默认值为0.5 type= 'prewitt',为prewitt 算子,用于边缘增强,无参数。 type= 'sobel',为著名的sobel 算子,用于边缘提取,无参数。 type= 'unsharp',为对比度增强滤波器,参数alpha 用于控制滤波器的形状,范围为[0,1], 默认值为0.2。 实验内容及要求 1、显示图像A 及其灰度直方图。用imadjust 函数将它的灰度值调整到[0,1]之间,并观 察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别;改 变灰度值调整范围,观察调整后的图像的变化及其与原图像的差别,调整后的灰度 直方图的变化及其与原灰度直方图的区别;进一步利用改变灰度值调整范围,实现 图像的反转。 2、读取灰度图像B,用histeq 函数将原始图像的灰度直方图均衡化,同时观察均衡化 后的图像与前面图像的差别,均衡化后的灰度直方图与前面的灰度直方图的区别。 3、给图像C 加入高斯噪声,分别采用不同大小的模板对加有噪声的图像进行均值滤波, 用一个图像处理对话框(subplot)显示原图像、加有噪声的图像及均值滤波的图像。 比较结果。 4、分别采用不同大小的模板对上述加有噪声的图像进行中值滤波,用一个图像处理对 话框(subplot)显示原图像、加有噪声的图像及中值滤波的图像。比较结果。 5、(选做内容)不调用histeq 函数及imadjust 函数,利用matlab 语言直接编程实现图 像的直方图均衡化处理。 6、(选做内容)不调用工具箱的函数,自编程序,实现均值滤波和中值滤波。

实验代码及结果: (一)代码: I = imread('A.tif'); J = imadjust(I, [0 1], [1 0]); subplot(2,2,1),imshow(I) subplot(2,2,2),imshow(J) subplot(2,2,3),imhist(I) subplot(2,2,4),imhist(J) 结果: (二) 代码: I = imread('B.tif'); J = histeq(I); subplot(2,2,1),imshow(I) subplot(2,2,2),imshow(J) subplot(2,2,3),imhist(I) subplot(2,2,4),imhist(J) (三) 代码: I = imread('C.tif'); J = imnoise(I,'gaussian',0.02); h=fspecial('average',[3,3]); I1=filter2(h,J); h=fspecial('average',[13,13]); I2=filter2(h,J); subplot(2,2,1),imshow(I),title('?-í?'); subplot(2,2,2),imshow(J),title('?ó???1??éù'); subplot(2,2,3),imshow(I1,[]),title('??DD[3x3]?ù?μ1y??') subplot(2,2,4),imshow(I2,[]),title('??DD[13x13]?ù?μ1y??') 实验结果: (4)代码 I = imread('C.tif'); J = imnoise(I,'gaussian',0.02); I1=medfilt2(J,[3,3]); I2=medfilt2(J,[5,5]); I3=medfilt2(J,[10,10]); I4=medfilt2(J,[20,20]); subplot(3,2,1),imshow(I),title('原图'); subplot(3,2,2),imshow(J),title('加高斯噪声'); subplot(3,2,3),imshow(I1,[]),title('进行[3x3]中值过滤') subplot(3,2,4),imshow(I2,[]),title('进行[5x5]中值过滤') subplot(3,2,5),imshow(I3,[]),title('进行[10x10]中值过滤') subplot(3,2,6),imshow(I4,[]),title('进行[20x20]中值过滤') 实验结果: (5)代码: I=imread('B.tif'); J1=im2double(I)*255; [m,n]=size(J1); p=zeros(1,256); for k=1:256 p(k)=sum(sum(J1==k-1))/(m*n); end for i=2:256 p(i)=p(i)+p(i-1); end for i=1:256 p(i)=round(p(i)*255); end for i=1:m for j=1:n J1(i,j)=p(J1(i,j)+1); end end figure(); subplot(1,2,1),imshow(I); J1=im2uint8(J1/255); subplot(1,2,2),imshow(J1); 实验结果: 实验结论: 由本次实验法,我学会了如何用Matlab显示直方图,如何进行图像对比度的调整与灰度直方图的均衡化处理。更深入学习了图像滤波的定义和意义,掌握了Matlab空间滤波的基本原理和方法,基本达到了实验要求。 指导教师批阅意见: 成绩评定: 实验态度20分 指导教师签字: 年月日 备注: 实验设计与操作50分 实验报告30分

本文来源:https://www.bwwdw.com/article/71np.html

Top