中国地质大学专业实习图像缩放_第1页
中国地质大学专业实习图像缩放_第2页
中国地质大学专业实习图像缩放_第3页
中国地质大学专业实习图像缩放_第4页
中国地质大学专业实习图像缩放_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、 姓名:尤德军 班级:075124 院系:机电学院 题目:图像缩放 摘要 随着数字采集技术和信号处理理论的普及,越来越多的图像以数字形式存储。数字图像处理技术起源于20世纪20年代,图像缩放技术是其中的关键技术。图像缩放的主要目的是通过改变图像分辨率使图像能够在输出终端上得到更好的显示效果。在消费类电子领域,数字图像缩放技术主要基于硬件实现,它对于硬件的低成本、低功耗以及算法的实时性更为关注,所以研究主要集中在图像缩放算法及其硬件的实现。将一副图片的某一部分放大,此时图像可能会出现失真,变得模糊.我们需要把图像的失真现象消除,尽可能的恢复原图.在此我们使用了3种方法,并一一做了比较!(一).三

2、种算法的介绍一:最临近插值我们就举个简单 的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是 0255,代表该像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色 。假如图像的象素矩阵如下图所示(这个原始图把它叫做源图,Source):234 38 2267 44 1289 65 63这个矩阵中,元素坐标(x,y)是这样确定的,x从左到右,从0开始,y从上到下,也是从零开始,这是图象处理中最常用的坐标系,就是这样一个坐标:如果想把这副图放大为 4X4大小的图像,那么该怎么做呢?那么第一步肯定想到的是先把4X4的矩阵先画出来再说,好了矩阵画出来

3、了,如下所示,当然,矩阵的每个像素都是未知数,等待着我们去填充(这个将要被填充的图的叫做目标图,Destination):? ? ? ? ? ? ? ? ? ? ? ? ? 然后要往这个空的矩阵里面填值了,要填的值从哪里来来呢?是从源图中来,好,先填写目标图最左上角的象素,坐标为(0,0),那么该坐标对应源图中的坐标可以由如下公式得出: srcX=dstX* (srcWidth/dstWidth) , srcY = dstY * (srcHeight/dstHeight)好了,套用公式,就可以找到对应的原图的坐标了(0*(3/4),0*(3/4)=>(0*0.75,0*0.75)=>

4、;(0,0),找到了源图的对应坐标,就可以把源图中坐标为(0,0)处的234象素值填进去目标图的(0,0)这个位置了。接下来,如法炮制,寻找目标图中坐标为(1,0)的象素对应源图中的坐标,套用公式:(1*0.75,0*0.75)=>(0.75,0)结 果发现,得到的坐标里面竟然有小数,这可怎么办?计算机里的图像可是数字图像,象素就是最小单位了,象素的坐标都是整数,从来没有小数坐标。这时候采用的 一种策略就是采用四舍五入的方法(也可以采用直接舍掉小数位的方法),把非整数坐标转换成整数,好,那么按照四舍五入的方法就得到坐标(1,0),完整的 运算过程就是这样的:(1*0.75,0*0.75)

5、=>(0.75,0)=>(1,0)那么就可以再填一个象素到目标矩阵中了,同样是把源图中坐标为(1,0)处的像素值38填入目标图中的坐标。依次填完每个象素,一幅放大后的图像就诞生了,像素矩阵如下所示:234 38 22 22 67 44 12 12 89 65 63 63 89 65 63 63 这是一种最基本、最简单的图像缩放算法,效果也是最不好的,放大后的图像有很严重的马赛克;效果不好的根源就是其简单的最临近插值方法引入了严重的图像失真,比如,当由目标图的坐标反推得到的源图的的坐标是一个浮点数的时候,采用了四舍五 入的方法,直接采用了和这个浮点数最接近的象素的值,这种方法是很不科

6、学的,当推得坐标值为 0.75的时候,不应该就简单的取为1,既然是0.75,比1要小0.25 ,比0要大0.75 ,那么目标象素值其实应该根据这个源图中虚拟的点四周的四个真实的点来按照一定的规律计算出来的,这样才能达到更好的放大效果。几乎没什么效果,细看图像出现马赛克的情况更严重了!原因是放大后补充的像素点完全复制邻近最接近的像素点,并没有起到平滑过渡的作用.二:双线性插值 双线型内插值算法就是一种 比较好的图像缩放算法,它充分的利用了源图中虚拟点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,因此缩放效果比简单的最邻近插值要好很多。对于一个目的像素,设置坐标通过反向变换得到的浮点坐

7、标为(i+u,j+v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值0,1)区间的浮点数),则这个像素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即: f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)其中f(i,j)表示源图像(i,j)处的的像素值,以此类推。举个例子,现在假如源图的象素坐标为(1,1),反推得到的对应于源图的坐标是(0.75 , 0.75), 这其实

