双线性插值 订阅
双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。双线性插值作为数值分析中的一种插值算法,广泛应用在信号处理,数字图像和视频处理等方面。 展开全文
双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。双线性插值作为数值分析中的一种插值算法,广泛应用在信号处理,数字图像和视频处理等方面。
信息
应    用
信号处理,数字图像和视频处理等
外文名
Bilinear Interpolation
别    称
双线性内插
中文名
双线性插值
涉及领域
数学
核心思想
在两个方向分别进行一次线性插值
双线性插值示例
已知的红色数据点与待插值得到的绿色点假如我们想得到未知函数f在点P= (x,y) 的值,假设我们已知函数f在Q11 = (x1,y1)、Q12 = (x1,y2),Q21 = (x2,y1) 以及Q22 = (x2,y2) 四个点的值。首先在x方向进行线性插值,得到R1和R2,然后在y方向进行线性插值,得到P.这样就得到所要的结果f(x,y).其中红色点Q11,Q12,Q21,Q22为已知的4个像素点. 第一步:X方向的线性插值,在Q12,Q22中插入蓝色点R2,Q11,Q21中插入蓝色点R1;第二步 :Y方向的线性插值 ,通过第一步计算出的R1与R2在y方向上插值计算出P点。 线性插值的结果与插值的顺序无关。首先进行y方向的插值,然后进行x方向的插值,所得到的结果是一样的。双线性插值的结果与先进行哪个方向的插值无关。如果选择一个坐标系统使得 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为f(x,y)=f(0,0)(1-x)(1-y)+f(1,0)x(1-y)+f(0,1)(1-x)y+f(1,1)xy
收起全文
精华内容
下载资源
问答
  • '''双线性插值''' img = cv2.imread('timg.jpeg', cv2.CV_LOAD_IMAGE_GRAYSCALE) # load the gray image cv2.imwrite('img.jpg', img) h, w = img.shape[:2] # shrink to half of the original a1 = np.array([[0.5,...
  • 能够实现对一幅图像的最近邻、双线性、双三次三种插值
  • 目录一、插值与图像缩放二、最近邻插值1、原理2、代码实现三、双线性插值1、原理2、代码实现 一、插值与图像缩放   首先举个例子说明插值过程,先看看matlab的插值函数 interp() 吧: x = -2 : 1 : 2; y = -2 : 1 ...
  • 示例中将一幅图的高和宽都扩大到5倍,造成原来相邻两像素不相邻了,中间间隔了好几个像素单位,这些像素怎样定义它们,简单的,数学上用双线性插值的方法求出未知的像素。本程序提供一个代码示例,供参考,希望对您...
  • 双线性插值算法的FPGA实现,Verilog代码,分享给大家一起学习!
  • 使用python对2维图像采用最邻近插值和双线性插值算法实现旋转
  • 光流(Optical flow or optic flow)是关于视域中的物体运动检测中的概念。用来描述相对于观察者的运动所造成的观测目标、表面或边缘的运动。 -wikipedia 光流计算所需要满足的两个光学特性假设: ...
  • 双线性插值算法

    2018-05-21 17:54:33
    双线性插值算法的C语言实现方式,双线性插值算法的C语言实现方式 可以参考一下。
  • 能够实现对一幅图像的最近邻、双线性、双三次三种插值
  • 双线性插值算法c++

    2018-02-25 16:38:30
    图像处理算法中的双线性插值算法的纯c++实现, 希望能给大家提供一些思路。
  • 动手实现双线性插值简单版本,详情见博文: https://blog.csdn.net/a435262767/article/details/103113635
  • 针对单板CMOS图像传感器采集的Bayer模板的数据,结合FPGA硬件结构FIFO_DFF构成3×3插值模板,提出一种改进的双线性插值算法。插值过程中利用当前要还原的分量同通道的水平、垂直以及两个对角线方向上的已知分量进行...
  • 实现一个图像缩放函数,可以对输入图像进行任意倍数的缩放...采用双线性插值进行重采样; X,Y方向的缩放倍数参函数参数的形式传入; 可以只考虑输入图像为3通道,8位深度的情况; 不能调用图像处理库的缩放函数来完成;
  • 图像缩放的代码,正文是双三次插值,用宏屏蔽掉的部分是双线性插值, 代码均来源于网络,我只是做了一些整理工作
  • 测试图片已经放到文件中,请自己配置vs2017 opencv 环境再进行测试 代码讲解见:https://blog.csdn.net/LZJSTUDY/article/details/103854590
  • 逆Preisach模型双线性插值数值实现-逆Preisach模型双线性插值数值实现.rar 本帖最后由 lgs2007m 于 2016-7-9 12:51 编辑 之前毕业设计弄了个Preisach迟滞模型GUI,只是参照别人的论文做的,没啥新的东西,分享...
  • matlab开发-图像处理使用双线性插值缩放动画。本文采用双线性插值法对图像进行正整数因子缩放。
  • 图片的旋转方法算法以及双线性插值,最邻近插值法 图片的旋转方法算法以及双线性插值,最邻近插值法
  • 基于OpenCV实现的RGB图像通道值分离、最邻近插值法、双线性插值法。
  • %读一幅图像 j=imrotate(i,30%图像旋转30度 k=imresize(i,2%图像放大两倍 t=imresize(i,2'bilinear%采用双线性插值法进行放大两倍 m=imresize(i,0.8%图像缩小到0.8倍 p=translate(strel(1, [25 25]%图像平移 img=...
  • 双线性插值matlab代码纳维斯托克斯 二维稳态不可压缩的有限元程序 Navier–Stokes方程是流体力学的基础。 有限元方法已成为解决Navier-Stokes方程的一种流行方法。 在本文中,使用MATLAB将Galerkin有限元方法用于...
  • 双线性插值进行图像缩放
  • matlab实现输入一张灰度图(rose.tif),对其进行2倍,4倍,8倍,16 倍,32倍的下采样,并对下采样的图像用双线性插值进行放大,计算对应的PSNR值
  • 函数的第一个参数为灰度图的文件路径,第二个参数和第三个参数为放缩后的h和w。运行函数即可查看结果。
  • 利用C++实现了最近邻插值以及双线性插值的图像插值算法,将两种算法并成一个API,可以加深对于这两个插值算法的理解
  • 双线性插值

    2021-01-13 17:57:00
    线性插值 根据百度百科的介绍:线性插值是指插值函数为一次多项式的插值方式。线性插值的几何意义即为利用过A点和B点的直线来近似表示原函数。线性插值可以用来近似代替原函数,也可以用来计算得到查表过程中表中...


    线性插值

    根据百度百科的介绍:线性插值是指插值函数为一次多项式的插值方式。线性插值的几何意义即为利用过A点和B点的直线来近似表示原函数。线性插值可以用来近似代替原函数,也可以用来计算得到查表过程中表中没有的数值。
    那么如下图所示,假设已知 y 1 = f ( x 1 ) y_1=f(x_1) y1=f(x1) y 2 = f ( x 2 ) y_2=f(x_2) y2=f(x2),现在要通过线性插值的方式得到区间 [ x 1 , x 2 ] [x_1, x_2] [x1,x2]内任何一点的 f ( x ) f(x) f(x)值。
    线性差值通过上图我们很容易得到以下公式:
    y − y 1 x − x 1 = y 2 − y 1 x 2 − x 1 \frac{y-y_1}{x-x_1}=\frac{y_2-y_1}{x_2-x_1} xx1yy1=x2x1y2y1
    变换可以得到:
    y = x 2 − x x 2 − x 1 y 1 + x − x 1 x 2 − x 1 y 2 y=\frac{x_2-x}{x_2-x_1}y_1+\frac{x-x_1}{x_2-x_1}y_2 y=x2x1x2xy1+x2x1xx1y2
    为了方便后面理解,我们也可以写成:
    f ( x ) = x 2 − x x 2 − x 1 f ( x 1 ) + x − x 1 x 2 − x 1 f ( x 2 ) f(x)=\frac{x_2-x}{x_2-x_1}f(x_1)+\frac{x-x_1}{x_2-x_1}f(x_2) f(x)=x2x1x2xf(x1)+x2x1xx1f(x2)


    双线性插值

    同样根据百度百科的介绍:双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。
    通过以上介绍我们知道,双线性插值就是分别在两个方向上分别进行一次简单的线性插值即可。如下图所示,每个点的数值是由 z = f ( x , y ) z=f(x, y) z=f(x,y) x , y x, y x,y两个变量决定。下图可理解为沿z轴方向的俯视图(画三维麻烦)。我们已知 Q 11 Q_{11} Q11, Q 12 Q_{12} Q12, Q 21 Q_{21} Q21, Q 22 Q_{22} Q22四个点的值,现在要在 Q 11 , Q 12 , Q 21 , Q 22 Q_{11}, Q_{12}, Q_{21}, Q_{22} Q11,Q12,Q21,Q22四个点中插入一个点 P P P,并算出 P P P点的值。
    双线性插值根据上图我们已知 Q 11 Q_{11} Q11, Q 12 Q_{12} Q12, Q 21 Q_{21} Q21, Q 22 Q_{22} Q22四个点的值:
    f ( Q 11 ) = f ( x 1 , y 1 )    f ( Q 12 ) = f ( x 1 , y 2 )    f ( Q 21 ) = f ( x 2 , y 1 )    f ( Q 22 ) = f ( x 2 , y 2 ) f(Q_{11}) =f(x_1, y_1)\\ \; \\ f(Q_{12})=f(x_1, y_2) \\ \; \\ f(Q_{21})=f(x_2, y_1) \\ \; \\ f(Q_{22})=f(x_2, y_2) f(Q11)=f(x1,y1)f(Q12)=f(x1,y2)f(Q21)=f(x2,y1)f(Q22)=f(x2,y2)
    在求 P P P点的值之前,首先根据线性插值的方法求得 R 1 , R 2 R_1, R_2 R1,R2的值。对于 R 1 R_1 R1点,我们可以根据 Q 11 , Q 21 Q_{11}, Q_{21} Q11,Q21两个点根据线性插值的办法得到。而 Q 11 , Q 21 Q_{11}, Q_{21} Q11,Q21两个点的 y y y值是相同的,所以两点的连线可看做只关于 x x x一个变量的函数。
    根据上面得到的线性插值公式:
    f ( x ) = x 2 − x x 2 − x 1 f ( x 1 ) + x − x 1 x 2 − x 1 f ( x 2 ) f(x)=\frac{x_2-x}{x_2-x_1}f(x_1)+\frac{x-x_1}{x_2-x_1}f(x_2) f(x)=x2x1x2xf(x1)+x2x1xx1f(x2)
    我们可以求得 R 1 R_1 R1点的值:
    f ( R 1 ) = x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) f(R_1)=\frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21}) f(R1)=x2x1x2xf(Q11)+x2x1xx1f(Q21)
    同理,我们可以得到 R 2 R_2 R2点的值:
    f ( R 2 ) = x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) f(R_2)=\frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22}) f(R2)=x2x1x2xf(Q12)+x2x1xx1f(Q22)
    得到 R 1 , R 2 R_1, R_2 R1R2的插值后,接着我们去计算 P P P点的插值。 R 1 , R 2 R_1, R_2 R1,R2两个点的 x x x值是相同的,所以两点的连线可看做只关于 y y y一个变量的函数。通过线性插值公式可以得到:
    f ( P ) = y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) f(P)=\frac{y_2-y}{y_2-y_1}f(R_1)+\frac{y-y_1}{y_2-y_1}f(R_2) f(P)=y2y1y2yf(R1)+y2y1yy1f(R2)
    带入 f ( R 1 ) , f ( R 2 ) f(R_1), f(R_2) f(R1)f(R2)后可得到:
    f ( P ) = ( x 2 − x ) ( y 2 − y ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 11 ) + ( x − x 1 ) ( y 2 − y ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 21 )                       + ( x 2 − x ) ( y − y 1 ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 12 ) + ( x − x 1 ) ( y − y 1 ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 22 ) f(P) = \frac{(x_2-x)(y_2-y)}{(x_2-x_1)(y_2-y_1)}f(Q_{11})+ \frac{(x-x_1)(y_2-y)}{(x_2-x_1)(y_2-y_1)}f(Q_{21}) \\ \; \\ \;\;\;\;\;\;\;\;\; + \frac{(x_2-x)(y-y_1)}{(x_2-x_1)(y_2-y_1)}f(Q_{12})+\frac{(x-x_1)(y-y_1)}{(x_2-x_1)(y_2-y_1)}f(Q_{22}) f(P)=(x2x1)(y2y1)(x2x)(y2y)f(Q11)+(x2x1)(y2y1)(xx1)(y2y)f(Q21)+(x2x1)(y2y1)(x2x)(yy1)f(Q12)+(x2x1)(y2y1)(xx1)(yy1)f(Q22)


    图像处理中的双线性插值

    在图像处理中,常见的坐标系如下图所示,以图像左上角为坐标原点,水平向右为x轴正方向,竖直向下为y轴正方向。注意像素值是从 ( 0 , 0 ) (0, 0) (0,0)点开始,假设我们在图像中插入一个点 P P P,离 P P P点最近的相邻四个像素点是 Q 11 , Q 12 , Q 21 , Q 22 Q_{11}, Q_{12}, Q_{21}, Q_{22} Q11,Q12,Q21,Q22并利用双线性插值的方法求其值。

    • 前面我们已经得到了双线性插值的计算公式(由于图像中的y轴方向与之前的方向相反,我将相邻四个像素点的下标进行了调整,故公式不变):
      f ( P ) = ( x 2 − x ) ( y 2 − y ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 11 ) + ( x − x 1 ) ( y 2 − y ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 21 )                       + ( x 2 − x ) ( y − y 1 ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 12 ) + ( x − x 1 ) ( y − y 1 ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 22 ) f(P) = \frac{(x_2-x)(y_2-y)}{(x_2-x_1)(y_2-y_1)}f(Q_{11})+ \frac{(x-x_1)(y_2-y)}{(x_2-x_1)(y_2-y_1)}f(Q_{21}) \\ \; \\ \;\;\;\;\;\;\;\;\; + \frac{(x_2-x)(y-y_1)}{(x_2-x_1)(y_2-y_1)}f(Q_{12})+\frac{(x-x_1)(y-y_1)}{(x_2-x_1)(y_2-y_1)}f(Q_{22}) f(P)=(x2x1)(y2y1)(x2x)(y2y)f(Q11)+(x2x1)(y2y1)(xx1)(y2y)f(Q21)+(x2x1)(y2y1)(x2x)(yy1)f(Q12)+(x2x1)(y2y1)(xx1)(yy1)f(Q22)

    图像中的双线性插值

    • 由于 Q 11 , Q 12 , Q 21 , Q 22 Q_{11}, Q_{12}, Q_{21}, Q_{22} Q11,Q12,Q21,Q22四个点是图像中相邻的像素,故有:
      x 2 − x 1 = 1 ,    y 2 − y 1 = 1 x_2-x_1=1,\ \ y_2-y_1=1 x2x1=1,  y2y1=1

    • 带入公式进一步化简可得:
      f ( P ) = ( x 2 − x ) ( y 2 − y ) f ( Q 11 ) + ( x − x 1 ) ( y 2 − y ) f ( Q 21 )                       + ( x 2 − x ) ( y − y 1 ) f ( Q 12 ) + ( x − x 1 ) ( y − y 1 ) f ( Q 22 ) f(P) = (x_2-x)(y_2-y)f(Q_{11})+ (x-x_1)(y_2-y)f(Q_{21}) \\ \; \\ \;\;\;\;\;\;\;\;\; + (x_2-x)(y-y_1)f(Q_{12})+(x-x_1)(y-y_1)f(Q_{22}) f(P)=(x2x)(y2y)f(Q11)+(xx1)(y2y)f(Q21)+(x2x)(yy1)f(Q12)+(xx1)(yy1)f(Q22)

    • 我们令:
      x − x 1 = u ,        y − y 1 = v x-x_1=u,\; \; \; y-y_1=v xx1=u,yy1=v

    • 带入公式可得:
      f ( P ) = ( 1 − u ) ( 1 − v ) f ( Q 11 ) + u ( 1 − v ) f ( Q 21 )                       + ( 1 − u ) v f ( Q 12 ) + u v f ( Q 22 ) f(P) = (1-u)(1-v)f(Q_{11})+ u(1-v)f(Q_{21}) \\ \; \\ \;\;\;\;\;\;\;\;\; + (1-u)vf(Q_{12})+uvf(Q_{22}) f(P)=(1u)(1v)f(Q11)+u(1v)f(Q21)+(1u)vf(Q12)+uvf(Q22)

    • 我们令:
      x 1 = i ,        y 1 = j f ( Q 11 ) = f ( i , j ) x_1=i,\;\;\;y_1=j\\ f(Q_{11})=f(i,j) x1=i,y1=jf(Q11)=f(i,j)

    • 那么有:
      f ( Q 11 ) = f ( i , j ) ,        f ( Q 12 ) = f ( i , j + 1 ) f ( Q 21 ) = f ( i + 1 , j ) ,        f ( Q 22 ) = f ( i + 1 , j + 1 ) f(Q_{11})=f(i,j),\;\;\;f(Q_{12})=f(i,j+1)\\ f(Q_{21})=f(i+1,j),\;\;\;f(Q_{22})=f(i+1,j+1) f(Q11)=f(i,j),f(Q12)=f(i,j+1)f(Q21)=f(i+1,j),f(Q22)=f(i+1,j+1)

    • 进一步带入公式得:
      f ( P ) = ( 1 − u ) ( 1 − v ) f ( i , j ) + u ( 1 − v ) f ( i + 1 , j )                                       + ( 1 − u ) v f ( i , j + 1 ) + u v f ( i + 1 , j + 1 ) f(P) = (1-u)(1-v)f(i,j)+ u(1-v)f(i+1,j) \\ \; \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; + (1-u)vf(i,j+1)+uvf(i+1,j+1) f(P)=(1u)(1v)f(i,j)+u(1v)f(i+1,j)+(1u)vf(i,j+1)+uvf(i+1,j+1)
      以上公式中,你觉得哪个好理解,你就用哪个。


    示例1

    假设 P P P点的坐标是 ( 2.6 , 2.4 ) (2.6,2.4) (2.6,2.4),那么距离最近的四个像素点是 ( 2 , 2 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 3 , 3 ) (2,2),(2,3),(3,2),(3,3) (2,2),(2,3),(3,2),(3,3)那么 u = 0.6 , v = 0.4 u=0.6,v=0.4 u=0.6,v=0.4,假设:
    f ( 2 , 2 ) = 20 ,    f ( 2 , 3 ) = 15 f ( 3 , 2 ) = 30 ,    f ( 3 , 3 ) = 40 f(2,2)=20,\;f(2,3)=15\\ f(3,2)=30,\;f(3,3)=40 f(2,2)=20,f(2,3)=15f(3,2)=30,f(3,3)=40
    示例1通过上面的公式:
    f ( P ) = ( 1 − u ) ( 1 − v ) f ( i , j ) + u ( 1 − v ) f ( i + 1 , j )                                       + ( 1 − u ) v f ( i , j + 1 ) + u v f ( i + 1 , j + 1 ) f(P) = (1-u)(1-v)f(i,j)+ u(1-v)f(i+1,j) \\ \; \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; + (1-u)vf(i,j+1)+uvf(i+1,j+1) f(P)=(1u)(1v)f(i,j)+u(1v)f(i+1,j)+(1u)vf(i,j+1)+uvf(i+1,j+1)
    计算可得(一般为小数时,会四舍五入):
    f ( P ) = 0.4 × 0.6 × 20 + 0.6 × 0.6 × 30                                             + 0.4 × 0.4 × 15 + 0.6 × 0.4 × 40 = 27.6 ≈ 28 f(P) = 0.4\times0.6\times20+ 0.6\times0.6\times30 \\ \; \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; + 0.4\times0.4\times15+0.6\times0.4\times40=27.6\approx28 f(P)=0.4×0.6×20+0.6×0.6×30+0.4×0.4×15+0.6×0.4×40=27.628


    示例2(opencv)

    下面使用opencv中的resize函数(插值方法选择双线性插值)来进行测试。首先创建一个 3 × 3 3\times3 3×3的灰度图片,参数如下:

    [[30, 20, 10],
     [10, 40, 60],
     [20, 30, 40]]
    

    下图为该 3 × 3 3\times3 3×3灰度图片的grid网格(蓝色),从 ( 0 , 0 ) (0,0) (0,0)点开始。现在要通过双线性插值的方式resize到 2 × 2 2\times2 2×2大小。首先,需要计算resize后 2 × 2 2\times2 2×2大小的灰度图片映射在原图像( 3 × 3 3\times3 3×3灰度图片)上的坐标。

    根据计算公式( d s t dst dst表示resize后的信息, s r c src src为resize前的信息):
    X = ( d s t X + 0.5 ) × ( s r c W i d t h / d s t W i d t h ) − 0.5 Y = ( d s t Y + 0.5 ) × ( s r c H e i g h t / d s t H e i g h t ) − 0.5 X = (dstX+0.5)\times(srcWidth/dstWidth)-0.5 \\ Y = (dstY+0.5)\times(srcHeight/dstHeight)-0.5 X=(dstX+0.5)×(srcWidth/dstWidth)0.5Y=(dstY+0.5)×(srcHeight/dstHeight)0.5
    可以得到 2 × 2 2\times2 2×2灰度图片 ( 0 , 0 ) (0,0) (0,0)点坐标映射在原图上的坐标:
    x = ( 0 + 0.5 ) × ( 3 / 2 ) − 0.5 = 0.25 y = ( 0 + 0.5 ) × ( 3 / 2 ) − 0.5 = 0.25 x = (0+0.5)\times(3/2)-0.5=0.25 \\ y = (0+0.5)\times(3/2)-0.5=0.25 x=(0+0.5)×(3/2)0.5=0.25y=(0+0.5)×(3/2)0.5=0.25
    以此类推,可得到如下图所示的黄色grid网格:

    opencvtest
    根据上面我们所求得的双线性插值公式计算这四个点的值:

    • 对于点 ( 0.25 , 0.25 ) (0.25,0.25) (0.25,0.25),周围最近的四个像素是 ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) (0,0),(1,0),(0,1),(1,1) (0,0),(1,0),(0,1),(1,1)可得 u = 0.25 , v = 0.25 u=0.25,v=0.25 u=0.25,v=0.25:
      f ( 0.25 , 0.25 ) = ( 1 − u ) ( 1 − v ) f ( 0 , 0 ) + u ( 1 − v ) f ( 1 , 0 )                                               + ( 1 − u ) v f ( 0 , 1 ) + u v f ( 1 , 1 )    = 0.75 ∗ 0.75 ∗ 30 + 0.25 ∗ 0.75 ∗ 20 + 0.75 ∗ 0.25 ∗ 10 + 0.25 ∗ 0.25 ∗ 40 = 25 f(0.25,0.25) = (1-u)(1-v)f(0,0)+ u(1-v)f(1,0) \\ \; \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; + (1-u)vf(0,1)+uvf(1,1) \\ \;\\ =0.75*0.75*30+0.25*0.75*20+0.75*0.25*10+0.25*0.25*40=25 f(0.25,0.25)=(1u)(1v)f(0,0)+u(1v)f(1,0)+(1u)vf(0,1)+uvf(1,1)=0.750.7530+0.250.7520+0.750.2510+0.250.2540=25

    • 对于点 ( 1.75 , 0.25 ) (1.75,0.25) (1.75,0.25),周围最近的四个像素是 ( 1 , 0 ) , ( 2 , 0 ) , ( 1 , 1 ) , ( 2 , 1 ) (1,0),(2,0),(1,1),(2,1) (1,0),(2,0),(1,1),(2,1)可得 u = 0.75 , v = 0.25 u=0.75,v=0.25 u=0.75,v=0.25:
      f ( 1.75 , 0.25 ) = ( 1 − u ) ( 1 − v ) f ( 1 , 0 ) + u ( 1 − v ) f ( 2 , 0 )                                               + ( 1 − u ) v f ( 1 , 1 ) + u v f ( 2 , 1 )    = 0.25 ∗ 0.75 ∗ 20 + 0.75 ∗ 0.75 ∗ 10 + 0.25 ∗ 0.25 ∗ 40 + 0.75 ∗ 0.25 ∗ 60 = 23.125 ≈ 23 f(1.75,0.25) = (1-u)(1-v)f(1,0)+ u(1-v)f(2,0) \\ \; \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; + (1-u)vf(1,1)+uvf(2,1) \\ \;\\ =0.25*0.75*20+0.75*0.75*10+0.25*0.25*40+0.75*0.25*60=23.125\approx23 f(1.75,0.25)=(1u)(1v)f(1,0)+u(1v)f(2,0)+(1u)vf(1,1)+uvf(2,1)=0.250.7520+0.750.7510+0.250.2540+0.750.2560=23.12523

    • 对于点 ( 0.25 , 1.75 ) (0.25,1.75) (0.25,1.75),周围最近的四个像素是 ( 0 , 1 ) , ( 1 , 1 ) , ( 0 , 2 ) , ( 1 , 2 ) (0,1),(1,1),(0,2),(1,2) (0,1),(1,1),(0,2),(1,2)可得 u = 0.25 , v = 0.75 u=0.25,v=0.75 u=0.25,v=0.75:
      f ( 0.25 , 1.75 ) = ( 1 − u ) ( 1 − v ) f ( 0 , 1 ) + u ( 1 − v ) f ( 1 , 1 )                                               + ( 1 − u ) v f ( 0 , 2 ) + u v f ( 1 , 2 )    = 0.75 ∗ 0.25 ∗ 10 + 0.25 ∗ 0.25 ∗ 40 + 0.75 ∗ 0.75 ∗ 20 + 0.25 ∗ 0.75 ∗ 30 = 21.25 ≈ 21 f(0.25,1.75) = (1-u)(1-v)f(0,1)+ u(1-v)f(1,1) \\ \; \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; + (1-u)vf(0,2)+uvf(1,2) \\ \;\\ =0.75*0.25*10+0.25*0.25*40+0.75*0.75*20+0.25*0.75*30=21.25\approx21 f(0.25,1.75)=(1u)(1v)f(0,1)+u(1v)f(1,1)+(1u)vf(0,2)+uvf(1,2)=0.750.2510+0.250.2540+0.750.7520+0.250.7530=21.2521

    • 对于点 ( 1.75 , 1.75 ) (1.75,1.75) (1.75,1.75),周围最近的四个像素是 ( 1 , 1 ) , ( 2 , 1 ) , ( 1 , 2 ) , ( 2 , 2 ) (1,1),(2,1),(1,2),(2,2) (1,1),(2,1),(1,2),(2,2)可得 u = 0.75 , v = 0.75 u=0.75,v=0.75 u=0.75,v=0.75:
      f ( 1.75 , 1.75 ) = ( 1 − u ) ( 1 − v ) f ( 1 , 1 ) + u ( 1 − v ) f ( 2 , 1 )                                               + ( 1 − u ) v f ( 1 , 2 ) + u v f ( 2 , 2 )    = 0.25 ∗ 0.25 ∗ 40 + 0.75 ∗ 0.25 ∗ 60 + 0.25 ∗ 0.75 ∗ 30 + 0.75 ∗ 0.75 ∗ 40 = 41.875 ≈ 42 f(1.75,1.75) = (1-u)(1-v)f(1,1)+ u(1-v)f(2,1) \\ \; \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; + (1-u)vf(1,2)+uvf(2,2) \\ \;\\ =0.25*0.25*40+0.75*0.25*60+0.25*0.75*30+0.75*0.75*40=41.875\approx42 f(1.75,1.75)=(1u)(1v)f(1,1)+u(1v)f(2,1)+(1u)vf(1,2)+uvf(2,2)=0.250.2540+0.750.2560+0.250.7530+0.750.7540=41.87542

    opencv代码测试:

    import cv2 as cv
    import numpy as np
    
    img = [[30, 20, 10],
           [10, 40, 60],
           [20, 30, 40]]
    
    img = np.array(img, dtype=np.uint8)
    print(img)
    
    re_img = cv.resize(img, (2, 2), interpolation=cv.INTER_LINEAR)
    print(re_img)
    

    终端输出:

    [[30 20 10]
     [10 40 60]
     [20 30 40]]
     
    [[25 23]
     [21 42]]
    

    通过终端输出可知,opencv计算得到的结果与我们自己计算的结果是一致的。

    展开全文
  • 试采用双线性插值对一幅图像进行放大,kx=2.3,ky=1.6,图像如下,根据原理设计,不要采用MATLAB封装好的函数。
  • 基于matlab的双线插值程序,很适合新手学习
  • 双线性插值.cpp

    2020-07-08 19:47:29
    双线性插值的计算公式 ,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,052
精华内容 5,220
关键字:

双线性插值