基于插值的图像放大技术-报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

西南科技大学专业方向设计报告课程名称:通信专业方向设计设计名称:基于插值的图像放大技术姓名:学号:班级:指导教师:起止日期:西南科技大学信息工程学院制2方向设计任务书学生班级:学生姓名:学号:设计名称:基于插值的图像放大技术起止日期:指导教师:设计要求:图像放大在很多图像应用中有对应的需求。如图像局部区域的放大,小分辨率图像在大分辨率设备上显示等。图像放大是指用更多的像素点表示目标,从而目标的细节更丰富,目标占有面积更大,便于观察或显示。插值是一种常用的图像放大技术,即使用已知的像素点的值来计算未知位置的像素点的值。而插值的方式、已知像素点的利用等构成了形形色色的插值方法。该方向设计的技术要求如下:1、掌握BMP文件的数据结构,BMP文件的读写;2、掌握图像插值的工作原理;3、使用VC++或者Matlab编程实现一种插值方法,如双线性插值或双立方插值等;4、对图像局部或整幅图像做插值处理,形成幅面更大的放大图像;5、分析插值技术性能,给出改进措施或者意见。方向设计学生日志时间设计内容12.15—12.20收集资料,比如图片格式和放大技术12.20—12.25使用MATLAB编程实现结果12.25—12.30撰写设计报告1.1—1.3修改报告3课程设计评语表指导教师评语:成绩:指导教师:年月日4基于插值的图像放大技术一、摘要对于位图的放大,提高放大图像的质量是图像放大算法追求的主要目标。最邻近插值算法是一种最根本、最简单的图像缩放算法,效果也是最不好的,放大后的图像有很严重的马赛克,缩小后的图像有很严重的失真。双线性插值算法就是一种比较好的图像缩放算法,它充分的利用了原图中待插点四周的四个真实存在的像素值来共同决定目标图中的新像素值,因此缩放效果比简单的最邻近插值要好很多。二、设计目的和意义图像在计算机里主要有两种存储和表示方法。矢量图是根据几何特性来绘制图形,矢量可以是一个点或一条线,矢量图只能靠软件生成,文件占用内存空间较小,因为这种类型的图像文件包含独立的分离图像,可以自由无限制的重新组合。它的特点是放大后图像不会失真,和分辨率无关,适用于图形设计、文字设计和一些标志设计、版式设计等。矢量图与位图的效果是天壤之别,矢量图无限放大不模糊,大部分位图都是由矢量导出来的,也可以说矢量图就是位图的源码,源码是可以编辑的。位图图像,亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。相对于缩小,图像放大的应用更加广泛和重要。例如,目前高端的显示设备越来越普及,但是高分辨率的图像视频的生产远没有跟上显示设备的发展。如果我们想要得到把原来的图像的高和宽各放大一倍,使用双线性插值技术,那么像素数会增加三倍。对于放大后的图像,我们需要通过四分之一的已知像素确定另外四分之三的未知像素的值。随着科学技术的发展,最近几年计算机技术发展迅速,将图像转化为数字图像即对于图像划分为一个矩阵块,对此要进行对图形放大即对图像做几何运算。图像放大是从一幅低分辨率图像获得其高分辨率版本的一种图像处理技术。一般是指针对光栅化的数字图像,通过某种算法确定未知像素的值,达到增加像素数的目的。为适应特殊的应用场合或者得到一个较好的视觉效果,例如要突出某些细节,常常需要一种可以有效改变已有图像大小的方法,使图像放大后仍有较高的质量。目前传统的图像放大算法主要是插值算法,其中经典的插值算法有最邻近插值(Pixelreplication)、双线性插值(Bilinearinterpolation)、以及双立方插值(Bicubicinterpolation),用它们来对图形、图像进行放大。最邻近插值算法是一种最根本、最简单的图像缩放算法,效果也是最不好的,放大后的图像有很严重的马赛克,缩小后的图像有很严重的失真,效果不好的根源就是其简单的最邻近插值方法引入了严重的图像失真。比如,当由目标图的坐标反推得到的原图的坐标是一个浮点数的时候,采用了四舍五入的方法,直接采用了5和这个浮点数最接近的像素的值,这种方法是很不科学的,当推得坐标值为0.75的时候,不应该就简单的取为1,既然是0.75,比1要小0.25,比0要大0.75,那么目标象素值其实应该根据这个原图中虚拟的点四周的四个真实的点来按照一定的规律计算出来的,这样才能达到更好的缩放效果。双线性插值算法就是一种比较好的图像缩放算法,它充分的利用了原图中虚拟点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,因此缩放效果比简单的最邻近插值要好很多。双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。对于双线性插值法,输出像素的赋值为其周围4个像素点的值的加权平均,放大后图像的高频分量受到损失,图像的轮廓较模糊。双立方插值是一种更加复杂的插值方式,它能创造出比双线性插值更平滑的图像边缘。但是它速度也几乎是最慢的,双线性插值的速度则要快一些。在商业性图像编辑软件中,经常采用的是速度最快,但也是最不准确的最邻近插值。其他一些插值技术通常只在高档或单独应用的程序中出现。对比三种技术的优劣之后,从技术和效益出发,本设计着重研究的是双线性插值。三、设计原理已知的红色数据点与待插值得到的绿色点。假如我们想得到未知函数f在点P=(x,y)的值,假设我们已知函数f在Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2)四个点的值。首先在y方向进行线性插值,得到R1和R2,然后在x方向进行线性插值,就能得到P。这样就得到所要的结果f(x,y)。其中红色点Q11,Q12,Q21,Q22为已知的4个像素点。双线性插值原理见图1所示。图1双线性插值原理图6注意:线性插值的结果与插值的顺序无关。首先进行x方向的插值,然后进行y方向的插值,所得到的结果是一样的。但双线性插值插值这种方法并不是线性的,首先进行y方向的插值,然后进行x方向的插值,与首先进行x方向的插值,然后进行y方向的插值,所得到的结果是不一样的。如果选择一个坐标系统使得四个已知点坐标分别为(0,0)、(0,1)、(1,0)和(1,1),那么插值公式就可以化简为:y)-f(1,0)x(1+f(1,1)xy+x)y-f(0,1)(1+y)-x)(1-f(0,0)(1=y)f(x,(1)四、详细设计步骤程序设计流程如图2所示,本设计采用的是MATLAB7.0平台。图2双线性插值放大流程图主体程序如下:m=2;n=2;%设置放大倍数img=imread('C:\Users\penghao\Desktop\111.bmp');%函数imread用于读取图片文件中的数据imshow(img);%imshow是matlab中显示图像的函数[hw]=size(img);%size返回数组的尺寸imgn=zeros(h*m,w*n);%zeros功能是返回一个m×n×p×...的double类零矩阵7rot=[m00;0n0;001];fori=1:h*mforj=1:w*npix=[ij1]/rot;float_Y=pix(1)-floor(pix(1));%floor(x)函数其功能是“向下取整”float_X=pix(2)-floor(pix(2));ifpix(1)1pix(1)=1;endifpix(2)1pix(2)=1;endpix_up_left=[floor(pix(1))floor(pix(2))];pix_up_right=[floor(pix(1))ceil(pix(2))];pix_down_left=[ceil(pix(1))floor(pix(2))];pix_down_right=[ceil(pix(1))ceil(pix(2))];value_up_left=(1-float_X)*(1-float_Y);value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;%如果选择一个坐标系统使得的四个已知点坐标分别为(0,0)、(0,1)、(1,0)和(1,1),%那么插值公式就可以化简为f(x,y)=f(0,0)(1-x)(1-y)+f(0,1)(1-x)y+f(1,1)xy+f(1,0)x(1-y)imgn(i,j)=value_up_left*img(pix_up_left(1),pix_up_left(2))+...value_up_right*img(pix_up_right(1),pix_up_right(2))+...value_down_left*img(pix_down_left(1),pix_down_left(2))+...value_down_right*img(pix_down_right(1),pix_down_right(2));endend五、设计结果及分析原图见图3所示。8图3待插值的原图像双线性插值放大四倍的结果和结果部分图见图4、图5所示。图4双线性插值的结果图5双线性插值结果部分图9为了看出双线性插值的优劣,用最邻近插值放大图片,以作比较。采用最邻近插值算法处理图1图像,放大相同倍率,结果和结果部分图见图6、图7所示。图6最邻近插值结果图7最邻近插值结果部分图六、总结从结果可以看出用最近邻插值方法处理后的图片产生了严重的疵点,边界出现了毛疵,图像质量较差,而用双线性插值处理后的图片边界较为平滑,图像质量较好,但是图中的一些细节也被模糊了。最近邻插值是取距离源图像像素点最近的点的像素值赋给新图像相应的像素点,因此在新图像中各像素点之间的方差比较大,因此处理后的图像就产生了很多疵点;而双线性插值取的是源图像中对应的四个点像素的平均值作为新图像像素点的值,因此在新图像中各像素点之间的方差比较小,图像就比较平滑,但是这种方法也会产生一些源图像中所不具有的像素值,会导致图像的一些细节的丢失,并且是不可逆的。10七、体会本设计处理的是位图,位图就是基于像素的计算处理。MATLAB全称MatrixLaboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上可以看出,它在矩阵运算上有自己独特的特点。实际运用中MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的,这一特点决定了MATLAB在处理数字图像上的独特优势。从此次设计中,了解了图片的基本格式和传统放大图片的方法。放大图片的三种经典方法,最邻近插值、双线性插值,双立方插值,了解了它们放大的基本原理,掌握了最邻近插值和双线性插值放大的方法。使用MATLAB这款编程软件实现结果的过程,更进一步掌握了MATLAB编程的方法,以及深一步体会到MATLAB可视化编程的优势。八、参考文献[1]赵海峰,周永飞,黄子强.图像放大算法比较研究.现代电子技术,2010[2]秦襄培.MATLAB图像处理与界面编程.电子工业出版社,2009.3[3]冈萨雷斯.数字图像处理(第二版).阮秋琦等译.电子工业出版社,2009.6(5)[4]谢富续.数字图像放大算法.电子工业出版社,200811%双线性插值法放大图像closeall;%关闭workspaceclearall;%清除workspaceclc;%清空窗口m=2;%设置放大倍数n=2;img=imread('C:\Users\penghao\Desktop\111.jpg');%函数imread用于读取图片文件中的数据imshow(img);%imshow是matlab中显示图像的函数[hw]=size(img);%size返回数组的尺寸imgn=zeros(h*m,w*n);%zeros功能是返回一个m×n×p×.

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功