西安交通大学数字图像处理第二次作业_第1页
西安交通大学数字图像处理第二次作业_第2页
西安交通大学数字图像处理第二次作业_第3页
西安交通大学数字图像处理第二次作业_第4页
西安交通大学数字图像处理第二次作业_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字图像与视频处理第 二 次 作 业姓名: / 班级: 学号: 提交日期: 摘 要: 图像的灰度显示和几何变换是图像处理的一个重要方面。本文首先讨论图像的灰度和灰度级,并利用Matlab软件对同一副图像进行不同灰度级的显示,然后编写程序计算图像的均值和方差,并与Matlab专用函数的计算结果进行对比,得到关于方差的有偏估计和无偏估计的讨论。在灰度内插方面,本文从算法入手,详细讨论最近邻、双线性和双三次内插的方法,并结合实例对比分析得到三种方法各自的优缺点。在坐标变换方面,本文具体地给出了几种仿射变换的仿射矩阵,并以偏移变换和旋转变换为例,对图像进行实际的处理,以求直观地理解各变换矩阵的作用。关

2、键词:Matlab 灰度级 图像内插 剪切变换 旋转变换 141 图像的不同灰度级显示1.1 图像灰度和灰度级灰度是指黑白图像中像素的颜色深度,灰度的最小值为0指示黑色,而最大值指示白色,不同灰度级的图像其灰度值有不同的范围,通常8比特图像的灰度值范围是0-255,一幅k比特的图像,其灰度级为L=2k通常一幅图像的灰度级越高,显示出来的细节越清晰,但是占用的存储空间也就越大。当一幅图像以两个灰度级显示时,实际上就成了一幅只有纯黑纯白两色的0-1图像,此时图像中的很多信息都会损失掉。利用Matlab中的图像处理函数可以很容易地实现同一幅图向的不同灰度级显示。1.2 函数说明Matlab中有专门的

3、函数可以实现图像的不同灰度级显示,以下对相关函数做出说明:(1)I=imread(FILENAME,FMT):函数用于以二维矩阵形式打开图像文件,FILENAME和FMT 参数分别指文件目录和格式,其中FMT可以省略;(2)imshow(I,LOW HIGH) :用于显示图像I,低于LOW的像素显示为黑色,高于HIGH的像素显示为白色,介于LOW和HIGH之间的用其灰度级的默认值的中间色调显示。借助以上两个函数,在Matlab中编程实现lena.bmp图像的不同灰度级显示,详细代码见附录,结果如下图所示。图1 lena.bmp的不同灰度级显示1.3 结果讨论从上图可以看出,随着灰度级的降低,图

4、像的最大灰度值与最小灰度值之差越来越小,也就是图像的动态范围逐渐缩小,图像中的细节越来越不显著,损失的信息越来越多,直观的视觉效果越来越差。将以上各图放大观察,可以发现在灰度级递降显示图片时,灰度变化剧烈的边缘处发生的变化不大,而在灰度缓变区域会出现明显的失真。图像8-5位显示时,若不放大观察效果不是很显著,继续降低则发生较为明显的失真。如果以对应的位数保存这些图像,那么随着灰度级的降低,图像占用的存储空间必然逐渐减小。2 数字图像的均值和方差2.1 均值和方差的定义数字图像一般以二维矩阵的形式来表示,把这些像素的灰度数据看成样本值,那么就可以引入一些统计特征来描述它们,最常用也最简单的就是均

