图像缩放的双线性内插值算法的原理解析
- 格式:doc
- 大小:155.00 KB
- 文档页数:6
图像缩放算法及速度优化——(⼆)双线性插值 双线性插值作为OpenCV中默认使⽤的图像缩放算法,其效果和速度都是不错的。
并且效果也⽐较稳定,计算复杂度并不算太⾼。
我看了很多⽹上的算法,⾃⼰也没看太懂,下⾯是从⽹上找的双线性插值算法的讲解。
“图像的双线性插值放⼤算法中,⽬标图像中新创造的象素值,是由源图像位置在它附近的2*2区域4个邻近象素的值通过加权平均计算得出的。
双线性内插值算法放⼤后的图像质量较⾼,不会出现像素值不连续的的情况。
然⽽次算法具有低通滤波器的性质,使⾼频分量受损,所以可能会使图像轮廓在⼀定程度上变得模糊。
” 下⾯还是根据我⾃⼰的理解来继续讲述吧,相信读者中有很多⾼⼿,希望读者能给予我指点⼀下,让我也能更明⽩⼀些。
双线性插值算法和最近邻插值算法⽐较类似。
在最近邻插值算法中,⽬标图像中的某个点(x,y)是去源图像中找最邻近的⼀个点(x0, y0)即可。
⽬标图像中的点(x, y)对应于源图像中的点(x0',y0'),x0'、y0'很可能不是整数,⽽是⼩数,⽽最近邻插值算法是找其邻近整型值(int(x0'+0.5f),int(y0'+0.5f))(上篇⽂章中没有进⾏四舍五⼊)。
我们现在找x0', y0'所在位置旁边的四个点,根据这四个点与(x0',y0')距离的关系计算⽬标图像中(x,y)⼀点的像素值。
算法描述如下:(1)计算源图像与⽬标图像宽与⾼的⽐例w0 : 表⽰源图像的宽度h0 : 表⽰源图像的⾼度w1 : 表⽰⽬标图像的宽度h1 : 表⽰⽬标图像的⾼度float fw = float(w0-1)/(w1-1);float fh = float(h0-1)/(h1-1);(2)针对⽬标图像的⼀个点(x, y),计算在源图像中的对应坐标,结果为浮点数。
float x0 = x * fw;float y0 = y * fh;int x1 = int(x0);int x2 = x1 + 1;int y1 = int(y0);int y2 = y1+1;所求的源图像中的四个点坐标为(x1, y1) (x1, y2) (x2, y1) (x2,y2)(3)求周围四个点所占的权重⽐值如上图,fx1 = x0 - x1;fx2 = 1.0f - fx1;fy1 = y0 - y1;fy2 = 1.0f - fy1;float s1 = fx1*fy1;float s2 = fx2*fy1;float s3 = fx2*fy2;float s4 = fx1*fy2;我们以value(坐标)来代表取得此点的坐标值,则:value(x0,y0) = value(x2,y2)*s1+value(x1,y2)*s2+value(x1,y1)*s3+value(x2,y1)*s4;如果对上述运算不够明⽩的话,可以这样来求。
位图缩放快速算法位图缩放是图像处理领域中的一项基本操作,用于将图像的尺寸进行调整。
在进行位图缩放时,常常需要处理大量的像素点,因此如何快速地进行位图缩放成为一个重要的问题。
本文将介绍几种常见的位图缩放快速算法。
一、最近邻插值算法最近邻插值算法是最简单的位图缩放算法之一、该算法的思想是将目标图像的每一个像素点通过找到其在原图像中的最近邻像素点的值进行赋值。
该算法的优点是实现简单,计算量小,缺点是会导致图像的锯齿效应明显,图像质量较差。
二、双线性插值算法双线性插值算法是一种常用的位图缩放算法。
该算法的思想是根据目标图像像素点附近的四个原图像像素点的值进行加权平均得到目标图像像素点的值。
该算法的优点是图像质量较好,计算量适中,缺点是处理速度较慢。
三、双三次插值算法双三次插值算法是一种精确度较高的位图缩放算法。
该算法的思想是根据目标图像像素点附近的16个原图像像素点的值进行加权平均得到目标图像像素点的值。
该算法的优点是图像质量好,效果较好,缺点是计算量较大,处理速度较慢。
四、快速算法为了提高位图缩放的处理速度,研究人员提出了一些快速算法。
其中一种常见的方法是使用图像金字塔。
图像金字塔是一种将原图像进行多次连续缩放的处理方法,通过不断地降低图像的分辨率来提高算法的处理速度。
在进行位图缩放时,可以首先对原图像进行一次缩小,然后再对缩小后的图像进行缩小,重复该过程直到达到目标尺寸,最后再进行插值处理得到目标图像。
该方法可以大大减少计算量,提高算法的处理速度。
除了使用图像金字塔,还可以使用并行计算的方法来加速位图缩放。
通过将图像划分为多个子块,然后分别对每个子块进行缩放操作,最后再将所有子块合并得到目标图像。
该方法可以充分利用多核处理器的并行计算能力,提高算法的处理速度。
综上所述,位图缩放是图像处理中一个重要的操作,可以通过最近邻插值算法、双线性插值算法或双三次插值算法来实现。
为了提高算法的处理速度,可以使用图像金字塔或并行计算的方法。
视频监控图像缩放技术原理及实现方法【视频监控图像缩放技术原理及实现方法】随着科技的不断进步,视频监控系统已经成为了对于公共安全和个人财产保护至关重要的一项技术。
而其中的图像缩放技术,更是提高了视频监控系统的效能和可靠性。
本文将介绍视频监控图像缩放技术的原理及实现方法。
一、原理视频监控图像缩放技术的原理基于图像处理和计算机视觉技术。
其主要目标是将原始图像进行放大或缩小,以实现更好的图像分辨率和视野调整。
1. 双线性插值双线性插值是最常用的图像缩放方法之一。
它通过对原始图像进行插值计算,生成新的像素点来提高图像的清晰度和质量。
这种方法的原理是根据原始图像中已有的像素点的灰度值,计算出新的像素点的灰度值,并将其放置于相应的位置上。
2. 双立方插值双立方插值是一种更高级的图像缩放方法。
它同样是通过对原始图像进行插值计算,生成新的像素点。
不同的是,双立方插值方法会考虑附近像素点的灰度值,进行更精确的计算。
这样可以获得更平滑的图像缩放效果。
二、实现方法视频监控图像缩放技术的实现方法通常包括以下几个步骤:1. 图像采集视频监控系统首先需要实时采集监控区域的图像。
这一步通常使用高清摄像头或者网络摄像头来完成。
采集到的图像将作为后续处理的原始数据。
2. 图像预处理采集到的图像往往会受到各种因素的干扰,如光照不足、噪声等。
因此,需要进行图像预处理来提高图像质量和清晰度。
常见的图像预处理方法包括去噪、增强、调整亮度与对比度等。
3. 缩放算法选择根据实际需求,选择适合的缩放算法进行图像的缩放处理。
常见的算法有双线性插值和双立方插值,根据不同的场景和要求选择合适的算法。
4. 图像缩放在选择好合适的缩放算法后,将对图像进行缩放处理。
这一步骤中,会根据算法的原理和规则对图像进行插值计算,生成新的像素点,并放置在相应的位置上。
5. 图像后处理缩放完成后,可能需要进行图像的后处理。
例如,调整图像对比度、锐化图像等,以便更好地满足用户的需求。
编程且利用双线性插值实现图像的缩放一设计题目编程且利用双线性插值实现图像的缩放二设计目的1、熟悉matlab使用环境及工作原理;2、掌握图像缩放的原理;3、学会双线性插值法的应用;4、体会图像灰度值的变化过程。
三设计原理1 双线性插值算法简单比方原来的数值序列:0,10,20,30,40线性插值一次为:0,5,10,15,20,25,30,35,40即认为其变化(增减)是线形的,可以在坐标图上画出一条直线在数码相机技术中,这些数值可以代表组成一张照片的不同像素点的色彩、色度等指标。
为了方便理解,先考虑一维情况下的线性插值对于一个数列c,我们假设c[a]到c[a+1]之间是线性变化的那么对于浮点数x(a<=x< bdsfid="81" p=""><>把这种插值方式扩展到二维情况对于一个二维数组c,我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b 都是整数)那么对于浮点数的坐标(x,y)满足(a<=x<a+1,b<=y<b+1),我们可以先分别求出c(x,b)和c(x,b+1):< bdsfid="85" p=""></a+1,b<=y<b+1),我们可以先分别求出c(x,b)和c(x,b+1):<> c(x,b) = c[a+1]*(x-a)+c[a]*(1+a-x);c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);好,现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以:c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)这就是双线性插值2、图像缩放的基本原理:1)根据已有的数字图像重建物理图像。
c语⾔数字图像处理(⼆):图⽚放⼤与缩⼩-双线性内插法图像内插假设⼀幅⼤⼩为500 * 500的图像扩⼤1.5倍到750 * 750,创建⼀个750 * 750 的⽹格,使其与原图像间隔相同,然后缩⼩⾄原图⼤⼩,在原图中寻找最接近的像素(或周围的像素)进⾏赋值,最后再将结果放⼤最邻近内插法寻找最近的像素赋值双线性内插法v(x,y) = ax + by + cxy + d双线性内插法参数计算已知Q11, Q12, Q21, Q22,要插值的点为P点,⾸先在x轴上,对R1,R2两个点进⾏插值然后根据R1和R2对P点进⾏插值化简得对于边界值的处理,若x1 < 0 ,则直接令f(Q11), f(Q12) = 0处理结果原图扩⼤为6000 * 4000缩⼩为1000 * 500下⾯为代码实现的主要部分int is_in_array(short x, short y, short height, short width){if (x >= 0 && x < width && y >= 0 && y < height)return1;elsereturn0;}void bilinera_interpolation(short** in_array, short height, short width, short** out_array, short out_height, short out_width){double h_times = (double)out_height / (double)height,w_times = (double)out_width / (double)width;short x1, y1, x2, y2, f11, f12, f21, f22;double x, y;for (int i = 0; i < out_height; i++){for (int j = 0; j < out_width; j++){x = j / w_times;y = i / h_times;x1 = (short)(x - 1);x2 = (short)(x + 1);y1 = (short)(y + 1);y2 = (short)(y - 1);f11 = is_in_array(x1, y1, height, width) ? in_array[y1][x1] : 0; f12 = is_in_array(x1, y2, height, width) ? in_array[y2][x1] : 0; f21 = is_in_array(x2, y1, height, width) ? in_array[y1][x2] : 0; f22 = is_in_array(x2, y2, height, width) ? in_array[y2][x2] : 0; out_array[i][j] = (short)(((f11 * (x2 - x) * (y2 - y)) +(f21 * (x - x1) * (y2 - y)) +(f12 * (x2 - x) * (y - y1)) +(f22 * (x - x1) * (y - y1))) / ((x2 - x1) * (y2 - y1))); }}}。
图像插值技术——双线性插值法在图像处理中,如果需要对图像进⾏缩放,⼀般可以采取插值法,最常⽤的就是双线性插值法。
本⽂⾸先从数学⾓度推导了⼀维线性插值和⼆维线性插值的计算过程,并总结了规律。
随后将其应⽤到图像的双线性插值上,利⽤Matlab编程进⾏图像的缩放验证,实验证明,⼆维线性插值能够对图像做出较好的缩放效果。
数学⾓度的线性插值⼀维线性插值假设有⼀个⼀元函数 y=f(x) , 已知曲线上的两点,A 和 B 的坐标分别为 (x0,y0) 、(x1,y1) 。
现在要在A 和 B 之间通过插值计算出⼀个点 P ,若已知 P点的横坐标 x,如何求出 P点的纵坐标 y ?这⾥我们的插值之所以叫做线性插值,就是因为我们假定了 P 点落在 A 点和 B 点的连线上,使得他们的坐标之间满⾜线性关系。
所以,根据初中的知识,可以得到下⾯的等式:y−y0 y1−y0=x−x0 x1−x0这⾥我们令:α=x−x0 x1−x0于是,我们可以得到P点的纵坐标 y 的表达式:y=(1−α)f(x0)+αf(x1)⼆维线性插值⼀维线性插值可以扩展到⼆维的情况。
假设有⼀个⼆元函数 z=f(x,y) , 已知曲⾯上的四点,A 、B 、C、D的坐标分别为 (x0,y0) 、(x1,y0) 、(x1,y1)、(x0,y1) 。
现在要在A 、B 、C、D之间通过插值计算出⼀个点 P ,若已知 P点的坐标 (x,y),如何求出 P点的函数值坐标 z ?这⾥我们依旧可以仿照⼀维线性插值,进⾏计算。
假设先计算 y 轴⽅向的插值点 P0 和 P1 ,则根据上⾯的推导过程,且令α=y−y0 y1−y0则, P0 的取值 z0为:z0=(1−α)f(x0,y0)+αf(x0,y1) P1 的取值 z1为:z1=(1−α)f(x1,y0)+αf(x1,y1)再计算 x 轴⽅向的插值点 P,令β=x−x0 x1−x0则 P 的取值 z为:z=(1−β)z0+βz1整理得到下⾯的式⼦:z =(1−β)(1−α)f x 0,y 0+αf x 0,y 1+β(1−α)f x 1,y 0+αf x 1,y 1=(1−β)(1−α)f x 0,y 0+(1−β)αf x 0,y 1+β(1−α)f x 1,y 0+βαf x 1,y 1⼩结由⼀维线性插值过渡到⼆维线性插值,我们发现,⼆者在表达式上有相似的规律:⼀维线性插值:y =f (x )α=x p −x 0x 1−x 0y p =(1−α)f x 0+αf x 1⼆维线性插值:z =f (x ,y )α=x p −x 0x 1−x 0,β=y p −y 0y 1−y 0z p =(1−β)(1−α)f x 0,y 0+(1−β)αf x 0,y 1+β(1−α)f x 1,y 0+βαf x 1,y 1图像中的双线性插值我们可以⽤函数来表⽰⼀幅图像(假设为单通道)。
计算双线性变换的简便算法
双线性变换是一种简单而有效的图像缩放技术,它在许多领域中都得到了应用,已被广泛用于图像处理,模拟技术,多媒体等。
它的基本原理就是,在将一幅图像的尺寸缩放时,维持图像中每一个像素点的相对位置不变,以保持图像整体的结构稳定。
双线性变换是采用四点插值方法来进行双线性插值,原图像上的所有像素点都
会被拆分成四个小一点,称为方块点(标杆点),每个标杆点背后的灰度值就是要插值的结果。
在做双线性变换插值时,将被放大的图像上的每一点像素都向它背后的四个标杆点中选取四个像素值,然后用它们的灰度值的加权平均值(居中插值)来得到新像素的颜色值。
由于此算法比较简便,效率也比较高,它比双三次插值计算速度更快,为了满
足多媒体应用的要求,双线性变换算法主要应用在视频处理,它可以精确缩放图像,从而更好地节省计算资源,帮助提高多媒体应用的性能和用户体验。
双线性变换算法是一种高效而可靠的图像处理和数据建模技术,可实现图像的
精准缩放处理,节省空间和计算资源,优化用户体验。
这种技术作为一种图像处理算法,目前已经得到广泛的应用,能有效满足移动互联网的多媒体要求,进一步拓展活跃用户流量,增强用户留存和提升营销成效。
图像缩放原理
图像缩放原理是指通过改变图像的尺寸,使其在不改变内容的情况下适应于不同的显示设备或应用场景。
最常见的图像缩放方法有插值法、双线性插值法和双三次插值法。
插值法是最简单的图像缩放方法之一,其原理是通过已知像素点的亮度值来估计未知像素点的亮度值。
常见的插值算法有最近邻插值和双线性插值。
最近邻插值法的原理是将目标图像的坐标映射到原图像中,并找到离目标坐标最近的点的亮度值作为目标点的亮度值。
这种方法简单快速,但可能会引入锯齿状的边缘效应。
双线性插值法的原理是通过目标点周围的四个邻近点的亮度值进行加权平均,来估计目标点的亮度值。
这种方法可以平滑边缘,但会导致图像模糊。
双三次插值法是一种更高级的插值方法,其原理是通过目标点周围的16个邻近点的亮度值进行加权平均。
这种方法可以在保持图像细节的同时,减少锐化和伪影效果。
除了插值法,还有一些其他的图像缩放方法,如基于小波变换的图像缩放方法和基于域仿射变换的图像缩放方法。
这些方法都以不同的原理和算法来实现图像的缩放,以满足不同应用场景的需求。
双线性插值公式
双线性插值法是以空间坐标的连续变化来近似描述图像的颜色
变化的一种插值方法,是近年来在图像处理领域中应用非常广泛的一种技术。
双线性插值法的核心思想是将图像中的像素点看作多个二维空
间中的坐标点,利用空间坐标之间的连续变化来近似描述图像的颜色变化,而不是一点一点的绘制出来。
这样,就可以节省大量的时间去处理大量的图像。
双线性插值法的原理是利用四个空间坐标点的颜色值,在这四个空间坐标点的表面上进行插值,通过计算偏移量以及差值的大小,从而得出插值点的颜色值,来模拟图像的连续变化。
双线性插值法在图像处理过程中有着广泛的应用,比如图像压缩、色彩空间重定向、图像滤镜等等。
双线性插值法对图像处理具有重要的意义,它不仅能提升图像处理效率,而且由于插值过程是基于连续变化的,因此可以更加真实地模拟图像变化。
相比较于一点一点的处理,双线性插值法能有效的节省大量的时间去处理大量的图像。
双线性插值法的运用能够较好的解决图像处理过程中的问题,是提高图像处理技术的重要手段之一。
随着科技的发展,双线性插值法的应用范围也不断地扩大,也可以拓展到物理测量,建筑三维模型,模型加工实验等等领域,在诸多方面大有可为。
总结而言,双线性插值法是一种比较理想的图像处理技术,它既能提高处理图像的效率,又能够根据空间坐标连续变化来更加真实地模拟图像变化,它在图像处理领域中的前景十分广阔。
图像缩放的双线性内插值算法的原理解析
图像的缩放很好理解,就是图像的放大和缩小。
传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。
当然,在计算机上,我们不再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。
下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图,也就是用一个像素矩阵来描述图像的方法,对于另一种图像:用函数来描述图像的矢量图,不在本文讨论之列。
越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是0-255,代表该像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色。
假如图像的象素矩阵如下图所示(这个原始图把它叫做源图,Source):
234 38 22
67 44 12
89 65 63
这个矩阵中,元素坐标(x,y)是这样确定的,x从左到右,从0开始,y从上到下,也是从零开始,这是图象处理中最常用的坐标系,就是这样一个坐标:
---------------------->X
|
|
|
|
|
∨Y
如果想把这副图放大为4X4大小的图像,那么该怎么做呢?那么第一步肯定想到的是先把4X4的矩阵先画出来再说,好了矩阵画出来了,如下所示,当然,矩阵的每个像素都是未知数,等待着我们去填充(这个将要被填充的图的叫做目标图,Destination):
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
然后要往这个空的矩阵里面填值了,要填的值从哪里来来呢?是从源图中来,好,先填写目标图最左上角的象素,坐标为(0,0),那么该坐标对应源图中的坐标可以由如下公式得出:
srcX=dstX* (srcWidth/dstWidth) , srcY = dstY * (srcHeight/dstHeight)
好了,套用公式,就可以找到对应的原图的坐标了
(0*(3/4),0*(3/4))=>(0*0.75,0*0.75)=>(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)=>(0.75,0)=>(1,0)
那么就可以再填一个象素到目标矩阵中了,同样是把源图中坐标为(1,0)处的像素值38填入目标图中的坐标。
依次填完每个象素,一幅放大后的图像就诞生了,像素矩阵如下所示:
234 38 22 22
67 44 12 12
89 65 63 63
89 65 63 63
这种放大图像的方法叫做最临近插值算法,这是一种最基本、最简单的图像缩放算法,效果也是最不好的,放大后的图像有很严重的马赛克,缩小后的图像有很严重的失真;效果不好的根源就是其简单的最临近插值方法引入了严重的图像失真,比如,当由目标图的坐标反推得到的源图的的坐标是一个浮点数的时候,采用了四舍五入的方法,直接采用了和这个浮点数最接近的象素的值,这种方法是很不科学的,当推得坐标值为0.75的时候,不应该就简单的取为1,既然是0.75,比1要小0.25 ,比0要大0.75 ,那么目标象素值其实应该根据这个源图中虚拟的点四周的四个真实的点来按照一定的规律计算出来的,这样才能达到更好的缩放效果。
双线型内插值算法就是一种比较好的图像缩放算法,它充分的利用了源图中虚拟点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,因此缩放效果比简单的最邻近插值要好很多。
双线性内插值算法描述如下:
对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(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) 公式1
其中f(i,j)表示源图像(i,j)处的的像素值,以此类推。
比如,象刚才的例子,现在假如目标图的象素坐标为(1,1),那么反推得到的对应于源图的坐标是(0.75 , 0.75), 这其实只是一个概念上的虚拟象素,实际在源图中并不存在这样一个象素,那么目标图的象素(1,1)的取值不能够由这个虚拟象素来决定,而只能由源图的这四个象素共同决定:(0,0)(0,1)(1,0)(1,1),而由于(0.75,0.75)离(1,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也体现出了这一特点;
最邻近插值和双向性内插值缩放图片的效果对比:
原始图片
最邻近插值放大图片
双线型内插值放大图片
插值算法对于缩放比例较小的情况是完全可以接受的,令人信服的。
一般的,缩小0.5倍以上或放大3.0倍以下,对任何图像都是可以接受的。
最邻近插值(近邻取样法):
最临近插值的的思想很简单。
对于通过反向变换得到的的一个浮点坐标,对其进行简单的取整,得到一个整数型坐标,这个整数型坐标对应的像素值就是目的像素的像素值,也就是说,取浮点坐标最邻近的左上角点(对于DIB是右上角,因为它的扫描行是逆序存储的)对应的像素值。
可见,最邻近插值简单且直观,但得到的图像质量不高
双线性内插值:
对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(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)处的的像素值,以此类推
这就是双线性内插值法。
双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。
由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊
三次卷积法能够克服以上两种算法的不足,计算精度高,但计算亮大,他考虑一个浮点坐标(i+u,j+v)周围的16个邻点,目的像素值f(i+u,j+v)可由如下插值公式得到:
f(i+u,j+v) = [A] * [B] * [C]
[A]=[ 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-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是圆周率——π)
最邻近插值(近邻取样法)、双线性内插值、三次卷积法等插值算法对于旋转变换、错切变换、一般线性变换和非线性变换都适用。