当前位置:首页 >> 信息与通信 >>

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


西南科技大学 专业方向设计报告

课程名称: 设计名称: 姓 学 班 名: 号: 级:

通信专业方向设计 基于插值的图像放大技术

指导教师: 起止日期:

西南科技大学信息工程学院制

方 向 设 计 任 务 书
学生班级: 设计名称: 起止日期: 学生姓名: 学号: 基于插值的图像放大技术 指导教师:

设计要求: 图像放大在很多图像应用中有对应的需求。如图像局部区域的放大,小分辨率图像在大 分辨率设备上显示等。图像放大是指用更多的像素点表示目标,从而目标的细节更丰富,目 标占有面积更大,便于观察或显示。插值是一种常用的图像放大技术,即使用已知的像素点 的值来计算未知位置的像素点的值。而插值的方式、已知像素点的利用等构成了形形色色的 插值方法。该方向设计的技术要求如下: 1、掌握 BMP 文件的数据结构,BMP 文件的读写; 2、掌握图像插值的工作原理; 3、使用 VC++或者 Matlab 编程实现一种插值方法,如双线性插值或双立方插值等; 4、对图像局部或整幅图像做插值处理,形成幅面更大的放大图像; 5、分析插值技术性能,给出改进措施或者意见。

方 向 设 计 学 生 日 志
时间 12.15—12.20 12.20—12.25 12.25—12.30 1.1—1.3 使用 MATLAB 编程实现结果 撰写设计报告 修改报告 设计内容 收集资料,比如图片格式和放大技术

2

课 程 设 计 评 语 表
指导教师评语:

成绩:

指导教师: 年 月 日

3

基于插值的图像放大技术
一、 摘要
对于位图的放大,提高放大图像的质量是图像放大算法追求的主要目标。最邻近插值算法 是一种最根本、 最简单的图像缩放算法, 效果也是最不好的, 放大后的图像有很严重的马赛克, 缩小后的图像有很严重的失真。双线性插值算法就是一种比较好的图像缩放算法,它充分的利 用了原图中待插点四周的四个真实存在的像素值来共同决定目标图中的新像素值, 因此缩放效 果比简单的最邻近插值要好很多。

二、 设计目的和意义
图像在计算机里主要有两种存储和表示方法。矢量图是根据几何特性来绘制图形,矢量可 以是一个点或一条线,矢量图只能靠软件生成,文件占用内存空间较小,因为这种类型的图像 文件包含独立的分离图像,可以自由无限制的重新组合。它的特点是放大后图像不会失真,和 分辨率无关,适用于图形设计、文字设计和一些标志设计、版式设计等。矢量图与位图的效果 是天壤之别,矢量图无限放大不模糊,大部分位图都是由矢量导出来的,也可以说矢量图就是 位图的源码,源码是可以编辑的。 位图图像, 亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这 些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无 数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。然而, 如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。 相对于缩小,图像放大的应用更加广泛和重要。例如,目前高端的显示设备越来越普及,但 是高分辨率的图像视频的生产远没有跟上显示设备的发展。 如果我们想要得到把原来的图像的 高和宽各放大一倍,使用双线性插值技术,那么像素数会增加三倍。对于放大后的图像,我们需 要通过四分之一的已知像素确定另外四分之三的未知像素的值。随着科学技术的发展,最近几 年计算机技术发展迅速,将图像转化为数字图像即对于图像划分为一个矩阵块,对此要进行对 图形放大即对图像做几何运算。 图像放大是从一幅低分辨率图像获得其高分辨率版本的一种图像处理技术。 一般是指针对 光栅化的数字图像,通过某种算法确定未知像素的值,达到增加像素数的目的。 为适应特殊的应 用场合或者得到一个较好的视觉效果,例如要突出某些细节,常常需要一种可以有效改变已有 图像大小的方法,使图像放大后仍有较高的质量。 目前传统的图像放大算法主要是插值算法,其中经典的插值算法有最邻近插值(Pixel replication) 、双线性插值(Bilinear interpolation) 、以及双立方插值(Bicubic interpolation) ,用它们来对图形、图像进行放大。最邻近插值算法是一种最根本、最简单的 图像缩放算法,效果也是最不好的,放大后的图像有很严重的马赛克,缩小后的图像有很严重 的失真,效果不好的根源就是其简单的最邻近插值方法引入了严重的图像失真。比如,当由目 标图的坐标反推得到的原图的坐标是一个浮点数的时候,采用了四舍五入的方法,直接采用了
4