8、只是一个概念上的虚拟象素,实际在源图中并不存在这样一个象素,那么目标图的象素(1,1)的取值不能够由这个虚拟象素来决定,而只能由源图的这四 个象素共同决定:(0,0)(0,1)(1,0)(1,1),而由于(0.75,0.75)离(1,1)要更近一些,那么(1,1)所起的决定作用更大一 些,这从公式中的系数uv=0.75×0.75就可以体现出来,而(0.75,0.75)离(0,0)最远,所以(0,0)所起的决定作用就要小一些, 公式中系数为(1-u)(1-v)=0.25×0.25也体现出了这一特点;三:三次卷积插值三次卷积插值是一种更加复杂的插值方式。该算法利用待采样点周围1

9、6个点的灰度值作三次插值,不仅考虑到4 个直接相邻点的灰度影响,而且考虑到各邻点间灰度值变化率的影响。三次运算可以得到更接近高分辨率图像的放大效果,但也导致了运算量的急剧增加。我们考虑目的像素值(i+u,j+v)周围的16个像素值,则由下列公式得出目的像素值f(i+u,j+v):f(i+u,j+v) = A * B * CA= S(u + 1)S(u + 0)S(u - 1)S(u - 2) f(i-1, j-1)f(i-1, j+0)f(i-1, j+1)f(i-1, j+2) B= f(i+0, j-1)f(i+0, j+0)f(i+0, j+1)f(i+0, j+2) f(i+1, j-

10、1)f(i+1, j+0) f(i+1, j+1)f(i+1, j+2) f(i+2, j-1)f(i+2, j+0)f(i+2, j+1)f(i+2, j+2) S(v + 1) C= S(v + 0) S(v - 1) S(v - 2) 1-2*Abs(x)2+Abs(x)3 , 0<=Abs(x)<1 S(x)= 4-8*Abs(x)+5*Abs(x)2-Abs(x)3, 1<=Abs(x)<2 0 , Abs(x)>=2其中:S(x)是对 Sin(x*Pi)/x 的逼近(Pi是圆周率),通过极限计算,可以知道Sin(x*Pi)/x的范围在0pi之间(2)

11、.三种插值算法各有优缺点,我们来结合GUI图像分析 首先我们让图像在不加噪声的情况下它的缩放情况 从放大的表象来看,三次卷积法得到的效果最好,恢复图像的效果最好;双线性插值效果次之,它使得图像软化了;而最临近插值最差,它几乎没有作用.分析:他们恢复图像效果与他们的算子差别有关.最临近插值没用到算子,只是单纯的把要插入的点的最临近的像素点复制过来,所以对于图像像素梯度大的会加剧锐化效果;而双线性插值和三次卷积法的算子对比图如下:由图像可以明显看出,三次卷积法的算子更接近理想算子,所以它的效果更好.三次卷积法的算子即为上述的S(X);而双线性插值的算子为:s(t)=1-|t|; 接下来我们看缩放对

12、噪声的影响,使图像在加噪的情况下放大效果:从图中可以看出:插值算法对图像没有过滤作用.如果我们要利用插值算法使图像清晰,要先进行滤波操作.我们这里用的是维纳滤波,效果图如下:从图中可以看出,滤波后的图像再进行缩放效果很好.这里需要注意的是:图像如果先截图再加噪声,可以很好的滤波;而如果先加噪声再滤波,则滤不出来.由于我是用的matlab自带截图软件,所以并不太明白那个截图函数的内部代码.这个需要注意.结束语: 图像放大要注意的地方是插入的像素点越精确则放大的效果越接近原图.我们完全可以用更多的点来估算要插值的点.所以理论上还有四次插值或者更高的插值方式.但是,同时从上述可以看出,最临近插值计算

