双线性插值基本原理
- 格式:doc
- 大小:18.00 KB
- 文档页数:1
图像缩放算法及速度优化——(⼆)双线性插值 双线性插值作为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;如果对上述运算不够明⽩的话,可以这样来求。
双线性插值法(bilinearinterpolation)前⾯讲解了最近邻插值法缩放图像以及不⾜之处,本篇介绍另外⼀种插值法,介绍双线性插值法之前先介绍线性插值。
1. 线性插值 线性插值是指插值函数为⼀次多项式的插值⽅式,其在插值节点上的插值误差为零。
线性插值可以⽤来近似代替原函数,也可以⽤来计算得到查表过程中表中没有的数值。
如图所⽰现在已知y=f(x)的两个点坐标分别是(x0,y0),(x1,y1),现在在区间(x0,x1)内给定任意x,如何求y,线性插值法采⽤图中红点的y值代替f(x)的y值。
假设x处的直线上的红点坐标为(x,Y),那么Y约等于y。
根据图可以得到公式:⽤y0,y1表⽰得到公式很好记,将分式看做权重系数。
2. 双线性插值法 双线性插值法也叫双线性内插,其核⼼思想是在两个⽅向分别进⾏⼀次线性插值。
双线性插值作为数值分析中的⼀种插值算法,⼴泛应⽤在信号处理,数字图像和视频处理等⽅⾯。
如坐标图所⽰,⽤横纵坐标代表图像像素的位置,f(x,y)代表该像素点(x,y)的彩⾊值或灰度值。
将图像放⼤或缩⼩,⽬的像素dst对应的原像素src中的坐标转换公式如下,公式很好理解,可参考上⼀章最近邻插值法。
srcX=dstX*(srcWidth/dstWidth) srcY=dstY*(srcHeight/dstHeight) 上式中,dstX与dstY为⽬标图像的某个像素的横纵坐标,dstWidth与dstHeight为⽬标图像的长与宽;srcWidth与srcHeight为原图像的宽度与⾼度。
srcX,srcY为⽬标图像在该点(dstX,dstY)对应的原图像的坐标。
现在假设⽬标图像的像素点(x’,y’)映射到原图像中是(x,y),也就是图中的P点。
设Q11 = (x1, y1)、Q12 = (x1, y2)、Q21 = (x2, y1) 、Q22 = (x2, y2),图中Q11,Q12,Q21,Q22分别为距离P点的最近的四个点。
利用双线性插值算法实现图像放大
一、双线性插值算法的原理
双线性插值是指利用映射点在输入图像的4 个邻点的灰度值对映射点进行插值,即待插点处的数值用离待插点最近的四个点的值加权求得。
在同一行内根据待插值像素点与其前后的原图像像素点的位置距离进行加权线性插值,即离原图像像素点越近的待插值像素点,原图像像素的加权系数就越大;行间根据待插值行与其上下的原图像行间的距离进行加权线性插值,即离原图像行越近的待插值行,原图像行的加权系数就越大。
其原理图如下图所示。
双线性插值算法原理示意图
二、算法(MATLAB)
A=imread('1234.jpg');%读取图片
imshow(A);%显示图片
title('放大前原图像');%图片名字
C=imresize(A,5,'bilinear'); %双线性插值法
figure;%打开图片显示窗口
imshow(C);%重新显示放大后的图片
title('双线性插值法放大5倍');
三、程序运行结果截图。
C++双线性插值双线性插值原理:那么对于浮点数的坐标(x,y)满⾜(a<=x<a+1,b<=y<b+1),我们可以先分别求出c(x,b)和c(x,b+1): c(x,b) = c[a+1][b](x-a)+c[a][b](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)代码:1//双线性差值2int InterpBilinear(const QImage &image,double x,double y)3 {4int width = image.width();5int height = image.height();67//四个临近点的坐标 (x1,y1)、(x1,y2),(x2,y1),(x2,y2)8int x1,x2;9int y1,y2;1011//两个差值的中值12double f12,f34;13double epsilon = 0.0001;1415//四个临近像素坐标x像素值16double f1,f2,f3,f4;1718//计算四个临近坐标19 x1 = (int)x;20 x2 = x1 + 1;21 y1 = (int)y;22 y2 = y1+1;2324//不在图⽚的范围内25if((x < 0) || (x > width - 1) || (y < 0) || (y > height - 1))26 {27return -1;28 }else{29if(fabs(x - width+1)<=epsilon) //如果计算点在右测边缘30 {31//如果差值点在图像的最右下⾓32if(fabs(y - height+1)<=epsilon)33 {34 f1 = qGray(image.pixel(x1,y1));35return f1;36 }else {37 f1 = qGray(image.pixel(x1,y1));38 f3 = qGray(image.pixel(x1,y2));3940//图像右⽅的插值41return ((int) (f1 + (y-y1)*(f3-f1)));42 }43 }44//如果插⼊点在图像的下⽅45else if(fabs(y - height+1)<=epsilon){46 f1 = qGray(image.pixel(x1,y1));47 f2 = qGray(image.pixel(x2,y1));4849//图像下⽅的插值50return ((int) (f1 + (x-x1)*(f2-f1)));51 }52else {53//得计算四个临近点像素值54 f1 = qGray(image.pixel(x1,y1));55 f2 = qGray(image.pixel(x2,y1));56 f3 = qGray(image.pixel(x1,y2));57 f4 = qGray(image.pixel(x2,y2));5859//第⼀次插值60 f12 = f1 + (x-x1)*(f2-f1); //f(x,0)6162//第⼆次插值63 f34 = f3 + (x-x1)*(f4-f3); //f(x,1)6465//最终插值66return ((int) (f12 + (y-y1)*(f34-f12)));67 }68 }69 }。
图像插值技术——双线性插值法在图像处理中,如果需要对图像进⾏缩放,⼀般可以采取插值法,最常⽤的就是双线性插值法。
本⽂⾸先从数学⾓度推导了⼀维线性插值和⼆维线性插值的计算过程,并总结了规律。
随后将其应⽤到图像的双线性插值上,利⽤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图像中的双线性插值我们可以⽤函数来表⽰⼀幅图像(假设为单通道)。
计算双线性变换的简便算法
双线性变换是一种简单而有效的图像缩放技术,它在许多领域中都得到了应用,已被广泛用于图像处理,模拟技术,多媒体等。
它的基本原理就是,在将一幅图像的尺寸缩放时,维持图像中每一个像素点的相对位置不变,以保持图像整体的结构稳定。
双线性变换是采用四点插值方法来进行双线性插值,原图像上的所有像素点都
会被拆分成四个小一点,称为方块点(标杆点),每个标杆点背后的灰度值就是要插值的结果。
在做双线性变换插值时,将被放大的图像上的每一点像素都向它背后的四个标杆点中选取四个像素值,然后用它们的灰度值的加权平均值(居中插值)来得到新像素的颜色值。
由于此算法比较简便,效率也比较高,它比双三次插值计算速度更快,为了满
足多媒体应用的要求,双线性变换算法主要应用在视频处理,它可以精确缩放图像,从而更好地节省计算资源,帮助提高多媒体应用的性能和用户体验。
双线性变换算法是一种高效而可靠的图像处理和数据建模技术,可实现图像的
精准缩放处理,节省空间和计算资源,优化用户体验。
这种技术作为一种图像处理算法,目前已经得到广泛的应用,能有效满足移动互联网的多媒体要求,进一步拓展活跃用户流量,增强用户留存和提升营销成效。
双线性插值公式
双线性插值法是以空间坐标的连续变化来近似描述图像的颜色
变化的一种插值方法,是近年来在图像处理领域中应用非常广泛的一种技术。
双线性插值法的核心思想是将图像中的像素点看作多个二维空
间中的坐标点,利用空间坐标之间的连续变化来近似描述图像的颜色变化,而不是一点一点的绘制出来。
这样,就可以节省大量的时间去处理大量的图像。
双线性插值法的原理是利用四个空间坐标点的颜色值,在这四个空间坐标点的表面上进行插值,通过计算偏移量以及差值的大小,从而得出插值点的颜色值,来模拟图像的连续变化。
双线性插值法在图像处理过程中有着广泛的应用,比如图像压缩、色彩空间重定向、图像滤镜等等。
双线性插值法对图像处理具有重要的意义,它不仅能提升图像处理效率,而且由于插值过程是基于连续变化的,因此可以更加真实地模拟图像变化。
相比较于一点一点的处理,双线性插值法能有效的节省大量的时间去处理大量的图像。
双线性插值法的运用能够较好的解决图像处理过程中的问题,是提高图像处理技术的重要手段之一。
随着科技的发展,双线性插值法的应用范围也不断地扩大,也可以拓展到物理测量,建筑三维模型,模型加工实验等等领域,在诸多方面大有可为。
总结而言,双线性插值法是一种比较理想的图像处理技术,它既能提高处理图像的效率,又能够根据空间坐标连续变化来更加真实地模拟图像变化,它在图像处理领域中的前景十分广阔。
图像缩放的双线性内插值算法的原理解析图像的缩放很好理解,就是图像的放大和缩小。
传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。
当然,在计算机上,我们不再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。
下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图,也就是用一个像素矩阵来描述图像的方法,对于另一种图像:用函数来描述图像的矢量图,不在本文讨论之列。
越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是0-255,代表该像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色。
假如图像的象素矩阵如下图所示(这个原始图把它叫做源图,Source):234 38 2267 44 1289 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)这个位置了。
双线性插值原理
双线性插值是一种数据处理技术,它用于计算精确坐标所对应的值,尤其是在
图像处理中常被使用,它充分利用互联网的优势,允许更加有效的数据统计分析及图像处理搜索算法。
双线性插值方法是基于二维坐标计算数据点(连续数据)具体值的方法,它具
有很好的空间分辨率,即在决定像素值时只要调节一个像素点即可,而不需要调节整张图片。
简言之,双线性插值是以四边形网格结构中,以非网格结构求出值及像素点的方法。
在实际应用中,双线性插值主要在互联网图像技术中发挥作用,它允许用户自
定义图像的拉伸(或压缩)比例,所得图像仍然能够保持高清晰度和良好的图像清晰度。
此外,另一个应用则是在多维度数据分析中发挥作用,比如使用双线性插值可以精确地插入连续时间统计报表中的数据。
总之,双线性插值技术是互联网领域中的高级数据处理技术,通过它的应用可
以更加顺利地进行图像处理工作,减少非网格形结构中误差的发生,从而提升图像处理搜索算法的效率。
因此,双线性插值技术在数据分析和图像算法中是很重要的,受到众多科研工作者和研发团队的青睐。
双线性插值基本原理
双线性插值,又称为双线性内插。
在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。
我们以一个例子来介绍双线性插值原理:假如我们想得到未知函数f 在点P=f(x,y)的值,设f 在Q11=(x1,y1),Q12=(x1,y2),Q21=(x2,y1),Q22=(x2,y2) 四个点的值。
第一步:X 方向的线性插值,公式如下;
()),(),()()(),()()(f 222212121122211211
21111221y x whereR Q f x x x x Q f x x x x R f y x whereR Q f x x x x Q f x x x x R =--+--=
=--+--=, (1) 第二步 做完X 方向的插值后再做Y 方向的点R1和R2插值 ,由R1与R2计算P 点,公式如下:
)()()(21211122R f y y y y R f y y y y p f --+--= (2) 线性插值的结果与插值的顺序无关。
首先进行y 方向的插值,然后进行x 方向的插值,所得到的结果是一样的。
但双线性插值插值方法这种方法并不是线性的,首先进行y 方向的插值,然后进行x 方向的插值,与首先进行 x 方向的插值,然后进行 y 方向的插值,所得到的R1与R2是不一样的。