首页天道酬勤matlab怎么拟合两列数据正弦函数,matlab怎样对数据进行插值处理

matlab怎么拟合两列数据正弦函数,matlab怎样对数据进行插值处理

admin 08-19 07:33 208次浏览

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

08-08栏目:技术

TAG:双线性插值

双线性插值

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

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

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驿站精彩【组图

基于element-ui表格的二次封装实现Docker MySQL无法被宿主机访问的问题解决nodeJS基本使用linux登录欢迎页怎么做Struts2的​HTML非表单标签有哪些
细粒度分析与Bilinear CNN model附代码实现 Bilinear Attention Networks 代码记录,苹果重启记录代码是什么
相关内容