13、量最小,双线性插值次之,而三次卷积法算法最复杂.复杂的算法对于电脑要求更高,耗费的时间更长.经过对比,我认为:当图像放大后要求效果不是很高的情况下,双线性插值法就够用了;如果对图像要求很高,可用三次卷积法.或者可以设计出四次卷积法等等!附带:matlab代码双线性插值:clear;I=imread('11.jpg'); %读入原图像rows,cols,ch1=size(I); %获取原图像的行值,列值,彩色通道a=inputdlg('放大倍数:','inputs',1,'1');k1=num2str(uint16(rows)*st

14、r2double(a);k2=num2str(uint16(cols)*str2double(a)%defans='664'K1=str2double(k1);%获取图像行数,默认大小不变K2=str2double(k2);%获取图像列数,默认大小不变%K1=str2double(inputdlg('查看输出图像行数','output rows',1,num2str(uint16(rows)*5);%获取图像行数,默认大小不变%K2=str2double(inputdlg('查看输出图像列数','output cols&#

15、39;,1,num2str(uint16(cols)*5);%获取图像列数,默认大小不变width=K1;height=K2;out=uint8(zeros(width,height,ch1); %创造输出图像矩阵widthscale=rows/width; %原图像的宽与新图像的宽的比例,即行方向缩放比例heightscale=cols/height; %原图像的高与新图像的高的比例,即列方向缩放比例for i=1:ch1 %颜色通道循环 for x=6:width-6 %列循环 for y=6:height-6 %行循环 oldx=x*widthscale; %oldx,oldy为原坐标,

16、x,y为新坐标 oldy=y*heightscale; if(oldx/double(uint16(oldx)=1.0)&(oldy/double(uint16(oldy)=1.0) out(x,y,i)=I(int16(oldx),int16(oldy),i); %若oldx,oldy为整数,直接赋值 else u=oldx-fix(oldx); v=oldy-fix(oldy); a=double(fix(oldx); b=double(fix(oldy); Q11=double(I(a,b,i); %Q11赋值为I(a,b) Q12=double(I(a,b+1,i); %Q12

17、赋值为I(a,b+1) Q21=double(I(a+1,b,i); %Q21赋值为I(a+1,b) Q22=double(I(a+1,b+1,i); %Q22赋值为I(a+1,b+1) out(x,y,i)=uint8(1-u)*(1-v)*I(a,b,i)+(1-u)*v*I(a,b+1,i)+u*(1-v)*I(a+1,b,i)+u*v*I(a+1,b+1,i); %用双线性插值计算公式计算 end end endendI1=imresize(I,K1 K2);imshow(I1);figure;out1=imresize(out,K1 K2);imshow(out1);三次卷积法:cl

18、ear;I=imread('11.jpg'); %读入原图像rows,cols,ch1=size(I); %获取原图像的行值,列值,彩色通道a=inputdlg('放大倍数:','inputs',1,'1');k1=num2str(uint16(rows)*str2double(a); %获取每行像素点的RGB像素串k2=num2str(uint16(cols)*str2double(a) %获取每列像素点的RGB像素串K1=str2double(k1); %获取图像行数,默认大小不变K2=str2double(k2); %获取图

19、像列数,默认大小不变%K1=str2double(inputdlg('输出图像的行值','INPUT output rows',1,num2str(uint16(rows); %获取图像行数,默认大小不变%K2=str2double(inputdlg('输出图像的列数','INPUT output cols',1,num2str(uint16(cols); %获取图像列数,默认大小不变width=K1;height=K2;out=uint8(zeros(width,height,ch1); %设置输出图像大小widthscale=

20、rows/width; %行放大比例heightscale=cols/height; %列放大比例p=0;q=0;for n=1:ch1; %色彩通道 for j=5:K2-5 %输出列数 p=p+1; for i=5:K1-5 %输出行数 q=q+1; fu=i*widthscale-fix(i*widthscale); %算法因子u fv=j*heightscale-fix(j*widthscale); %算法因子v oldx=i*widthscale; %oldx为原图像行数点 oldy=j*heightscale; %oldy为原图像列数点 if(oldx/double(fix(oldx)=1.0) & (oldy/double(fix(oldy)=1.0) out(i,j,n)=I(fix(oldx),fix(oldy),n); else v0(p)=basic(1+fv); v1(p)=basic(fv); v2(p)=basic(fv-1); v3(p)=basic(fv-2); u0(q)=basic(1+fu); u1(q)=basic(fu); u2(q)=basic(fu-1); u3(q)=basi

温馨提示

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

评论

0/150

提交评论