DIP实验报告-变灰度缩放.doc_第1页
DIP实验报告-变灰度缩放.doc_第2页
DIP实验报告-变灰度缩放.doc_第3页
DIP实验报告-变灰度缩放.doc_第4页
DIP实验报告-变灰度缩放.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

课程:数字图像处理课程作业实验报告实验名称:Reducing the Number of Gray Levels Zooming and Shrinking实验编号:Proj02-02签 名: 姓 名:学 号:截止提交日期:年月日摘 要:实验要求编写一个将给定图像的灰度级数以2的幂次方减少的程序;编写一个基于像素复制法进行图像缩放的程序,要求缩放因子为整数;编写一个基于双线性插值法的图像缩放程序,要求输入参数为输出图像的水平和垂直方向的像素数。并使用这三个函数对给定图像进行缩小再放大操作,对比输出图像的差异,并总结原因。1、 基本原理1、 改变图像灰度级数本实验为了实现图像灰度级数的变化,将256级的灰度色阶以2的幂次方进行减小量化。当图像的采样点数一定时,采用不同灰度级数的图像质量不同。一般情况,灰度级数越多,图像质量越好;反之图像质量越差。灰度级数减小的极端情况就是二值图像。本实验程序处理很简单:处理后灰度级=(原灰度级/量化级数)*量化级数。(原灰度级/量化级数)的计算结果为略去了小数点后的整数,再乘以量化级数则达到了量化的作用。2、 像素复制法原理在本实验中,像素复制法只是简单的把原图像最近邻的灰度赋给每个新的位置,或者在缩小中简单地去除某一位置的像素信息,这种方法的优势是计算量很低,但是该方法有产生不希望的人为缺陷的倾向,如某些直边缘的严重失真。3、 双线性插值原理使用双线性插值法,我们需要用4最近邻点去估计给定位置的灰度。在数学上,双线性插值算法可以看成是两个变量间的线性插值的延伸。执行该过程的关键思路是先在一个方向上执行线性插值,然后再在另外一个方向上插值。假设单位正方形顶点f(0,0)、f(1,0)、f(0,1)、f(1,1)的值已知,希望通过插值得到正方形内任意点f(x,y)的值。令双线性方程为:f(x,y)=ax + by + cxy + d可以推导出线性插值公式为f(x,y)=f(1,0)- f(0,0)x +f(0,1)-f(0,0)y+ f(1,1)+ f(0,0)- f(1,0)- f(0,1)xy + f(0,0)或:f(x,y)=f(0,0)*(1-x)*(1-y)+f(1,0)*x*(1-y)+f(0,1)*y*(1-x)+f(1,1)*x*y此程序的双线性插值处理便是用了上述公式。上述插值也可以通过以下三步完成:第一步: f(x,0)=f(1,0)- f(0,0)x + f(0,0)第二步: f(x,1)=f(1,1)- f(0,1)x + f(0,1)第三步: f(x,y)=f(x,1)- f(x,0)y + f(x,0)后一种方法比前一种方法运算量小,故一般采用后一种公式进行双线性插值运算。使用双线性公式对相邻的四个像素插值时,所得表面在邻域边界处是连续的,但斜率不连续。即,一个由分段双线性插值产生的表面是连续的,但其导数在邻域边界处通常是不连续的。双线性插值算法图如下图(1)所示:图1 双线性插值算法图2、 实验结果及讨论1、 实验结果实验结果如图(2)图(10)所示:从图(2)可以看出,灰度级的改变对图像质量的影响,在32灰度级图像中出现了伪轮廓,并且随着灰度级的减小,伪轮廓更加明显。从图(5)可以看出,图像经过像素复制法处理后显得有些失真,图像质量变差。从图(7)可以看书,图像经过双线性插值法处理后,图像质量与原图质量差不多。图(8)、图(9)、图(10)分别是图(3)、图(5)、图(7)相同位置的局部放大后的结果,对比效果更佳明显。图2 不同灰度级的输出图像图3 Figure2.19(a)原图像图4 基于像素复制法缩小为256*256后的图像图5基于像素复制法放大为1024*1024后的图像图6基于双线性插值法缩小为256*256后的图像图7基于双线性插值法放大为1024*1024后的图像图8 原图2.19(a)两次放大局部图图9 像素复制法处理后两次放大局部图图10 双线性插值法处理后两次放大局部图2、 实验讨论从实验结果易得,当图像的灰度级减小时,图像质感会变差,当减小到一定的程度,变化很明显。对比实验结果图(3)、图(5)和图(7),可以发现使用简单的像素复制法,将图像先压缩后还原,图像质感变差,出现失真。原因很简单,当使用像素复制法压缩图像时,仅仅是简单的复制某些位置的灰度值,导致原图像信息的丢失,放大还原后,图像质感变差就很正常了。同时对比后,我们可以明显看到使用双线性插值法处理后的图像质感比使用像素复制法处理的结果要好,从局部放大结果图(8)、图(9)和图(10)中更加容易看出二者差异。但是,在程序运行处理时,我们发现像素复制法的速度比双线性插值法快的很多。在数字图像处理过程中,需要综合考虑许多因素,如处理速度、内存占用、失真度等等,因而需要根据实际情况,选择最优化的方法,根据系统目标要求选择适合系统本身的处理方法。3、 程序附录 function main()%功能: 灰度级减少试验 将八种灰度级的输出图像显示在2*4的一张图片上% wH=2; wL=4; ima=imread(fig2.21(a).jpg); figure subplot(wH,wL,1) imshow(ima); title(原图像); imt = grayleveldec(ima,1); subplot(wH,wL,2) imshow(imt); title(128级灰度图像); imt = grayleveldec(ima,2); subplot(wH,wL,3) imshow(imt); title(64级灰度图像); imt = grayleveldec(ima,3); subplot(wH,wL,4) imshow(imt); title(32级灰度图像); imt = grayleveldec(ima,4); subplot(wH,wL,5) imshow(imt); title(16级灰度图像); imt = grayleveldec(ima,5); subplot(wH,wL,6) imshow(imt); title(8级灰度图像); imt = grayleveldec(ima,6); subplot(wH,wL,7) imshow(imt); title(4级灰度图像); imt = grayleveldec(ima,7); subplot(wH,wL,8) imshow(imt); title(2级灰度图像); %第二部分是基于像素复制法的图像缩放程序% % 功能: 基于像素复制方式进行图像缩放% 输入参数为一整数缩放因子% 当缩放因子为负整数时代表缩小,正整数时代表放大 ima=imread(Fig2.19(a).jpg); imt=change_pixels(ima,-4); figure% subplot(1,3,1) imshow(ima); title(Fig2.19(a)原图像);% subplot(1,2,2) figure imshow(imt); title(基于像素复制法的图像缩放到1/4); imt=change_pixels(imt,4); figure% subplot(1,3,2) imshow(imt); title(基于像素复制法的图像缩放到(1/4)*4); % 第三部分是基于双线性插值法的图像缩放程序% 基于双线性插值技术进行图像缩放% 输入参数为结果图像的水平和竖直方向的像素数 x和y% ima=imread(Fig2.19(a).jpg); imt=change_2lines(ima,256,256)% figure% subplot(1,2,1)% imshow(ima);% title(原图像);% subplot(1,2,2) figure imshow(imt); title(基于双线性插值法的图像缩放至512*512); imt=change_2lines(ima,1024,1024) figure% subplot(1,3,3) imshow(imt); title(基于双线性插值法的图像缩放至1024*1024); % 第一部分是灰度级转换程序 function imt = grayleveldec(ima,factor)%功能: 将原图像的灰度级按照2的foctor次幂减少%输入参数:% ima 输入的 8 bits灰度图像矩阵% factor 灰度级减小因子% 输出参数:% imt 输出的灰度图像% 规定factor的阈值在0到8之间 if factor 8 factor = 8 end dfact = uint8(2factor); imt = (ima / dfact) * dfact; %量化的过程 return; % 第二部分是基于像素复制法的图像缩放程序function imt=change_pixels(ima,factor)% 功能: 基于像素复制方式进行图像缩放% 输入参数为一整数缩放因子% 当缩放因子为负整数时代表缩小,正整数时代表放大% wH=1; wL=2;xs,ys = size(ima);if factor0 %缩放因子大于0时,判断为放大图像 for i=1:(xs*factor) for j=1:(ys*factor) imt(i,j) = ima(ceil(i/factor),ceil(j/factor); % round(x):四舍五入至最近整数 % fix(x):无论正负,舍去小数至最近整数 % floor(x):下取整,即舍去正小数至最近整数 % ceil(x):上取整,即加入正小数至最近整数 end end else imt = ima; endendreturn;% 第三部分是基于双线性插值法的图像缩放程序function imt=change_2lines(ima,xs,ys)%(ima,xs,ys)% 基于双线性插值技术进行图像缩放% 输入参数为结果图像的水平和竖直方向的像素数 x和y% imt = uint8(zeros(xs,ys); imax,imay = size(ima); x = xs/imax; %缩放倍数 y = ys/imay; %缩放倍数if x1 | y1 x = fix(x); %缩放倍数 y = fix(y); %缩放倍数for m=1:xs for n=1:ys outx = (m-1)/x+1; %求输出图像各点的位置 outy = (n-1)/y+1; %要求各点到邻近点的距离,先求出四个邻近点的位置 xk = fix(outx); yk = fix(outy); %可求出距离,写为xd和yd xd = outx - xk; yd = outy - yk; if outximax & outyimay imt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk+1,yk)*(1-yd)*xd +ima(xk,yk+1)*yd*(1-xd)+ima(xk+1,yk+1)*xd*yd; elseif outx=imax & outyimay imt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk,yk+1)*yd*(1-xd); elseif outximax & outy=imay imt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk+1,yk)*(1-yd)*xd; elseif outx=imax & outy=imay imt(m,n)=ima(xk,yk)*(1-xd)*(1-yd); end endend else %这是x和y轴都缩小的情况下的插值方法 for m=1:xs for n=1:ys outx = (m-1)/x+1; %求输出图像各点的位置 outy = (n-1)/y+1; %要求各点到邻近点的距离,先求出四个邻近点的位置 xk = fix(outx); yk = fix(outy); %可求出距离,写为xd和yd xd = outx - xk; yd = outy - yk; if outximax & outyimay imt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk+1,yk)*(1-yd)*xd +ima(xk,yk+1)*yd*(1-xd)+ima(x

温馨提示

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

评论

0/150

提交评论