和这个浮点数最接近的像素的值,这种方法是很不科学的,当推得坐标值为 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 双线性插值原理图

5

注意:线性插值的结果与插值的顺序无关。首先进行 x 方向的插值,然后进行 y 方向的插 值,所得到的结果是一样的。但双线性插值插值这种方法并不是线性的,首先进行 y 方向的插 值,然后进行 x 方向的插值,与首先进行 x 方向的插值,然后进行 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) (1)

四、 详细设计步骤
程序设计流程如图 2 所示,本设计采用的是 MATLAB7.0 平台。

图 2 双线性插值放大流程图

主体程序如下: m=2; n=2; %设置放大倍数 img=imread('C:\Users\penghao\Desktop\111.bmp'); %函数 imread 用于读取图片文件中的数据 imshow(img); %imshow 是 matlab 中显示图像的函数 %size 返回数组的尺寸 [h w]=size(img);

imgn=zeros(h*m,w*n); %zeros 功能是返回一个 m×n×p×...的 double 类零矩阵
6

rot=[m 0 0;0 n 0;0 0 1]; for i=1:h*m for j=1:w*n pix=[i j 1]/rot; float_Y=pix(1)-floor(pix(1)); float_X=pix(2)-floor(pix(2)); if pix(1) < 1 pix(1) = 1; end if pix(2) < 1 pix(2) =1; end pix_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)); end end %floor(x)函数其功能是“向下取整”

五、 设计结果及分析
原图见图 3 所示。

7

图 3 待插值的原图像

双线性插值放大四倍的结果和结果部分图见图 4、图 5 所示。

图 4 双线性插值的结果

图 5 双线性插值结果部分图
8

为了看出双线性插值的优劣,用最邻近插值放大图片,以作比较。 采用最邻近插值算法处理图 1 图像, 放大相同倍率, 结果和结果部分图见图 6、 图 7 所示。

图 6 最邻近插值结果

图 7 最邻近插值结果部分图 六、 总结

从结果可以看出用最近邻插值方法处理后的图片产生了严重的疵点,边界出现了毛疵,图 像质量较差,而用双线性插值处理后的图片边界较为平滑,图像质量较好,但是图中的一些细 节也被模糊了。 最近邻插值是取距离源图像像素点最近的点的像素值赋给新图像相应的像素点, 因此在新 图像中各像素点之间的方差比较大,因此处理后的图像就产生了很多疵点;而双线性插值取的 是源图像中对应的四个点像素的平均值作为新图像像素点的值, 因此在新图像中各像素点之间 的方差比较小,图像就比较平滑,但是这种方法也会产生一些源图像中所不具有的像素值,会 导致图像的一些细节的丢失,并且是不可逆的。
9

七、 体会
本设计处理的是位图, 位图就是基于像素的计算处理。 MATLAB 全称 Matrix Laboratory(矩 阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上可以看出,它在矩阵 运算上有自己独特的特点。实际运用中 MATLAB 中的绝大多数的运算都是通过矩阵这一形式进 行的,这一特点决定了 MATLAB 在处理数字图像上的独特优势。从此次设计中,了解了图片的 基本格式和传统放大图片的方法。放大图片的三种经典方法,最邻近插值、双线性插值,双立 方插值, 了解了它们放大的基本原理, 掌握了最邻近插值和双线性插值放大的方法。 使用 MATLAB 这款编程软件实现结果的过程, 更进一步掌握了 MATLAB 编程的方法, 以及深一步体会到 MATLAB 可视化编程的优势。

八、 参考文献
[1] 赵海峰,周永飞,黄子强.图像放大算法比较研究.现代电子技术,2010 [2] 秦襄培.MATLAB 图像处理与界面编程.电子工业出版社,2009.3 [3] 冈萨雷斯. 数字图像处理(第二版).阮秋琦等译. 电子工业出版社,2009.6(5) [4] 谢富续.数字图像放大算法.电子工业出版社,2008

10

%双线性插值法放大图像 close all; %关闭 workspace clear all; %清除 workspace clc; %清空窗口 m=2; %设置放大倍数 n=2; img=imread('C:\Users\penghao\Desktop\111.jpg'); %函数 imread 用于读取图片文件中的数据 imshow(img); %imshow 是 matlab 中显示图像的函数 [h w]=size(img); %size 返回数组的尺寸 imgn=zeros(h*m,w*n); %zeros 功能是返回一个 m×n×p×...的 double 类零矩阵 rot=[m 0 0;0 n 0;0 0 1]; for i=1:h*m for j=1:w*n pix=[i j 1]/rot; float_Y=pix(1)-floor(pix(1)); %floor(x)函数其功能是“向下取整” float_X=pix(2)-floor(pix(2)); if pix(1) < 1 pix(1) = 1; end if pix(2) < 1 pix(2) =1; end pix_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)); end end figure,imshow(uint8(imgn)) %uint8 表示 8 位的无符号整形数据 %figure 控制显示窗口的数量
11

