基于曲率驱动的类双线性图像快速插值方法
- 格式:pdf
- 大小:1015.45 KB
- 文档页数:8
图像缩放算法及速度优化——(⼆)双线性插值 双线性插值作为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点的最近的四个点。
基于CFA模式的一种改进型双线性图像插值算法
朱磊;毛欢
【期刊名称】《电子测量技术》
【年(卷),期】2009()8
【摘要】本文介绍了图像传感器常用的CFA模式原理,针对该图像模式常用插值算法的缺陷,提出了一种基于图像相关性和简单边缘检测的改进型双线性插值算法。
该算法具有算法简单,插值效果好,节约处理器指令周期等特点,可用于带有图像传感器的嵌入式系统中。
【总页数】4页(P122-125)
【关键词】图像插值;CFA模式;图像传感器;双线性插值
【作者】朱磊;毛欢
【作者单位】西安工程大学电子信息学院
【正文语种】中文
【中图分类】TP319
【相关文献】
1.一种改进的双线性插值图像放大算法 [J], 龚昌来;杨冬涛
2.一种改进的双线性插值图像放大算法 [J], 李永艳;付志兵
3.一种基于矢量方法的彩色图像双线性插值算法 [J], 方凯;李德华;金良海;朱美能
4.一种基于邻点法、双线性插值法和三次样条插值法的图片放缩聚合算法研究 [J],
金凯文
5.一种基于CFA插值系数熵的图像来源取证算法 [J], 谢建;潘晓中
因版权原因,仅展示原文概要,查看原文内容请购买。
图像插值技术——双线性插值法在图像处理中,如果需要对图像进⾏缩放,⼀般可以采取插值法,最常⽤的就是双线性插值法。
本⽂⾸先从数学⾓度推导了⼀维线性插值和⼆维线性插值的计算过程,并总结了规律。
随后将其应⽤到图像的双线性插值上,利⽤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图像中的双线性插值我们可以⽤函数来表⽰⼀幅图像(假设为单通道)。
双线性插值图像插值 ⽬前,终端显⽰器都由点阵的像素点构成,在表现⾮⽔平或者竖直的直线时,必然会出现直线的歪曲,即锯齿效应。
位图经过缩放、旋转等变换,都会使锯齿效应增强。
尤其当显⽰分辨率过低时,在表现⾮⽔平或竖直的直线以及明显边缘时,离散的像素点间灰度值缺少过渡,会有很明显的锯齿。
对于这种情况,我们需要对图像边缘进⾏柔化处理,使图像边缘看起来更平滑,更接近现实。
同样的,依空间坐标变换⽅法,计算得到的对应点坐标通常不是整数,如果简单地使⽤取整或者最邻近插值的⽅法得到⽬标图像,⽬标图像会有⽐较明显的锯齿效应。
对于这个问题,在处理过程中通常是采⽤双线性插值或双三次插值。
在均衡算法速度与图像质量的情况下,更倾向于使⽤双三次插值⽅法来完成图像处理中的灰度级插值。
最近邻插值 最近邻插值算法⼜称零阶插值,它是⼀种⽐较容易实现且算法复杂度较低的插值算法,其原理是取待插值点周围4个相邻像素点中欧式距离最短的⼀个邻点的灰度值作为该点的灰度值。
由于仅⽤对该插值点影响最⼤的(即最近的)像素的灰度值作为该点的值,没有考虑其他相邻像素的影响,因此插值后得到的图像容易产⽣块效应,造成图像模糊,放⼤效果⼀般不够理想。
双线性插值 双线性插值是有两个变量的插值函数的线性插值扩展,其核⼼思想是在两个⽅向分别进⾏⼀次线性插值。
其原理是待插点像素值取原图像中与其相邻的4个点像素值的⽔平、垂直两个⽅向上的线性内插,即根据待采样点与周围4个邻点的距离确定相应的权重,从⽽计算出待采样点的像素值。
根本上来说,双线性插值算法是⼀种加权算法,如图所⽰。
它以到最近四个像素点的距离为参考权值,经两次线性插值,综合得到当前点的灰度值。
计算公式如下: 从公式中我们可以看出,⽬标点的灰度值由周围四个像素点依权值取平均得到,有低通滤波的效果,故⽽能够起到抗锯齿的效果。
但此种插值⽅法中没有考虑相邻点间灰度值变化率的影响,因此具有低通滤波器的性质,会使放⼤后图像的重要细节受到损失,图像变得模糊不清。
三种插值算法最近邻插值法的双线性内插值:对于图像中一个目的像素,设置坐标通过反向变换得到的浮点坐标为(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个像素运算的结果, 由于效果好, 运算速度也不慢, 因而这种插值方法是一种很常见的算法, 普遍用在图像编辑软件、打印机驱动和数码相机上。
双线性插值算法
双线性插值(Bilinear Interpolation)是一种非常常见的插值算法,它可以用来插值两个或多个维度的数据,广泛应用于图像处理、机器学习等领域。
双线性插值的基本原理是:从数据中取出四个点,比如a、b、c、d,然后在这四个点上构建一个双线性曲面,曲面的函数为:f(x,y)=ax+by+cxy+d,其中a,b,c,d是待求的系数。
双线性插值的具体过程是:首先确定子区域的四个顶点,比如:a(x1,y1),b(x1,y2),c(x2,y1),d(x2,y2),接着在这四个顶点上求出曲面的函数,即:f(x,y)=ax+by+cxy+d,其中a,b,c,d是待求的系数,我们可以用矩阵求解法来解出这四个系数。
最后,对于子区域内的任一点,都可以用双线性插值算法来求出它的函数值:
f(x,y)=ax+by+cxy+d。
双线性插值算法的优势在于它可以用来插值两个或多个维度的数据,而且插值的精度高,可以达到很好的效果。
此外,双线性插值算法的运算速度也比较快,不需要太多的计算量,因此在实际应用中得到了广泛的应用。
综上所述,双线性插值算法是一种高效、精确的插值算法,广泛应用于图像处理、机器学习等领域。
它可以用来插值两个或多个维度
的数据,插值精度高,且运算速度快。
使用图像处理技术实现图像插值的方法图像插值是一种常用的图像处理技术,它通过在已知像素值的基础上,推断出未知像素的值,从而提高图像的分辨率。
在计算机视觉、图像处理和计算机图形学领域,图像插值被广泛应用于图像放大、图像重建、图像修复等任务中。
本文将介绍几种常见的图像插值方法,并探讨它们的优缺点。
第一种常见的图像插值方法是最近邻插值。
该方法简单直观,在放大图像时,每个新像素只采用其最近的已知像素的值。
最近邻插值的优点是计算速度快,适用于实时图像处理。
然而,最近邻插值方法会导致图像出现锯齿状的伪影,因为它没有考虑像素间的渐变过程。
第二种常见的图像插值方法是双线性插值。
相比于最近邻插值,双线性插值对像素间的渐变进行了考虑。
它利用已知像素周围的4个像素值进行加权平均,得到新像素的值。
这种插值方法克服了最近邻插值的锯齿伪影问题,使图像看起来更加平滑。
然而,双线性插值的计算量较大,在处理大型图像时可能会影响性能。
第三种常见的图像插值方法是双三次插值。
双三次插值在双线性插值的基础上进行了改进,增加了更多的已知像素进行加权平均。
它通过拟合像素周围16个像素值的二次曲线来计算新像素的值。
与双线性插值相比,双三次插值能够更好地保留图像的细节和纹理信息。
然而,双三次插值会导致图像出现一些模糊效果,尤其是在处理边缘和细节部分时。
除了上述常见的图像插值方法,还有一些更高级的插值方法,如 Lanczos 插值、B样条插值等。
这些方法考虑了更多像素的权重分布,能够更准确地估计未知像素的值。
在特定的应用场景下,它们能够取得更好的效果。
然而,这些高级插值方法也更加复杂,计算量更高。
在实际应用中,选择合适的图像插值方法需要根据具体的需求和限制来决定。
如果对计算性能要求较高,可选择最近邻插值或双线性插值;如果对图像质量要求较高,可以考虑双三次插值或其他高级插值方法。
还可以结合不同的插值方法,根据图像的不同区域或特征选择最适合的方法。
综上所述,图像插值是一种重要的图像处理技术,它通过推测未知像素的值来提高图像的分辨率。