5、值和方差。如果以f(i,j)表示一幅MN图像的像素灰度值,那么它的均值可以表示为f=1MNi=1Mj=1nf(i,j)均值描述了一组数据的平均水平,用在图像上也就是图像的平均灰度,均值越大那么图像的总体“色调”越亮,均值越小那么图像的总体“色调”越暗。若要反映像素灰度值的离散程度,则要用到方差这个指标,定义如为S=1MNi=1Mj=1nfi,j-f2S的平方根还定义为标准差,它和样本具有相同的量纲。如果一幅图像的方差或者标准差越大,那么像素灰度值越分散。2.2 计算结果本文利用Matlab编程根据公式计算lena.bmp的均值和方差分别为:将以上结果与Matlab中的mean2()和std2(

6、)函数(取平方)的计算结果对比,发现均值计算结果完全相同,而方差则存在轻微的差异(详见附图1)。这是因为2.1中定义的方差是一个有偏估计量,而std2()函数计算的标准差是由无偏方差开平方得到的,二者不同仅在于有偏方差最后除以MN,而无偏方差最后除以MN-1。在样本容量较大时二者一般只会有轻微的差异,而在样本容量较小时则会产生较大的不同。源程序见附录。3 三种图像内插方法的分析和比较内插是在诸如放大、收缩、旋转和几何校正等许多操作中广泛使用的基本工具,它是一种利用已知数据估计未知位置数值的处理方法。例如在图像的放大处理中,原图像放大2倍则会有一半的位置像素值无法直接得到,这时候就需要进行内插处

7、理来填补空缺位置。最常用的图像内插方法有最近邻内插、双线性内插和双三次内插。3.1 内插方法介绍(1) 最近邻内插顾名思义,就是将目标图像各点的像素值设为在原图像中与其最近的点1。假设源图像的宽度和高度分别为w0和h0, 缩放后的目标图像的宽度和高度分别为w1和h1, 那么长宽扩张比例定义为fW=w0w1,fh=h0h1对于目标图像中的(x, y)点坐标对应原图像中的(x0, y0)点,且有满足x0=intxfW, y0=intxfh(2) 双线性内插双线性内插,又称为双线性插值。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。与最近邻内插

8、法不同的是,双线性内插利用4个最近邻去估计给定位置的灰度值,赋值由如下公式得到:fx,y=ax+by+cxy+d其中四个系数可以用x,y的四个最近邻点写出的未知方程确定,原理图见图2。图2 双线性插值原理图一个简单的确定系数的方法就是,为简化描述在图2中假设i=j=0,先对上端两个顶点进行线性插值可得A点灰度:f0,y=f0,0+yf0,1-f0,0类似地,对于底端两个顶点进行线性插值得到B点灰度为f1,y=f1,0+yf1,1-f(1,0)最后进行垂直方向的线性插值,可以确定fx,y=f0,y+xf(1,y)-f(0,y)将以上三式合并,得双线性内插的计算公式为1 fx,y= yf0,1-f

9、0,0+xf1,0-f(0,0)+f1,1+f0,0-f0,1-f1,0xy+f(0,0)(3) 双三次内插为了得到更精确的点x,y的灰度值,在更高程度上保证几何变换后的图像质量,实现更精确的灰度插值效果,可采用三次内插法等更高阶插值法。双三次插值是一种更加复杂的插值方式,它能创造出比双线性插值更平滑的图像边缘。双三次内插不仅考虑到4个直接相邻点的灰度影响,而且考虑到各邻点间灰度值变化率的影响。该算法利用待采样点周围16个最近邻点,赋予点(x,y)的灰度值由下式得到 fx,y=i=03j=03aijxiyj根据连续信号采样定理可知,若对采样值用插值函数sincx=sinxx进行插值,当采样频率