%最邻近插值法放大图像 clc; w=2; h=2; img=imread('C:\Users\penghao\Desktop\111.jpg'); imshow(img); [m n]=size(img); imgn=zeros(h*m,w*n); rot=[h 0 0;0 w 0;0 0 1]; x=h*m,y=w*n inv_rot=inv(rot); for x=1:h*m for y=1:w*n pix=[x y 1]*inv_rot; imgn(x,y)=img(round(pix(1)),round(pix(2))); end end figure,imshow(uint8(imgn))

12


相关文章:
开题报告(基于内容感知的图像缩放处理方法研究与实现)
图像缩放技术是数字图像处理领域一项基础而重要的技术, 传统的图像缩放 技术一般采用最近邻插值法, 双线性插值法和双三次插值法这几种常用的差值法 或者图像切割法...
数字图像处理实验3数字图像的放大与插值
计算机编号: 电子信息学院 实验报告书课 程名: 题 《数字图像处理》课程实验 目: 实验三 数字图像的放大插值 【验证实验】 电子 1313 26 吴限 实验类别: 班...
基于MATLAB的数字图像插值算法的比较与分析
首先数字图像处理技术可以帮助人们更客观、准确地认识世界, 人的视觉系统可以帮助...2.常用图像处理插值算法的概念 数字图像的插值算法有许多应用领域.其中图像缩放是...
课程设计报告---基于Matlab的图像放缩技术
课程设计报告---基于Matlab的图像放缩技术_工学_高等教育_教育专区。数字图像...[m n] 放缩后的大小 [m0 n0] 开辟内存 g1 为1 Type 值 最近邻插值求 ...
利用双线性插值法实现图像放大
利用双线性插值法实现图像放大_计算机软件及应用_IT/计算机_专业资料。基于MATLAB利用双线性插值算法实现图像放大一、双线性插值算法的原理 双线性插值是指利用映射点在...
图形图像技术报告
以原高分辨率图像与 插值放大后图像之间的图像残差与低分辨率图像样本特征作为样本...原始场景真实性的图像复原效果,提出 一个基于大位移视图的自动可信图像修补技术...
插值法在图像处理中的运用
这 种基于模型的加权平均的图像插值方法统称为线性方法。经典的插值方法有:最近...对不同的内容的 图像和不同像素的图像分别采用不同的放大技术进行放大处理, ...
插值算法在动画设计中的应用研究
研究用于图像放大/缩小技术的三种经典插值算法,并编写 MATLAB 程序 实现所有算法;...19 i 本科毕业设计论文 4.1 基于近临插值与邻域取平均的图像缩小算法 ... 19...
基于弹性模型的图像缩放的插值方法探讨论文
基于弹性模型的图像缩放插值方法探讨作者;汪涛 指导老师;盛敏 摘要 图像缩放是...随着信息科技的发展,图像缩放技术的应用范围越来越广,包括 计算机图像处理软件中...
多媒体实验报告一图片的处理
多媒体实验报告 计算机科学与技术学院 2013-2014 学年第 1 学期《多媒体技术》...图像几何变换利用双三次插值方法将原始图像分别进行放大和缩小为原来的两倍,利用...
更多相关标签: