双线性插值

要讲清楚这个问题,就要从如何放大一张图片说起。
在这里插入图片描述

图片放大

我们想得到一张放大的图片,现在有原图像(srcImage)和目标图像(dtsImage)。那么,有一个最基本的问题摆在我们面前:是遍历 srcImage 呢,还是遍历 dstImage 呢?(咋还整出代码来了呢?)
在实践的过程中,通常都是遍历 dstImage 的。因为这样可以确保 dstImage 的每一个像素都是有值的。
就拿上图的例子来说,右图(也就是 dstImage)中的 [0,0] 点很顺利的找到了左图中与自己对应的 [0,0] 点。然后 [0,1] 点就懵逼了:“我应该找 [0,0.33],也没有这个点啊!”
插值这个方法,就是为了解决这个问题的。

插值

插值(Interpolation),按我们之前理解的就是在两个数中间插一个数呗。不过,老师说插值问题实际上是一种 拟合问题。
我之所以写这篇文章有一半的原因是因为这句话,因为我觉得这为我们的理解又提供了一种新思路。那么,怎样理解这句话呢?
还是以上一节中的例子为例。下面这幅图描述的是以为的情况,就相当于把上一节 srcImage 的第0行拿出来。f(xi-1) 是 [0,0] 的灰度值,f(xi) 是 [0,1] 的灰度值,f(xi+1) 是 [0,2] 的灰度值。f(x’) 就是我们想得到的 [0,0.3] 的灰度值。
所以,所谓插值就是用 x’ 某个领域内的函数值按照一定规则拟合出一个函数,再在其中查找 f(x’) 的值。
在这里插入图片描述

几种插值方法

我觉得这几种方法都不用解释了,就直接放图就可以了。
(好敷衍呐!)(闭嘴吧……)

不过这几张图还是很好的,很清晰明了。

1. 最近邻插值(Nearest Interpolation)

在这里插入图片描述

2. 线性插值(Linear Interpolation)

在这里插入图片描述

3. 双线性插值(Bilinear Interpolation)

在这里插入图片描述
基于上一节的理解,我们就可以设定任意规则去拟合,然后做插值了!可以用邻域的三个点、四个点拟合,甚至可以用二次曲线、三次曲线……

总结

写到这儿,我最开始犯的错误就很明显了。因为插值是对 srcImage 中某个邻域内进行插值,从而得到 dstImage 中某个像素值。而不是在 dstImage 中插值。
有些小伙伴可能会说,那这两种操作的值不是一样的吗?
针对放大、缩小这种变换,确实是一样的。但是如果是图像旋转、甚至扭曲呢?这就完全无法用 dstImage 中的点去插值了。(别问我咋知道的……)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值