【Bilinear interpolation】双线性插值详解(转)[组图]

08-08栏目:技术

TAG:双线性插值

双线性插值

【Bilinear interpolation】双线性插值详解(转)

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

jhua.org

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

jhua.org

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

双线性插值

jhua.org

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

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

f(x,y)=b1+b2x+b3y+b4xy https://www.jhua.org

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

www.jhua.org

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

www.jhua.org

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

jhua.org

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

jhua.org

假如我们想得到未知函数

 在点

 的值,假设我们已知函数

 在

,

,

,

 四个点的值。 copyright www.jhua.org

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

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

https://www.jhua.org

这样就得到所要的结果

, www.jhua.org

如果选择一个坐标系统使得

 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为 copyright www.jhua.org

或者用矩阵运算表示为 https://www.jhua.org

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

copyright jhua.org

OpenCV和Matlab中的双线性插值

https://www.jhua.org

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

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

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

www.jhua.org

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

https://www.jhua.org

copyright jhua.org

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

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

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

copyright jhua.org

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

https://www.jhua.org

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

www.jhua.org

int y=(j+0.5)*n/b-0.5 copyright www.jhua.org

代替 jhua.org

int x=i*m/a copyright www.jhua.org

int y=j*n/b copyright www.jhua.org

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

https://www.jhua.org

posted @ 2018-11-20 16:59 向前奔跑的少年 阅读(...) 评论(...) 编辑 收藏

www.jhua.org

www.jhua.org

jhua.org

https://www.jhua.org

copyright www.jhua.org

相关阅读

双线性插值直观理解

copyright www.jhua.org

转载:https://blog.csdn.net/u013355826/article/details/566805211.为什么要用图像的插值?在图像的放大和缩小的过程中,需要计算新

jhua.org

阅读量:100000+

上一篇:各种三角形边长的

推荐量:2005

下一篇:VC驿站精彩【组图

matlab中bilinear函数,【Bilinear interpolation】双线性插值详解(转)[组图]相关推荐

  1. python scatter参数详解_Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  2. Matlab中自带地图绘制WorldMap详解

    Matlab中自带地图绘制WorldMap详解 转载地址:http://blog.csdn.net/archielau/article/details/7933265,其实这些代码是在matlab中的 ...

  3. python scatter参数详解_Python 中 scatter 函数参数及用法详解

    Python 中 scatter 函数参数及用法详解 Python 中 scatter 函数参数及用法详解 这里有新鲜出炉的 Python 教程, 程序狗速度看过来! Python 编程语言 Pyth ...

  4. python中tile的用法_python3中numpy函数tile的用法详解

    tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题 ...

  5. Sklearn中predict_proba函数用法及原理详解

    Sklearn中predict_proba函数用法及原理详解(以logistic回归为例) 网上对predict_proba的数学原理解释的太少了,也不明确,特意总结一下,并给出有些不能用该方法的原因 ...

  6. PHP中cal_days_in_month函数和calendar扩展详解

    PHP中cal_days_in_month函数和calendar扩展详解 问题: 在开发中无意间发现cal_days_in_month函数不可使用.然后就开始研究学习. 1.cal_days_in_m ...

  7. matlab中scatter函数怎么用,Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  8. 矩阵在Matlab中应用规则,1.3 MATLAB中的矩阵运算免费阅读_详解MATLAB在最优化计算中的应用免费全文_百度阅读...

    4.6 线性规划问题的MATLAB求解方法 与一般的线性规划理论一样,在MATLAB中有线性规划的标准型,和前面介绍的一般标准型有类似之处,也有不同之处.在调用MATLAB线性规划函数linprog时 ...

  9. python scatter函数参数,Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  10. scatter python_Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

最新文章

  1. 精灵盛典电脑模拟器服务器怎么修改,精灵盛典ios电脑版
  2. conda 命令和创建tensorflow环境
  3. jquery-validation插件
  4. tp5 批量更新多条记录_tp5批量导入数据库
  5. 鸿蒙安卓数据互通吗,假如鸿蒙与安卓之间不能够实现游戏账号互通,你还会为其买单吗?...
  6. 2021牛客暑期多校训练营9
  7. databricks_如何开始使用Databricks
  8. C++中的结构体函数
  9. 计算机等级考试二级Python讲座(一)
  10. C++中的各种可调用对象
  11. 性能测试工具JMeter的安装及环境配置--Windows和Linux
  12. pandas.DataFrame.sample随机抽样
  13. maxon电机驱动简介
  14. jade 编译 html,学习前端模板引擎 jade (一)_html/css_WEB-ITnose
  15. matlab gui 毕业论文,MATLAB GUI课件设计
  16. 微信小程序下拉刷新上拉加载
  17. CentOS7—Firefox—截图工具—fireshot插件
  18. windows 无法对计算机进行启动到,windows无法启动无法启动怎么办,windows无法启动的9种解决方法...
  19. 北航计算机学院保研占比,许明杰:CSP助力保研入北航
  20. Android Studio 之 Live Templates 高效利用

热门文章

  1. 开源的基于web视频会议(Apache OpenMeetings)开发
  2. JS 判断一个字符串中每个字母出现的次数
  3. 车载测试工具-CANoe
  4. 文哥要加肉泡姑娘了……
  5. 百亿条数据复杂业务场景下通用归因模型设计实现
  6. 设置滚动条的默认位置
  7. Kafka的安全认证机制SASL/PLAINTEXT 2020.11.12
  8. 土地供应方式划拨与出让的区别
  9. post默认总是不幂等的吗_刺客的场均输出总是不超过25%算正常吗?
  10. 启用tcp_wrappers防火墙