• 最近在做视频拼接的项目,里面用到了图像的单应矩阵变换,在最后的图像重映射,由于目标图像的坐标是非整数的,所以需要用到插值的方法,用的就是双线性插值,下面的博文主要是查看了前辈的博客对双线性插值算法...

    最近在做视频拼接的项目,里面用到了图像的单应性矩阵变换,在最后的图像重映射,由于目标图像的坐标是非整数的,所以需要用到插值的方法,用的就是双线性插值,下面的博文主要是查看了前辈的博客对双线性插值算法原理进行了一个总结,在这里也感谢一些大牛的博文。

    http://www.cnblogs.com/linkr/p/3630902.html

    http://www.cnblogs.com/funny-world/p/3162003.html

    双线性插值

          假设源图像大小为mxn,目标图像为axb。那么两幅图像的边长比分别为:m/a和n/b。注意,通常这个比例不是整数,编程存储的时候要用浮点型。目标图像的第(i,j)个像素点(i行j列)可以通过边长比对应回源图像。其对应坐标为(i*m/a,j*n/b)。显然,这个对应坐标一般来说不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值(灰度值或者RGB值)。

      若图像为灰度图像,那么(i,j)点的灰度值的数学计算模型是:

    f(x,y)=b1+b2x+b3y+b4xy

    其中b1,b2,b3,b4是相关的系数。关于其的计算过程如下如下:

          如图,已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对P点进行插值,这就是所谓的双线性插值。

    clip_image001

     

    附:维基百科--双线性插值:

          双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。

    假如我们想得到未知函数 f 在点 P=\left( x, y\right) 的值,假设我们已知函数 f 在 Q_{11} = \left( x_1, y_1 \right)Q_{12} = \left( x_1, y_2 \right)Q_{21} = \left( x_2, y_1 \right), 及 Q_{22} = \left( x_2, y_2 \right) 四个点的值。

    首先在 x 方向进行线性插值,得到

    f(R_1) \approx \frac{x_2-x}{x_2-x_1} f(Q_{11}) + \frac{x-x_1}{x_2-x_1} f(Q_{21}) \quad\mbox{Where}\quad R_1 = (x,y_1),
    f(R_2) \approx \frac{x_2-x}{x_2-x_1} f(Q_{12}) + \frac{x-x_1}{x_2-x_1} f(Q_{22}) \quad\mbox{Where}\quad R_2 = (x,y_2).

    然后在 y 方向进行线性插值,得到

    f(P) \approx \frac{y_2-y}{y_2-y_1} f(R_1) + \frac{y-y_1}{y_2-y_1} f(R_2).

    这样就得到所要的结果 f \left( x, y \right),

    f(x,y) \approx \frac{f(Q_{11})}{(x_2-x_1)(y_2-y_1)} (x_2-x)(y_2-y) + \frac{f(Q_{21})}{(x_2-x_1)(y_2-y_1)} (x-x_1)(y_2-y)
    + \frac{f(Q_{12})}{(x_2-x_1)(y_2-y_1)} (x_2-x)(y-y_1) + \frac{f(Q_{22})}{(x_2-x_1)(y_2-y_1)} (x-x_1)(y-y_1).

    如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为

    f(x,y) \approx f(0,0) \, (1-x)(1-y) + f(1,0) \, x(1-y) + f(0,1) \, (1-x)y + f(1,1) xy.

    或者用矩阵运算表示为

    f(x,y) \approx \begin{bmatrix}1-x & x \end{bmatrix} \begin{bmatrix}f(0,0) & f(0,1) \\f(1,0) & f(1,1) \end{bmatrix} \begin{bmatrix}1-y \\y \end{bmatrix}

    这种插值方法的结果通常不是线性的,线性插值的结果与插值的顺序无关。首先进行 y 方向的插值,然后进行 x 方向的插值,所得到的结果是一样的。

    opencv和Matlab中的双线性插值

       这部分的前提是,你已经明白什么是双线性插值并且在给定源图像和目标图像尺寸的情况下,可以用笔计算出目标图像某个像素点的值。当然,最好的情况是你已经用某种语言实现了网上一大堆博客上原创或转载的双线性插值算法,然后发现计算出来的结果和matlab、openCV对应的resize()函数得到的结果完全不一样。

    那这个究竟是怎么回事呢?

    其实答案很简单,就是坐标系的选择问题,或者说源图像和目标图像之间的对应问题。

    按照网上一些博客上写的,源图像和目标图像的原点(0,0)均选择左上角,然后根据插值公式计算目标图像每点像素,假设你需要将一幅5x5的图像缩小成3x3,那么源图像和目标图像各个像素之间的对应关系如下:

    只画了一行,用做示意,从图中可以很明显的看到,如果选择右上角为原点(0,0),那么最右边和最下边的像素实际上并没有参与计算,而且目标图像的每个像素点计算出的灰度值也相对于源图像偏左偏上。

    那么,让坐标加1或者选择右下角为原点怎么样呢?很不幸,还是一样的效果,不过这次得到的图像将偏右偏下。

    最好的方法就是,两个图像的几何中心重合,并且目标图像的每个像素之间都是等间隔的,并且都和两边有一定的边距,这也是matlab和openCV的做法。如下图:

    如果你不懂我上面说的什么,没关系,只要在计算对应坐标的时候改为以下公式即可,

     

    int x=(i+0.5)*m/a-0.5

    int y=(j+0.5)*n/b-0.5

    代替

    int x=i*m/a

    int y=j*n/b

     

    利用上述公式,将得到正确的双线性插值结果


    原文地址:http://blog.csdn.net/xjz18298268521/article/details/51220576

    展开全文
  • 图像处理之双线性插值法 2018-04-22 19:02:31
    1、线性插值的解释 ...1.双线性插值 2.存在的问题 3、又是另一位讲的通俗易懂 1,原理 2,计算方法 3,加速以及优化策略 3.1 源图像和目标图像几何中心的对齐  3.2 将浮点运算转换成整数运算 4,代码 ...
  • 数字图像处理--放大和收缩数字图像(双线性插值法)前言放大和收缩数字图像步骤计算新的像素在原图的对应位置为这些对应位置赋灰度值最近邻法赋灰度值双线性插值法赋灰度值一维线性插值双线性插值代码最近邻法 ...
  • 图像处理+双线性插值法 2018-03-10 15:51:54
    单线性插值法 双线性插值法 2、另一位牛人讲的比较易懂 1.双线性插值 2.存在的问题 3、又是另一位讲的通俗易懂 1,原理 2,计算方法 3,加速以及优化策略 3.1 源图像和目标图像几何中心的对齐  3.2 将浮点运算...
  • 算法原理简介双线性插值是一阶插值,常用于图像的旋转、缩放处理。它利用原图中对应的四个点的像素值来确定目标图像中的像素值。为了便于理解,我们来看两张尺寸不一样的图片:原图变换图假设原图图片的宽度为yw,...
  • 双线性插值法及python实现 插值法是一种根据原图(source)图片信息构造目标图像(destination)的方法。而其中的双线性插值法是一种目前使用较多的插值方法,他在效果和计算量之间有较好的权衡,所以使用较为广泛。...
  • 准备写双线性插值的图像缩放,先从算法原理开始。 查阅资料和一点自己的理解。...因为这里是用作图像处理,所以仅代入当一种计算规律使用。 首先来了解一下算法过程: 假如我们想得到未知函...
  • 双线性插值实现图像放大
  • 在讲双线性插值之前,先说一下线性插值,因为双线性插值法的核心思想是在两个方向分别进行一次线性插值。 如图所示: 使用斜率的关系,有:(这是非常重要的,第一个式子是斜率关系,第二个式子由第一个式子推出)...
  • 图像处理双线性插值算法的优化  该博文转载于Imageshop的博文  在图像处理中,双线性插值算法的使用频率相当高,比如在图像的缩放中,在所有的扭曲算法中,都可以利用该算法改进处理的视觉效果。首先,...
  • 图像处理之---双线性插值 2019-06-28 11:07:50
    最近在做视频拼接的项目,里面用到了图像的单应矩阵变换,在最后的图像重映射,由于目标图像的坐标是非整数的,所以需要用到插值的方法,用的就是双线性插值,下面的博文主要是查看了前辈的博客对双线性插值算法...
  • 用Visual C++实现图像双线性插值法等比例缩放 在数字图像处理中,图像的缩放是基本的操作。下面介绍利用Visual C++ MFC多文档应用程序对话框来,利用双线性插值法来实现图像缩放的功能,本实验采用Visual Studio ...
  • 一、引言 数字图像处理的对象因其涉及到社会的各个领域,倍受到越来越多的关注,而图像缩放作为数字图像处理中的基本操作尤为重要,在社会的...本文提出了一种双线性插值算法,用以改进图像的缩放质量。 二、空间变换
  • 图像处理中的双线性插值 2018-08-28 20:37:10
    图像处理中的双线性插值 1.为什么要用图像的插值? 在图像的放大和缩小的过程中,需要计算新图像像素点在原图的位置,如果计算的位置不是整数,就需要用到图像的内插,我们需要寻找在原图中最近得像素点赋值给新的...
  • tag: 双线性插值,双线性内插法,图像插值法 1 . 为什么要用图像的插值? 在图像的放大和缩小的过程中,需要计算新图像像素点在原图的位置,如果计算的位置不是整数,就需要用到图像的内插,我们需要寻找在原图...
  • 该章节的目的是讨论双线性插值图像旋转中的效果。基本引用上一篇文章中的旋转的代码,其中使用的是最近邻插值,取而代之。 线性插值,一维情况下,即我们有两个点,,现在要用线性插值求的数值为 那么双线性...
  • java程序实现数字图像处理中的放缩和量化。使用双线性插值法,还有普通的量化策略。
  • 自己编写整理的双线性插值算法原理,内含原理和实例源码,给大家分享。
  • 【OpenCV】双线性插值法 2018-03-09 20:37:19
    双线性插值法 定义: 又称双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向上分别进行一次线性插值。 对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为...
  • 一个实现对图像进行双线性内插算法的程序代码
1 2 3 4 5 ... 20
收藏数 2,624
精华内容 1,049