图像缩放的双线性内插值算法的原理解析

合集下载

图像缩放算法及速度优化——(二)双线性插值

图像缩放算法及速度优化——(二)双线性插值

图像缩放算法及速度优化——(⼆)双线性插值 双线性插值作为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个原图像像素点的值进行加权平均得到目标图像像素点的值。

该算法的优点是图像质量好,效果较好,缺点是计算量较大,处理速度较慢。

四、快速算法为了提高位图缩放的处理速度,研究人员提出了一些快速算法。

其中一种常见的方法是使用图像金字塔。

图像金字塔是一种将原图像进行多次连续缩放的处理方法,通过不断地降低图像的分辨率来提高算法的处理速度。

在进行位图缩放时,可以首先对原图像进行一次缩小,然后再对缩小后的图像进行缩小,重复该过程直到达到目标尺寸,最后再进行插值处理得到目标图像。

该方法可以大大减少计算量,提高算法的处理速度。

除了使用图像金字塔,还可以使用并行计算的方法来加速位图缩放。

通过将图像划分为多个子块,然后分别对每个子块进行缩放操作,最后再将所有子块合并得到目标图像。

该方法可以充分利用多核处理器的并行计算能力,提高算法的处理速度。

综上所述,位图缩放是图像处理中一个重要的操作,可以通过最近邻插值算法、双线性插值算法或双三次插值算法来实现。

为了提高算法的处理速度,可以使用图像金字塔或并行计算的方法。

双线性插值图像放大算法优化及硬件实现

双线性插值图像放大算法优化及硬件实现

2、双线性插值硬件加速器设计
基于FPGA的双线性插值硬件加速器主要由输入模块、计算模块和输出模块三 部分组成。其中,输入模块负责接收来自外部的图像数据;计算模块负责执行双 线性插值算法;输出模块负责将计算结果输出到外部设备。
2、双线性插值硬件加速器设计
在计算模块中,我们采用了基于加权平均法和边缘保护法的双线性插值算法。 具体来说,我们对四个相邻像素点进行加权平均,并根据目标像素点的位置关系 分配不同的权重。同时,我们还会对目标像素点的周围像素点进行判断,如果存 在边缘信息,则会保护这些信息不被丢失。
2、双线性插值硬件加速器设计
在实现过程中,我们采用了Verilog硬件描述语言来编写算法的硬件实现代码。 在代码编写过程中,我们采用了流水线架构和并行计算技术,提高了算法的执行 效率。我们还采用了一些优化技巧,如逻辑优化、时序优化等,提高了硬件加速 器的性能和稳定性。
3、实验结果与分析
3、实验结果与分析
双线性插值图像放大算法优 化及硬件实现
目录
01 一、双线性插值算法 的优化
03 参考内容
02
二、双线性插值算法 的硬件实现
内容摘要
随着图像处理技术的发展,图像放大已成为图像处理中一个重要的环节。在 图像放大过程中,由于分辨率的降低和图像信息的损失,图像的质量往往会受到 严重影响。为了提高图像的质量,可以采用插值算法对图像进行放大。其中,双 线性插值算法是一种常用的方法,它通过对图像中相邻的四个像素点进行线性插 值,得到放大后的像素值。
2、边缘保护法
2、边缘保护法
在双线性插值算法中,当目标像素点位于图像边缘时,其周围的四个相邻像 素点可能会缺失。这时,如果直接进行线性插值,会导致放大后的图像边缘模糊 甚至出现黑边。为了解决这个问题,我们引入了边缘保护法。具体来说,我们在 计算目标像素点的值时,会根据其周围的像素点的位置关系,给它们分配不同的 权重。这样就可以更好地保护图像的边缘信息,提高图像的质量。

视频监控图像缩放技术原理及实现方法

视频监控图像缩放技术原理及实现方法

视频监控图像缩放技术原理及实现方法【视频监控图像缩放技术原理及实现方法】随着科技的不断进步,视频监控系统已经成为了对于公共安全和个人财产保护至关重要的一项技术。

而其中的图像缩放技术,更是提高了视频监控系统的效能和可靠性。

本文将介绍视频监控图像缩放技术的原理及实现方法。

一、原理视频监控图像缩放技术的原理基于图像处理和计算机视觉技术。

其主要目标是将原始图像进行放大或缩小,以实现更好的图像分辨率和视野调整。

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语言数字图像处理(二):图片放大与缩小-双线性内插法

c语言数字图像处理(二):图片放大与缩小-双线性内插法

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图像中的双线性插值我们可以⽤函数来表⽰⼀幅图像(假设为单通道)。

计算双线性变换的简便算法

计算双线性变换的简便算法

计算双线性变换的简便算法
双线性变换是一种简单而有效的图像缩放技术,它在许多领域中都得到了应用,已被广泛用于图像处理,模拟技术,多媒体等。

它的基本原理就是,在将一幅图像的尺寸缩放时,维持图像中每一个像素点的相对位置不变,以保持图像整体的结构稳定。

双线性变换是采用四点插值方法来进行双线性插值,原图像上的所有像素点都
会被拆分成四个小一点,称为方块点(标杆点),每个标杆点背后的灰度值就是要插值的结果。

在做双线性变换插值时,将被放大的图像上的每一点像素都向它背后的四个标杆点中选取四个像素值,然后用它们的灰度值的加权平均值(居中插值)来得到新像素的颜色值。

由于此算法比较简便,效率也比较高,它比双三次插值计算速度更快,为了满
足多媒体应用的要求,双线性变换算法主要应用在视频处理,它可以精确缩放图像,从而更好地节省计算资源,帮助提高多媒体应用的性能和用户体验。

双线性变换算法是一种高效而可靠的图像处理和数据建模技术,可实现图像的
精准缩放处理,节省空间和计算资源,优化用户体验。

这种技术作为一种图像处理算法,目前已经得到广泛的应用,能有效满足移动互联网的多媒体要求,进一步拓展活跃用户流量,增强用户留存和提升营销成效。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图像缩放的双线性内插值算法的原理解析
图像的缩放很好理解,就是图像的放大和缩小。

传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。

当然,在计算机上,我们不再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。

下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图,也就是用一个像素矩阵来描述图像的方法,对于另一种图像:用函数来描述图像的矢量图,不在本文讨论之列。

越是简单的模型越适合用来举例子,我们就举个简单的图像: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是圆周率——π)
最邻近插值(近邻取样法)、双线性内插值、三次卷积法等插值算法对于旋转变换、错切变换、一般线性变换和非线性变换都适用。

相关文档
最新文档