10、不低于信号频谱最高频率的两倍时可以准确地回复原信号,并可以准确地得到采样点间任意点的值3。为了方便计算,通常采用如下三次多项式sx近似sincx函数:sx=1-2x2+x3 x14-8x+5x2-x3 1x2 0 x2 采用以上插值函数,那么fi+u,j+v的值借助矩阵运算表示为fi+u,j+v=ABC其中A=s(1+u)s(u)s(1-u)s(2-u)TB=f(x-1,y-1)f(x-1,y)f(x,y-1)f(x,y)f(x-1,y+1)f(x-1,y+2)f(x,y+1)f(x,y+2)f(x+1,y-1)f(+1x,y)f(x+2,y-1)f(x+2,y)f(x+1,y+1)f(x+1

11、,y+2)f(x+2,y+1)f(x+2,y+2)C=s(1+v)s(v)s(1-v)s(2-v)T3.2 处理结果分析在Matlab环境下利用以上算法编写程序实现图像的放大和插值,此外Matlab中有函数B=imresize(A, NUMROWS NUMCOLS, METHOD)也可以实现相同的功能,其中NUMROWS和NUMCOLS分别表示目标图像的长和高,METHOD用于说明所用的内插方法, “nearest”表示最近邻内插,“bilinear”表示双线性内插,“bicubic”表示双三次内插。处理结果如图3所示图3 图像不同内插方法的处理结果观察对比以上三幅图并不能发现很多的差别,只是

12、在少部分的边界处和黑白交界处才表现出轻微的视觉上的差异,更多情况下它们看上去像同一幅图,这就说明在当前放大尺度下并不能有效对比这三种内插方法的优缺点,所以本文为充分展现三种插值方法效果上的不同,对以上三幅图分别进行局部放大处理,在更高的放大倍数下充分对比更多的细节,局部放大后呈现如下图所示。图4 局部放大显示结果对比以上各图可以发现,最近邻内插法得到的图像有明显的边缘锯齿和马赛克现象产生,在明暗交界处这种失真尤其严重,而双线性内插法则在图像质量上有较大提升,在很大程度上消除了马赛克现象,但是仍有一些轻微的模糊效果存在。双三次内插表现出的性能最好,细节保持的最为充分,几乎完全消除了锯齿状失真,仅

13、仅从视觉效果上就可以断定双三次内插的性能优于最近邻内插和双线性内插,这也是双三次内插目前在图像处理软件中广泛实用的原因。4 图像的坐标变换图像的几何变换用于改进像素的空间关系,这些变换通常称为“橡皮膜”变换,几何变换由两个基本操作组成:坐标的空间变换和灰度内插,最简单的坐标变换就是仿射变换。前面已经对灰度内插进行了细致的讨论,接下来将结合具体实例对图像的仿射变换展开讨论。4.1 图像仿射变换的数学表达假设一幅图像的像素坐标表示为(v,w),(x,y)是变换后的像素坐标,那么坐标变换可由下式表示4:x,y=T(v,w)其中T表示一种映射关系,通常用矩阵乘法来表示,不同的坐标变换对应不同的矩阵,映

14、射运算的展开如下所示:x=t11+t21+t31y=t12+t22+t32 x y 1=v w 1t11t120t21t220t31t321最常见的图像坐标变换有偏移变换、平移变换、尺度变换和旋转变换,它们的仿射矩阵如下(1) 偏移变换垂直:100t2110001,水平:1t120010001(2) 平移变换100010t31t321(3) 尺度变换t11000t220001(4) 旋转变换cossin0-sincos00014.2 处理结果分析Matlab为图像的坐标变换提供了专门的函数,使用起来非常方便。以偏移变换和旋转变换为例,观察分析仿射变换的效果。(1)B = imtransform

15、(A, TFORM)函数用于实现图像的偏移变换,其中A表示原始图像,TFORM是由MAKETFORM或CP2TFORM.函数定义的2D空间变换,具体调用格式见源代码,lena.bmp偏移并内插扩展到20482048后的图像和细节见图5,仅进行偏移变换的图像见附图2(a)。图5 lena.bmp水平偏移与内插效果对比可见水平偏移变换不改变图像横坐标,而使纵坐标产生一个基于横坐标的增量。实验结果与课本给出的定义不符合,即水平偏移的处理结果表现出了垂直偏移的形态,这和图像坐标的定义方式有关,见图6,这对理解偏移变换的作用并无影响,若要实现课本中定义的水平偏移,那么使用垂直偏移的放射矩阵来处理图像即可

