双线性-插值的图像缩放算法的研究与实现(常用版).doc
《双线性-插值的图像缩放算法的研究与实现(常用版).doc》由会员分享,可在线阅读,更多相关《双线性-插值的图像缩放算法的研究与实现(常用版).doc(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、双线性 插值的图像缩放算法的研究与实现(常用版)(可以直接使用,可编辑 完整版资料,欢迎下载)双线性 插值的图像缩放算法的研究与实现一、引言数字图像处理的对象因其涉及到社会的各个领域,倍受到越来越多的关注,而图像缩放作为数字图像处理中的基本操作尤为重要,在社会的很多领域都需要对图像进行放大和缩小。利用VC+的MFC类库中的StretchBlt函数可以很容易的实现图像放大和缩小,但是当放大或缩小的比率比较大时就容易出现失真现象,因此必须进行改进。本文提出了一种双线性插值算法,用以改进图像的缩放质量。二、空间变换图像的空间变换,也称几何变换或几何运算,包括图像的平移、旋转、镜像变换、转置、缩放等。
2、几何运算可改变图像中各物体之间的空间关系,这种运算可以被看成是将各物体在图像内移动。空间变换可如下表示:设(u,v)为源图像上的点,(x,y)为目标图像上的点,则空间变换就是将源图像上(u,v)处的颜色值与目标图像上(x,y)处的颜色对应起来。(u,v)?-(x,y)并具有以下关系:x=X(u,v),y=Y(u,v)(即由(u,v)计算对应点(x,y)(1.1)或u=U(x,y),v=V(x,y)(即由(x,y)反求对应点(u,v)(1.2)其中X(u,v)、Y(u,v)、U(x,y)、V(x,y)均为变换。由(1.1)对应的变换称作向前映射法也叫像素移交法,而由(1.2)对应的变换称作向后映
3、射法也叫像素填充法,向后映射法是向前映射法的逆。对于向前映射法来说,由于许多输入像素可能映射到输出图像的边界之外,所以,向前映射法有些浪费,而且每个输出像素的灰度值可能要由许多输入像素的灰度值来决定,因此要涉及多次运算。如果空间变换中包括缩小处理,则会有四个以上的输入像素来决定输出像素的灰度值;如果含有放大处理,则一些输出像素可能被漏掉。而向后映射算法是逐像素、逐行地产生输出图像。每个像素的灰度级由最多四个像素参与的插值所惟一确定,虽然向后映射法比向前映射法要复杂,但是向后映射法对于一般的应用却具有更为现实的意义。本文就是采取了向后映射法来实现图像缩放的。三.双线性插值最简单的插值算法是最邻近
4、插值,也称为零阶插值。它输出的像素灰度值就等于距离它映射到的位置最近的输入像素的灰度值,最邻近插值算法简单,在许多情况下都能得到令人满意的结果,但是当图像中包含像素之间灰度级有变化的细微结构时,最邻近算法会在图像中产生人为加工的痕迹。双线性插值算法计算量比零阶插值大,但缩放后图像质量高,不会出现像素值不连续的情况,这样就可以获得一个令人满意的结果。双线性插值是利用了需要处理的原始图像像素点周围的四个像素点的相关性,通过双线性算法计算得出的。对于一个目的坐标,通过向后映射法得到其在原始图像的对应的浮点坐标(i+u,j+v),其中i,j均为非负整数,u,v为0,1区间的浮点数,则这个像素的值f(i
5、+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所示,已知(0,0)、(0,1)、(1,0)、(1,1)四点的灰度,可以由相邻像素的灰度值f(0,0)和f(1,0)在X方向上线性插值求出(x,0)的灰度f(x,0),由另外两个相邻像素f(0,1)和f(1,1)在X方向上线性插值可求出(x,1
6、)的灰度f(x,1),最后由f(x,0)、f(x,1)在Y方向上进行线性插值就可以得到(x,y)的灰度f(x,y)。screen.width-333)this.width=screen.width-333四.算法1.算法假设原始图像大小为size=mn,其中m与n分别是原始图像的行数与列数。若图像的缩放因子是t(t0),则目标图像的大小size=tmtn。对于目标图像的某个像素点P(x,y)通过P*1/t可得到对应的原始图像坐标P(x1,y1),其中x1=x/t,y1=y/t,由于x1,y1都不是整数所以并不存在这样的点,这样可以找出与它相邻的四个点的灰度f1、f2、f3、f4,使用双线性插值
7、算法就可以得到这个像素点P(x1,y1)的灰度,也就是像素点P(x,y)的灰度。一个完整的双线性插值算法可描述如下:(1)通过原始图像和比例因子得到新图像的大小,并创建新图像。(2)由新图像的某个像素(x,y)映射到原始图像(x,y)处。(3)对x,y取整得到(xx,yy)并得到(xx,yy)、(xx+1,yy)、(xx,yy+1)和(xx+1,yy+1)的值。(4)利用双线性插值得到像素点(x,y)的值并写回新图像。(5)重复步骤(2)直到新图像的所有像素写完。2.核心代码/函数名Bilinear/参数floatk/返回值无/作用利用双线性插值来实现图像缩放voidCChildView:Bi
8、linear(floatk)intnBpp=m_imPicture.GetBPP();intwidthNew,heightNew;/新图像的宽度和高度floatwidthScale=(float)(1.0/k),heightScale=(float)(1.0/k);floatxx,yy;inta,b;intrr,gg,bb;/保存R、G、B分量/得到新图像的宽度和高度widthNew=(int)(m_imPicture.GetWidth()*k);heightNew=(int)(m_imPicture.GetHeight()*k);/利用新图像的宽度和高度来创建新图像m_imNewPictur
9、e.Destroy();m_imNewPicture.Create(widthNew,heightNew,nBpp);/得到新、老图像的每行的字节数intnPitch=m_imPicture.GetPitch();intnPitchNew=m_imNewPicture.GetPitch();/得到新、老图像的数据指针LPBYTEpBitsNew=(LPBYTE)m_imNewPicture.GetBits();LPBYTEpBits=(LPBYTE)m_imPicture.GetBits();if(m_imPicture.GetBPP()!=24)MessageBox(必须是24位图像或8位图
10、像);m_imNewPicture.Destroy();Invalidate();return;for(intx=(int)k;xwidthNew-k;x+)for(inty=(int)k;yheightNew-k;y+)xx=x*widthScale;yy=y*heightScale;if(xx=1e-8)xx=0;if(xxm_imPicture.GetWidth()-2)xx=(float)(m_imPicture.GetWidth()-2);if(yy=1e-8)yy=0;if(yym_imPicture.GetHeight()-2)yy=(float)(m_imPicture.Get
11、Height()-2);a=(int)xx;b=(int)yy;/分别得到对应像素的R、G、B值并用双线性插值得到新像素的R、G、B值intr11,r12,r21,r22;r11=*(pBits+b*nPitch+3*a+2);r12=*(pBits+b*nPitch+3*(a+1)+2);r21=*(pBits+(b+1)*nPitch+3*a+2);r22=*(pBits+(b+1)*nPitch+3*(a+1)+2);rr=(int)(r11*(a+1-xx)*(b+1-yy)+r12*(a+1-xx)*(yy-b)+r21*(xx-a)*(b+1-yy)+r22*(xx-a)*(yy-
12、b);intg11,g12,g21,g22;g11=*(pBits+b*nPitch+3*a+1);g12=*(pBits+b*nPitch+3*(a+1)+1);g21=*(pBits+(b+1)*nPitch+3*a+1);g22=*(pBits+(b+1)*nPitch+3*(a+1)+1);gg=(int)(g11*(a+1-xx)*(b+1-yy)+g12*(a+1-xx)*(yy-b)+g21*(xx-a)*(b+1-yy)+g22*(xx-a)*(yy-b);intb11,b12,b21,b22;b11=*(pBits+b*nPitch+3*a);b12=*(pBits+b*nP
13、itch+3*(a+1);b21=*(pBits+(b+1)*nPitch+3*a);b22=*(pBits+(b+1)*nPitch+3*(a+1);bb=(int)(b11*(a+1-xx)*(b+1-yy)+b12*(a+1-xx)*(yy-b)+b21*(xx-a)*(b+1-yy)+b22*(xx-a)*(yy-b);/将得到的新R、G、B值写到新图像中*(pBitsNew+y*nPitchNew+x*3)=min(255,bb);*(pBitsNew+y*nPitchNew+x*3+1)=min(255,gg);*(pBitsNew+y*nPitchNew+x*3+2)=min(2
14、55,rr);m_imPicture.Destroy();Invalidate();五.结语本文介绍了一种利用双线性插值来实现图像缩放的算法,通过图2可以看到这种算法和传统的利用StretchBlt来实现图像缩放相比具有很大的改善。StretchBlt实现的图像具有很大的失真,并且随着缩小的比率越大失真也越严重;而双线性插值算法则很好地解决了这个问题,可以得到很高的清晰度,这种方法可以广泛应用在图像变形、计算机动画、计算机辅助设计等领域。所附源代码在VC+.NET2003下编译通过。screen.width-333)this.width=screen.width-333图2注:左图是利用本文介
15、绍的双线性插值算法缩小一倍得到图像,右图是利用StretchBlt缩小一倍得到图像。【From】图像水印技术研究与实现文献综述 文献综述图像水印技术研究与实现一、前言部分:近年来,随着数字化技术的进步和Internet 的迅速发展,多媒体信息的交流达到了前所未有的深度和广度,其发布形式愈加丰富了。网络发布的形式逐渐成为一种重要的形式,伴随而来的是多媒体数据的版权保护问题。因此多媒体信息版权保护问题成了一项重要而紧迫的研究课题。为了防止窃取信息而使用的传统加密技术,在应用于图像版权保护上却存在一些缺点,比如图像被解密后与所有者无关,使用者可以对解密后的图像进行任何形式的电子传播;密文形式的图像更
16、加容易引起攻击者的注意;被加密的图像未解密前无法查看,而图像的传播就是为了被查看,如此将严重影响人们利用网络的效率1。为了解决这一难题,近几年国际上提出了一种新的有效的数字信息产品版权保护和数据安全维护的技术一一数字水印技术(digtal watermarking)。数字水印技术通过在原始媒体数据中嵌入秘密信息?水印来证实该数据的所有权归属。水印可以是代表所有权的文字、产品或所有ID、二维图像,视频或音频数据、随机序列等。主要应用于:媒体所有权的认定。即辨认所有权信息,媒体合法用户信息;媒体的传播跟算法研究。该子模块的研究为解决网络制造产品版权保护问题奠定了基础数字水印技术,又称数字签名技术,
17、成为信息隐藏技术的一种重要研究分支,为实现有效的信息版权保护提供了一种重要的手段。二、主题部分: 1 图像水印的基本原理 从图像处理的角度看,嵌入水印信号可以视为在强背景下迭加一个弱信号,只要迭加的水印信号强度低于人类视觉系统 Human Visual System ,HVS 的对比度门限,HVS 就无法感到信号的存在2。对比度门限受视觉系统的空间、时间和频率特性的影响。 因此通过对原始信号作一定的调整,有可能在不改变视觉效果的情况下嵌入一些信息,从数字通信的角度看,水印嵌入可理解为在一个宽带信道载体图像 上用扩频通信技术传输一个窄带信号水印信号 。 尽管水印信号具有一定的能量,但分布到信道中
18、任一频率上的能量是难以检测到的。 水印的译码检测 即是在有噪信道中弱信号的检测问题。 一般来说,为了使水印能有效地应用于版权保护中,水印必须满足如下特性:1 隐蔽性 水印在通常的视觉条件下应该是不可见的,水印的存在不会影响作品的视觉效果。2 鲁棒性 水印必须很难去掉希望不可能去掉 ,当然在理论上任何水印都可以去掉,只要对水印的嵌入过程有足够的了解,但是如果对水印的嵌入只是部分了解的话,任何破坏或消除水印的企图都应导致载体严重的降质而不可用。3 抗窜改性 与抗毁坏的鲁棒性不同,抗窜改性是指水印一旦嵌入到载体中,攻击者就很难改变或伪造。 鲁棒性要求高的应用,通常也需要很强的抗窜改性。 在版权保护中
19、,要达到好的抗窜改性是比较困难的。4 水印容量 嵌入的水印信息必须足以表示多媒体内容的创建者或所有者的标志信息,或是购买者的序列号。 这样在发生版权纠纷时,创建者或所有者的信息用于标示数据的版权所有者,而序列号用于标示违反协议而为盗版提供多媒体数据的用户。5 安全性 应确保嵌入信息的保密性和较低的误检测率。 水印可以是任何形式的数据,比如数值、文本、图像等。 所有的水印都包含一个水印嵌入系统和水印恢复系统。 水印的嵌入和提取过程分别。6 低错误率 即使在不受攻击或者无信号失真的情况下,也要求不能检测到水印漏检、false -negative 以及不存在水印的情况下,检测到水印虚检、false
20、- positive 的概率必须非常小2。 2 小波变换历史 小波变换(wavelet transformation)3基本概念是以某些特殊函数为基将数据过程或数据系列变换为级数系列以发现它的类似频谱的特征,从而实现数据处理。法国从事石油信号处理的工程师J.Morlet在1974年首先提出的,通过物理的直观和信号处理的实际需要经验的建立了反演公式,当时未能得到数学家的认可。正如1807年法国的热学工程师J./.rier提出任一函数都能展开成三角函数的无穷级数的创新概念未能得到认可一样。幸运的是,早在七十年代,A.Calderon表示定理的发现、Hardy空间的原子分解和无条件基的深入研究为小波
21、变换的诞生做了理论上的准备,而且/.omberg还构造了历史上非常类似于现在的小波基;1986年著名数学家Y.Meyer偶然构造出一个真正的小波基,并与S.Mallat合作建立了构造小波基的统一方法-多尺度分析之后,小波分析才开始蓬勃发展起来,其中比利时女数学家I.Daubechies撰写的小波十讲(Ten Lectures on Wavelets)对小波的普及起了重要的推动作用。与Fourier变换、视窗Fourier变换(Gabor变换)相比,具有良好的时频局部化特性,因而能有效的从信号中提取资讯,通过伸缩和平移等运算功能对函数或信号进行多尺度细化分析(Multiscale Analysi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 双线 图像 缩放 算法 研究 实现 常用
限制150内