双线性插值(内插)学习
- 格式:docx
- 大小:56.84 KB
- 文档页数:2
图像缩放算法及速度优化——(⼆)双线性插值 双线性插值作为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点的最近的四个点。
二维插值算法是一种用于在二维空间中估计未知数据点的方法。
它基于已知数据点的值和位置来推断未知数据点的值。
以下是常见的二维插值算法原理之一:双线性插值。
双线性插值是一种基于四个最近邻数据点进行估计的方法。
假设我们有一个二维网格,已知在四个顶点上的数据点的值和位置。
要估计某个位置处的未知数据点的值,双线性插值算法按照以下步骤进行:
1.找到目标位置的最近的四个已知数据点,通常称为左上、右上、左下和右下。
2.计算目标位置相对于这四个已知数据点的相对位置权重。
这可以通过计算目标位置到每个已知数据点的水平和垂直距离,然后根据距离来计算相对权重。
3.根据权重对四个已知数据点的值进行加权平均。
这里的加权平均可以使用线性插值进行计算。
4.得到目标位置的估计值作为插值结果。
双线性插值算法基于以下两个假设:
-在目标位置的附近,插值曲面在水平和垂直方向上是一致的,即呈现线性关系。
-已知数据点之间的变化不会很剧烈,即目标位置与附近已知数据点的值之间存在一定的连续性。
双线性插值算法是一种简单而有效的二维插值方法,适用于平滑、连续变化的数据。
但对于非线性、不规则的数据分布,或者存在边界情况的情况下,可能需要使用其他更复杂的插值算法来获得更准确的估计结果。
内插法怎么用导言:内插法是数值分析中常用的插值技术。
在实际问题中,往往需要根据给定的离散数据点,通过内插法计算出其他位置的数据点的值。
内插法的应用广泛,例如在地理信息系统中用于生成高程图,计算机图形学中用于图像处理,以及金融领域中用于补充缺失的数据点等等。
本文将介绍两种常见的内插法:线性插值和拉格朗日插值。
一、线性插值线性插值是一种简单但常用的内插法。
它基于两个已知数据点,通过线性关系推算中间点的值。
具体步骤如下:1. 确定两个已知数据点(x1, y1)和(x2, y2),其中x1 < x2。
2. 根据已知数据点构建线性插值函数:y = y1 + (x - x1) * (y2 - y1) / (x2 - x1)其中,y为待求的中间点的值,x为中间点的横坐标。
3. 将待求的中间点的横坐标代入插值函数,计算出中间点的纵坐标。
例如,已知数据点(0, 0)和(2, 4),求横坐标为1的中间点的纵坐标。
根据线性插值公式,代入已知数据点的值和待求的中间点的横坐标:y = 0 + (1 - 0) * (4 - 0) / (2 - 0)= 1 * 4 / 2= 2因此,在横坐标为1的位置上,中间点的纵坐标为2。
线性插值的优点是计算简单快捷,而缺点是插值精度相对较低。
二、拉格朗日插值拉格朗日插值是一种更精确的内插法,它利用多项式插值的思想。
具体步骤如下:1. 确定多个已知数据点(x1, y1),(x2, y2),...,(xn, yn),其中x1 < x2 < ... < xn。
2. 根据已知数据点构建拉格朗日插值多项式:L(x) = y1 * L1(x) + y2 * L2(x) + ... + yn * Ln(x)其中,L(x)为待求中间点的值,Li(x)为拉格朗日基函数。
拉格朗日基函数的定义为:Li(x) = (x - x1) * (x - x2) * ... * (x - xi-1) * (x - xi+1) * ... * (x - xn) / ((xi - x1) * (xi - x2) * ... * (xi - xi-1) * (xi - xi+1) * ... * (xi - xn))3. 将待求的中间点的横坐标代入拉格朗日插值多项式,计算出中间点的纵坐标。
三种插值算法最近邻插值法的双线性内插值:对于图像中一个目的像素,设置坐标通过反向变换得到的浮点坐标为(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-vf(i,j + (1-uvf(i,j+1 + u(1-vf(i+1,j + uvf(i+1,j+1其中 f(i,j表示源图像 (i,j处的的像素值,以此类推这就是双线性内插值法。
双线性内插值法计算量大,但缩放后图像质量高, 不会出现像素值不连续的的情况。
由于双线性插值具有低通滤波器的性质, 使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊插值的计算方法有很多, 比较常用的有最近像素插值算法、双线性插值算法、双三次插值算法和分形算法的四种。
其中, 最近像素插值算法是最简单的一种插值算法, 这种方法是当图片放大时, 缺少的像素通过直接使用与之最接近的原有像素的颜色生成, 也就是说照搬旁边的像素。
如图 1所示,当图片扩大时,要增加 X 点处的像素,由于 X 点与 A 、 B 这两个有效像素中的 B 点最接近,因此 X 点会直接照搬B 点的像素,从而使到 X 点生成的效果与 B 点一样。
虽然这种算法简单, 因此处理的速度很快, 但结果通常会产生明显可见的锯齿, 效果往往不佳。
双线性插值算法, 是指输出的图像的每个像素都是原图中四个像素运算的结果, 由于它是从原图四个像素中运算的, 因此这种算法很大程度上消除了锯齿现象, 而且效果也比较好。
双三次插值算法是双线性插值算法的改进算法,它输出图像的每个像素都是原图 16个像素运算的结果, 由于效果好, 运算速度也不慢, 因而这种插值方法是一种很常见的算法, 普遍用在图像编辑软件、打印机驱动和数码相机上。
三种插值算法最近邻插值法的双线性内插值:对于图像中一个目的像素,设置坐标通过反向变换得到的浮点坐标为(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-vf(i,j + (1-uvf(i,j+1 + u(1-vf(i+1,j + uvf(i+1,j+1其中 f(i,j表示源图像 (i,j处的的像素值,以此类推这就是双线性内插值法。
双线性内插值法计算量大,但缩放后图像质量高, 不会出现像素值不连续的的情况。
由于双线性插值具有低通滤波器的性质, 使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊插值的计算方法有很多, 比较常用的有最近像素插值算法、双线性插值算法、双三次插值算法和分形算法的四种。
其中, 最近像素插值算法是最简单的一种插值算法, 这种方法是当图片放大时, 缺少的像素通过直接使用与之最接近的原有像素的颜色生成, 也就是说照搬旁边的像素。
如图 1所示,当图片扩大时,要增加 X 点处的像素,由于 X 点与 A 、 B 这两个有效像素中的 B 点最接近,因此 X 点会直接照搬B 点的像素,从而使到 X 点生成的效果与 B 点一样。
虽然这种算法简单, 因此处理的速度很快, 但结果通常会产生明显可见的锯齿, 效果往往不佳。
双线性插值算法, 是指输出的图像的每个像素都是原图中四个像素运算的结果, 由于它是从原图四个像素中运算的, 因此这种算法很大程度上消除了锯齿现象, 而且效果也比较好。
双三次插值算法是双线性插值算法的改进算法,它输出图像的每个像素都是原图 16个像素运算的结果, 由于效果好, 运算速度也不慢, 因而这种插值方法是一种很常见的算法, 普遍用在图像编辑软件、打印机驱动和数码相机上。
基于双线性内插的图像处理算法及其优化
曹亚君;邵玉兰
【期刊名称】《铜仁职业技术学院学报》
【年(卷),期】2012(000)002
【摘要】双线性内插放大算法在平滑图像的同时会使边缘模糊。
针对此问题,提出一种基于双线性内插的增强图像轮廓优化算法,使用高通滤波器让高频分量通过,实现边缘细节锐化,提高了图像轮廓清晰度。
实验分析,优化算法更适于数字图像实时放大处理。
【总页数】3页(P40-42)
【作者】曹亚君;邵玉兰
【作者单位】商丘职业技术学院
【正文语种】中文
【中图分类】TP391.41
【相关文献】
1.基于双线性内插算法的多路视频缩放设计
2.基于双线性内插的图像处理算法及其优化
3.基于C6000的滑动窗口图像处理算法存储优化
4.基于双线性内插算法在水深断面测量中的应用
5.基于双线性内插模型的地理空间数据保密技术研究
因版权原因,仅展示原文概要,查看原文内容请购买。
图像缩放的双线性内插值算法的原理解析图像的缩放很好理解,就是图像的放大和缩小。
传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。
当然,在计算机上,我们不再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。
下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图,也就是用一个像素矩阵来描述图像的方法,对于另一种图像:用函数来描述图像的矢量图,不在本文讨论之列。
越是简单的模型越适合用来举例子,我们就举个简单的图像: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)这个位置了。
双线性插值
维基百科,自由的百科全书
双线性插值,又称为双线性内插。
在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。
红色的数据点与待插值得到的绿色点
假如我们想得到未知函数在点的值,假设我们已知函
数在, , ,
及四个点的值。
首先在x方向进行线性插值,得到
然后在y方向进行线性插值,得到
这样就得到所要的结果,
如果选择一个坐标系统使得的四个已知点坐标分别为(0, 0)、(0, 1)、(1, 0) 和(1, 1),那么插值公式就可以化简为
或者用矩阵运算表示为
与这种插值方法名称不同的是,这种插值方法的结果通
常不是线性的,它的形式是
常数的数目都对应于给定的f的数据点数目
线性插值的结果与插值的顺序无关。
首先进行y方向的插值,然后进
行x方向的插值,所得到的结果是一
样的。
双线性插值的一个显然的三维空间延
伸是三线性插值。