最近邻插值、双线性插值、双三次插值学习总结


参考博客1: http://www.noobyard.com/article/p-xduhqoyo-gh.html
参考博客2: http://www.noobyard.com/article/p-fannqqwm-s.html
参考博客3: https://blog.csdn.net/wanzi1122/article/details/79858854
参考博客4: http://www.noobyard.com/article/p-shlpmucu-dd.html
参考博客5: http://www.noobyard.com/article/p-nibvqrfb-ux.html
感谢所有的博主!
这周看文献,发现人家的预处理部分写得好好,单单图片缩放讲的好清楚啊,为啥缩放,使用什么数学原理进行缩放,具体缩放到多大都写的好清楚,在论文中看到了双三次插值,即bicubic interpolation,当时不知道是啥,查了下资料,整理一下。

1插值是什么?为啥要插值?

一句话来说就是插值用于图片缩放,为了解决图片缩放中可能出现小数坐标但是没法一一对应,所以我们通过插值把计算出来的小数坐标变换为整数坐标。
我当时一直不明白什么叫插值,直到看到了参考博客1的解释:
假设源图像大小为mxn,目标图像为axb。那么两幅图像的边长比分别为:m/a记为k1和n/b记为k2。注意,通常这个比例k1和k2不是整数,编程存储的时候要用浮点型。目标图像的第(i,j)个像素点(i行j列)可以通过边长比对应回源图像。其对应坐标为(im/a,jn/b)im/a记为k3,jn/b记为k4。显然,这个对应坐标(k3,k4)一般来说不是整数,但是图片其实就是灰度值组成的矩阵,而非整数的坐标(k3,k4)是无法在图像这种离散数据上使用的。也就是说,假设第1行第1列的点灰度值是125,我们就可以知道这个点差不多是灰色的,但是我们不可能说第1.25行,第0.38列的点的灰度值是啥。因为虽然我们算出来的坐标是小数,这个坐标可以用小数表示,但是图片中对应坐标的像素指我们不能表示,因为图片是中没有1.25行,0.38列,所以没法表示。
但是图片因为缩放,小数坐标肯定无法避免,那么具体怎么操作呢?答案就是 插值
,根据博客2所说,我们可以通过插值把算出来的小数坐标通过某种方法变成整数坐标,然后把算出来的整数坐标处的灰度值填入目标矩阵中。当我们采取不同的变换方法时,就是不同的插值法了,常见的插值法有最近邻插值、双线性插值、双三次插值,下面会对这几种进行介绍。

2 Matlab实现最近邻插值、双线性插值、双三次插值

matlab 有现成的,此处参考博客3
B = imresize(A,m,method) 将图片A由参数method指定的插值运算方法来改变图像的大小到m倍,
method的几种可选值:

’nearest’最近邻插值(默认)
'bilinear’双线性插值
'bicubic’双三次插值

3最近邻插值的原理简介

最近邻算法是最简单的插值算法,原理就是四舍五入,具体可以参考博客4
这里我把图片拿来用,图片来源博客4
在这里插入图片描述
同样来自博客4:如果 i+u, j+v(i落在 A区,即 u<0.5,v<0.5,则将左上角象素的灰度值赋给待求象素,同理落在B区则赋予右上角的象素灰度值,落在C区则赋予左下角象素的灰度值,落在D区则赋予右下角象素的灰度值。
博客4说 最近邻插值法计算量较小,但可能会造成生的图像灰度上的不连续,在变化地方可能出现明显锯齿状。

4双线性插值的原理简介

双线性插值主要参考博客1,博客1中写道
若图像为灰度图像,那么(i,j)点的灰度值的数学计算模型是:f(x,y)=b1+b2x+b3y+b4xy
其中b1,b2,b3,b4是相关的系数。关于其的计算过程如下如下:
如图,已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对P点进行插值,这就是所谓的双线性插值。
在这里插入图片描述
双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。

在这里插入图片描述
首先在 x 方向进行线性插值,得到
在这里插入图片描述
然后在 y 方向进行线性插值,得到
在这里插入图片描述
这样就得到所要的结果 f( x, y),
在这里插入图片描述
如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为
在这里插入图片描述
ps:1我一直不懂啥叫f(Q11),其实就是 Q11这个点的灰度值
2为啥是x2-x 乘以Q12?不是Q22呢?因为x2-x说明是R2这个点到 Q22的距离,这个值越大说明离得越远,那么这个点就受Q22的影响越小,总的2个点,那换句话来说就是受Q12的影响越大,所以乘以 Q12在这里插入图片描述
博客4说 双线性内插法的计算比最邻近点法复杂,计算量较大但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

5双三次插值原理简介

此处参考博客5
1坐标的位置关系
在这里插入图片描述

注意:P(1,0)应该写为P(0,0),而且这张图应该把点的矩阵转置一下。
2.插值函数
插值函数是对于理论上最优插值函数s i n ( x ) / x sin(x)/xsin(x)/x的近似。
函数如下,一般取a = -0.5

在这里插入图片描述

3.像素值计算
对于每个像素点像素值的计算:
在这里插入图片描述
双三次就是两个3次方,三次方指的是上面的W是三次多项式,双指的就是x和y两个方向,所以我们可以看到是两个W相乘。

博客4说:双三次曲线插值方法计算量较大,但后的图像效果最好。这种算法是一很常见的算法,普遍用在图像编辑软件、打印机驱动和数码相机上。