16、。图6 两种图像坐标系(2)B = imrotate(A,ANGLE,METHOD)函数用于实现图像的旋转变换,A表示原图像ANGLE表示逆时针旋转的角度,METHOD是选用的内插方法。处理结果及细节对比如下图所示。图5 elain.bmp旋转与内插效果对比附录参考文献1CSDN-blog,最近邻插值与双线性插值,cle/details/41014541,2017年3月2日2Kenneth R.Castleman. 数字图像处理. 朱志刚,林学訚,石定机,等译. 北京:电子工业出版社. 2001.3赵小川. MATLAB图像处理程序实现与模块化仿真. 北京:北京航空航天大学出版社. 2014.

17、4 Rafael C Gonzelez,Richard E Woods. 数字图像处理. 阮秋琦,阮宇智,等译. 北京:电子工业出版社. 2016.图表附图1 自编程序与调用函数计算结果对比(a) (b)附图2 shear or rotation without zoom源代码1.lena.bmp灰度降级8-1显示clc;clear;lena=imread(C:Users弗莱比尔得DesktopimagePROC第二次作业lena.bmp);row,col=size(lena);figure(1)for n=1:8 temp=zeros(row,col); for i=1:row for j=

18、1:col temp(i,j)=floor(lena(i,j)/2(n-1); end end subplot(2,4,n) high=2(9-n)-1; imshow(temp,0 high)end2.计算lena.bmp的均值和方差clc;lena=imread(C:Users弗莱比尔得DesktopimagePROC第二次作业lena.bmp);lena=double(lena);row,col=size(lena);%计算均值s=0;for i=1:row for j=1:col s=s+lena(i,j); endendgray_mean=s/row/colgray_mean2=me

19、an2(lena)%计算方差s=0;for i=1:row for j=1:col s=s+(lena(i,j)-gray_mean)2; endendgray_var=s/(row*col)gray_var2=(std2(lena)23. 图像灰度内插f=imread(C:Users弗莱比尔得DesktopimagePROC第二次作业lena.bmp);beishu=4;%设置放大倍数row,col=size(f);%nearestzoomr1=round(row*beishu);c1=round(col*beishu);b=zeros(r1,c1); for i=1:r1 for j=1:

20、c1 i1=round(i/beishu); j1=round(j/beishu); if i11 i1=1; end if j11 j1=1; end b(i,j)=f(i1,j1); end endb=uint8(b);figuresubplot(1,3,1),imshow(b);%bilinerzoom row,col=size(f);width = beishu * row;height = beishu * col;J = uint8(zeros(width,height);widthScale = row/width; heightScale = col/height;for x

21、= 5:width - 5 for y = 5:height - 5 xx = x * widthScale; yy = y * heightScale; if (xx/double(uint16(xx) = 1.0) & (xx/double(uint16(xx) = 1.0) J(x,y) = f(int16(xx),int16(yy); else a = double(uint16(xx); b = double(uint16(yy); x11 = double(f(a,b); x12 = double(f(a,b+1); x21 = double(f(a+1,b); x22 = dou

22、ble(f(a+1,b+1); J(x,y) = uint8( (b+1-yy) * (xx-a)*x21 + (a+1-xx)*x11) + (yy-b) * (xx-a)*x22 +(a+1-xx) * x12) ); end endendsubplot(1,3,2)imshow(J);%bicubiczoomK=imresize(f,2048 2048,bicubic);subplot(1,3,3)imshow(K);4. 图像偏移和旋转变换(1)lena.bmp书评shear&zoom%f=imread(C:Users弗莱比尔得DesktopimagePROC第二次作业lena.bmp);tm=1 1.5 0;0 1 0;0 0 1;tform=maketform(affine,tm);f_new=imtransform(f,tform);figure(1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论