我是靠谱客的博主 直率康乃馨,最近开发中收集的这篇文章主要介绍线性插值,双线性插值Bilinear Interpolation算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这篇文章的主要目的就是对双线性差值进行学习笔记的介绍.

原文:https://blog.csdn.net/xbinworld/article/details/65660665

线性插值


先讲一下线性插值:已知数据 (x0, y0) 与 (x1, y1),要计算 [x0, x1] 区间内某一位置 x 在直线上的y值(反过来也是一样,略):


上面比较好理解吧,仔细看就是用x和x0,x1的距离作为一个权重,用于y0和y1的加权。双线性插值本质上就是在两个方向上做线性插值。

这里推荐手动画图可视化,然后进行公式推导(挺快的),对第二个公式的理解会更深刻.

双线性插值


在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值[1]。见下图:

è¿éåå¾çæè¿°

假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。最常见的情况,f就是一个像素点的像素值。首先在 x 方向进行线性插值,得到

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°
然后在 y 方向进行线性插值,得到

è¿éåå¾çæè¿°

综合起来就是双线性插值最后的结果:

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°
由于图像双线性插值只会用相邻的4个点,因此上述公式的分母都是1。opencv中的源码如下,用了一些优化手段,比如用整数计算代替float(下面代码中的*2048就是变11位小数为整数,最后有两个连乘,因此>>22位),以及源图像和目标图像几何中心的对齐 
SrcX=(dstX+0.5)* (srcWidth/dstWidth) -0.5 
SrcY=(dstY+0.5) * (srcHeight/dstHeight)-0.5,

这个要重点说一下,源图像和目标图像的原点(0,0)均选择左上角,然后根据插值公式计算目标图像每点像素,假设你需要将一幅5x5的图像缩小成3x3,那么源图像和目标图像各个像素之间的对应关系如下。如果没有这个中心对齐,根据基本公式去算,就会得到左边这样的结果;而用了对齐,就会得到右边的结果:

è¿éåå¾çæè¿°è¿éåå¾çæè¿°

最后

以上就是直率康乃馨为你收集整理的线性插值,双线性插值Bilinear Interpolation算法的全部内容,希望文章能够帮你解决线性插值,双线性插值Bilinear Interpolation算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部