您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数字图像处理 灰度级递减 插值 第二次作业
数字图像处理灰度级递减插值第二次作业一、实验内容:题目一:把lena.bmp512*512图像灰度级逐级递减8-1显示。1.算法分析:本题中对图像进行的操作是直接灰度变换。直接灰度变化可以借助图像的位面表示进行。对一幅用多个比特表示其灰度值的图像来说,其中的每个比特可看做表示了一个二值的平面,也称位面(如下图所示)。一幅其灰度级用8bit表示的图像有8个位面,一般用位面0表示最低位面,位面7表示最高位面。借助图像的位面表示形式可通过对图像特定位面的操作来达到对图像的增强效果。2.具体MATLAB实现程序见附录3.运行结果:256灰度级128灰度级64灰度级32灰度级16灰度级8灰度级4.结果分析:对一幅512*512,256个灰度级的具有较多细节的图像,保持空间分辨率不变,仅将灰度级数依次递减为128、64、32、16、8、4、2,比较如下得到的结果就可以发现灰度级数对图像的影响。当灰度级递减为128或64,一般并不能发现有什么区别。如果将其灰度级数进一步减为32,则在灰度缓变区常会出现一些几乎看不出来的非常细的山脊状结构。这种效应成为虚假轮廓,是由于在数字图像的灰度平滑去使用的灰度级数不够而造成的,它一般在用16级或不到16级均匀灰度数的图中比较明显。因此,运行结果中的前四幅图还基本比较相似,而从第五幅(16灰度级)开始就可以很明显的看到一些虚假轮廓,之后的图中这种现象就也来越明显了,最后一幅2灰度级的图像就已经具有木刻画的效果了。对比实验中处理过的图像,可以发现,虽然都是灰度图,但是灰度范围越大则图像显示出的色彩越丰富。4灰度级2灰度级题目二:把elain图像和lena图像进行加减乘除运算,并按0-255灰度级显示。1.算法分析:(1)使用imadd函数实现两幅图像相加,或常数与图像相加。该函数将两幅图像对应像素的值相加,将和返回给输出图像的对应像素,若是给每个像素添加一个常数值,可以提高图像的亮度。(2)使用imsubtrac函数实现两幅图像相减,或常数与图像相减。函数将两幅图像对应像素的值相减,将和返回给输出图像的对应像素,若是给每个像素减去一个常数值,可以降低图像的亮度。(3)使用immultiply函数实现两幅图像相乘,或常数与图像相乘。函数将两幅图像对应像素的值相乘,将和返回给输出图像的对应像素。当图像与常数相乘,如果常数大于1,结果图像变亮;如果常数小于1,结果图像变暗。(4)使用imdivide函数实现两幅图像相除,或常数与图像相除。函数将两幅图像对应像素的值相除,将和返回给输出图像的对应像素。图像除运算可用于检测两幅图像之间的差异,但是除运算给出的是对应像素值的分数差异或比率,而不是像素间的绝对差异。2.具体实现的MATLAB程序见附录3.执行结果:lena+elain1lena-elain14.结果分析:在实验过程中,可以发现以下一些情况:1)对两幅图像进行运算时,结果很容易发生溢出,uint8型数据尤其是如此。发生溢出时,imadd函数将结果截断为数据类型所支持的最大值,为了避免这种现象,在进elain1-lenalena*elain1lena/elain1行加运算前,有必要将图像转换为更大的数据类型。2)对两幅图像进行运算时,有可能导致某些像素值为负,对于无符号数据类型的uint8和uint16,发生此类问题时,函数将负值截断为0,效果显示为黑色。3)对图像进行乘操作时,同样容易发生溢出现象,函数就会将结果截断为数据类型的最大值。若不将图像类型进行转换,当进行两图像运算时,运算结果会产生溢出,程序执行结果是全白或全黑。因此,为了避免溢出,在图形运算前要将图像数据结构转换为更高级的结构,如uint16或double型。但是,若将uint8类型转换为uint16型,图像相乘结果仍是全白,相除结果为全黑,经过不断试验,若转换为双精度型,图像可以顺利进行运算,只要在运算结束后,再将数据类型转换为uint8型即可。题目三:计算lena图像的均值方差。1.算法分析:(1)使用imhist函数创建图像直方图(2)使用mean2和std2函数计算图像矩阵中元素的均值和标准差2.具体实现的MATLAB程序见附录3.运行结果:均值B=99.0512标准差C=52.8776方差D=C^2=2.7960e+003直方图:4.结果分析进过MATLAB运算,得到图像lena.bmp的均值约为99,标准差约为52.9,方差是标准差的平方,约为2796。再通过对直方图的观察,我们可以看到,图像的灰度平均值确实分布在100左右,与MATLAB计算的结果一致。另外,方差越大,图像的对比度越大,可以显示的细节就越多,因此,lena.bmp图像具有高对比度这个结论,也可以从图像具有的细节得到验证。501001502002500lena.bmp直方图题目四:把lena图像用近邻、双线性和双三次插值法zoom到2048*2048。1.算法分析:使用imresize函数,可以用两种方法制定输出图像的大小:●指定放大倍率●指定输出图像的尺寸实验中,对于两种方法都进行了尝试,实验证明,这两种方式的输出结果是相同的。另外,通过指定imresize函数的method参数,可以指定插值方法。参数method有三种,分别是最近邻差值法'nearest'(默认情况),双线性插值法'bilinear'和双三次插值法'bicubic'。2.具体实现的MATLAB程序见附录3.运行结果:最近邻插值法原始图像4.结果分析:最近邻插值、双线性插值与双三次差值这三种方法之间的区别主要在于点周围像素序列的取法不同。即●对于最近邻插值,输出像素的值指定为点所属像素的值,不考虑其他像素。●对于双线性插值,输出图像的值是最近的2*2邻域内像素值得加权平均值●对于双三次差值,输出图像的值是最近的4*4邻域内像素值得加权平均值参与计算的像素的个数会影响计算的复杂度。所以,双线性插值法花费的时间比最近邻法的要长一些,而双三次法花费的时间比双线性法的又要长一些。但是,参与计算的时间越多,计算结果越精确,通常双线性插值和双三次差值这两种方法比最近邻法得到的效果更好。所以,在计算时间与质量之间有一个折中问题。由于放大的比例过大,超过了显示窗口的范围,因此在程序运行中,MATLAB提出了如下警告:”Warning:Imageistoobigtofitonscreen;displayingat42%scale.”但是并不影响我们对于结果的分析。从得到的图像我们可以看到,最近邻内插产生了最大的锯齿边缘,尤其是在对应图像中的肩膀的边缘部位,产生了很明显的锯齿,而双线性插值法双三次插值法双线性内插得到了明显改进的结果使用双三次内插产生了稍微清晰一些的结果。经过以上分析,将最近邻插值法、双线性插值法、双三次插值法的特点总结如下:1.最近邻插值法'nearest‘●令新增加的像素的灰度值等于距它最近的输入像素的灰度值。●其实现方法最为简单,处理速度快,但它只是将原始象素简单复制到其邻域内,随着放大倍数的增加,放大图像会出现相对严重的方块和锯齿,不能很好的保留原始图像的边缘信息。2.双线性插值法'bilinear'●要求新增加的像素的灰度值,由周围的4个像素的灰度值决定。●双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。3.双三次插值法'bicubic'●能够克服以上两种算法的不足,计算精度高,但计算量大,因为计算新增加的像素的灰度值时,需要考虑周围的16个邻点。题目五:把lena和elain图像分别进行水平shear(参数可设置为1.5,或者自行选择)和旋转30度,并采用用近邻、双线性和双三次插值法zoom到2048*2048。1.算法分析:(1)使用imrotate函数旋转图像。该函数接受两个主要的变量,即要旋转的图像和旋转的角度,旋转角度的单位为度。如果指定一个正值,imrotate函数按逆时针方向旋转函数;如果指定一个负值,imrotate函数按顺时针方向旋转图像。作为可选变量,还可以给imrotate函数指定产值方法和图像的大小。函数默认使用最近邻插值法确定输出图像中的像素值,但也可以指定其他方法,如双线性插值和双三次插值,就如题目中所示。(2)使用imtransform函数完成一般的二维空间转换。该函数接受两个主要变量,既要变换的图像和TFORM空间变换结构,该结构指定变换类型。在TFORM结构中指定变换类型。创建一个TFORM结构有两种方法,即使用makeform函数和cp2tform函数。(3)使用makeform函数,可指定变换类型。在本次实验中,指定的是仿射变换”affine”类型,即进行平移,旋转,比例,拉伸和错切等功能。仿射变换要求变换矩阵的最后一列除最后一个元素为1之外,其它的均为0。2.具体实现的MATLAB程序见附录3.运行结果:(1)水平变化原始图像水平偏移最近邻内插(2)旋转变换水平变换双线性内插水平变换双三次内插原始图像旋转变换最近邻内插4.结果分析:从上面的图像可以看出对图像进行水平偏移和旋转后的结果。默认时,imrotate函数会创建一个足够包含整个严实图像的输出图像。落在原始图像边界以外的像素值设置为0,并且在输出图像中显示为黑色的背景。由于程序中将文本字符串“crop”指定为参数,则函数imrotate会将图像裁剪成与输入图像相同的大小,超出窗口显示范围的部分,会自动的被裁减掉。但是,若省去“crop”参数,就会得到一下结果:旋转变换双线性内插旋转变换双三次内插无crop参数对图像做尺度、旋转、平移和偏移操作,实质就是进行仿射变换,即用图像的矩阵去乘仿射变换的矩阵T,把图像上的像素重新定位到一个新位置,并为这些新位置赋灰度值,而这个任务可以用灰度内插的方法完成,选择最近邻内插法、双线性插值法和双三次插值法其中之一即可。对于水平偏移变换,变换矩阵T=1sh0010001,运算后,坐标变为x=v,y=shv+w。在本题中,参数sv根据题中要求设为1.5,若将参数1.5的正负号进行变换,也可以得到另一种结果。对于旋转变换,变换矩阵T=cosθsinθ0?sinθcosθ0001,运算后,坐标变为x=vcosθ?wsinθ,y=vsinθ+wcosθ。在本题中,运用旋转函数,就不在程序中重新设置矩阵值了,而是函数根据参数自行设置矩阵T。二、实验心得通过本次实验,我已经熟练掌握了对数字图像进行简单处理的基本方法,并且对于相关函数也有了深刻的理解,并可以熟练应用。最重要的,是掌握图像变换的内部原理,东的从根本上发现图像的变化,并不局限于表面的函数应用。同时,在实验过程中,也出现了很多的问题,如参数对结果的影响、相似功能函数间的差异等,但是通过翻阅相关书籍,查找资料,不断的试验,都将问题一一解决,这很好的锻炼了我发现问题,解决问题的能力。最后,感谢老师为我们提供了这样一个学习、锻炼的机会,以及在这过程中给予的指导,在今后的学习过程中,我会再接再厉,争取更好的完成老师教给我们的任务。三、附录:1.参考文献:[1]冈萨雷斯.数字图像处理(第三版).北京:电子工业出版社,2021[2]章毓津.图像工程(上册).北京:清华大学出版社,2021[3]朱习军,隋思涟,等.MATLAB信号与图像处理中的应用.北京:电子工业出版社,2021[4]苏金明,王永利.MATLAB图形图像.北京:电子工业出版社,2021[5]郝文化.MATLAB图形图像处理应用教程.北京:中国水利水电出版社,20212.源代码:1)题目一:I=imread('lena.bmp');figure(1)imshow(A)title('256灰度级');[wide,height]=size(I);img128=zeros(wide,height);img64=zeros(wide,height);img32=zeros(wide,height);img16=zeros(wide,heig
本文标题:数字图像处理 灰度级递减 插值 第二次作业
链接地址:https://www.777doc.com/doc-7855813 .html