最近邻插值、线性插值、双线性插值-你必须要知道的一些点
博主最近在学习有关插值方面的内容,上网搜索了很多资料,看了这些资料的感受是都介绍的差不多,看后还是啥也不知道。最根本的原因是他们没有通俗易懂的例子。学习新知识,最好的方式是带着例子一起学习,这样能够理解的更加深刻。下面我将自己对这方面知识的理解分享给大家。
注:下面内容只是对网上理论内容的补充,不具体介绍理论内容,如果需要理论部分的内容,文末会附上写的比较好的链接。
1.最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输出。
如上图所示,目标图像中的某点投影到原图像中的位置为点P,此时易知,
一个例子:
如下图所示,将一幅3X3的图像放大到4X4,用表示目标图像,
表示原图像,我们有如下公式:
$$
\begin{array}{c}
f(dst_{x}, dst_{y}) = h(\frac{dst_{x}src_{Width}} {dst_{Width}}, \frac{dst_{y}src_{Height}} {dst_{Height}})
\end{array}
$$
$$
\begin{array}{c}
f(0,0)=h(0,0) \\
f(0,1)=h(0,0.75)=h(0,1) \\
f(0,2)=h(0,1.50)=h(0,2) \\
f(0,3)=h(0,2.25)=h(0,2) \\
...\\
\end{array}
$$
注意:上面提到了目标图像与源图像的一个对应公式:
$$
\begin{array}{c}
f(dst_{x}, dst_{y}) = h(\frac{dst_{x}src_{Width}} {dst_{Width}}, \frac{dst_{y}src_{Height}} {dst_{Height}})
\end{array}
$$
这个公式在理解这几个算法时是很重要的,只有清楚它,你才知道真正的一些实现上的细节。
从上面的例子也可以看出,最近邻算法只需要找到目标图像在原图像中对应的点后,找到离它最近的一个整数坐标的像素值作为目标图像对应位置处的像素值。
2.双线性插值
一般网上的内容会告诉你,双线性插值就是在两个变量方向上做三次线性插值。
双线性插值:目标图像上的一个点,对应着源图像中的四个点,使用四个点来做三次线性插值。
对比最近邻插值:最近邻插值目标图像上的一个点,对应着源图像中的一个点。
那么现在的问题是,已知目标图像上的一个坐标点,怎么在源图像上找到与之对应的四个点。
还是利用这个公式:
$$
\begin{array}{c}
f(dst_{x}, dst_{y}) = h(\frac{dst_{x}src_{Width}} {dst_{Width}}, \frac{dst_{y}src_{Height}} {dst_{Height}})
\end{array}
$$
通过这个公式,找到目标图像上的点在源图像上的投影位置后,直接找离它最近的四个点,用这四个点去做三次线性插值。
这就是我想补充的内容,在很多博客上,这一点大家是没有说到的,这也是为什么看了他们写的理论后,还是似懂非懂的。
理论部分连接:
1.一篇文章为你讲透双线性插值:https://zhuanlan.zhihu.com/p/110754637
2.三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法 :https://blog.****.net/xbinworld/article/details/65660665