常用插值算法详解 插值法公式

插值公式(常用插值算法详解)
做图像处理的学生应该经常使用图像缩放 。众所周知,当存储图像时,它们实际上是一个矩阵 。因此,在缩放图像时,它们是在矩阵上操作的 。如果我们想放大图像,我们需要使用过采样算法来扩展矩阵 。如果我们想减少图像,我们需要使用欠采样 。

常用插值算法详解 插值法公式

文章插图


如上图所示,左图为原始图像矩阵,右图为放大后的图像矩阵,右图中的橙色点代表矩阵放大后插值算法填充的像素值 。因此,本文主要讨论如何通过插值算法来填充像素值
相关功能介绍Opencv提供了一个调整大小的函数来调整图像的大小,它提供了几种不同的插值算法,如下图所示
常用插值算法详解 插值法公式

文章插图


这里主要介绍最常用的前5种插值算法,最后两种插值算法主要用于仿射变换 。简历 。从src转换到dst时,WARP_FILL_OUTLIERS可能会有异常值,通过此设置可以将异常值的像素设置为0 。简历 。WARP_INVERSE_MAP是应用于从dst到src的仿射变换的逆变换 。有关仿射变换的更多信息,请参考我的上一篇文章来了解仿射变换
插值算法的比较
常用插值算法详解 插值法公式

文章插图



我们通过随机生成一张55的图片,然后通过不同的插值算法放大10倍,来比较最终图片的效果 。
常用插值算法详解 插值法公式

文章插图


如果你觉得灰度不方便观察,我们可以通过设置plt.imshow的cmap参数来控制颜色,matplotlib提供了几种不同类型的颜色映射方法
cmap的类别顺序
通常使用单一色调,逐渐增加亮度和颜色,可用于表达有序的信息
常用插值算法详解 插值法公式

文章插图


发散
通过改变两种不同颜色的亮度和饱和度,在中间与不饱和颜色相遇,通常用于绘制关键中间值或数据偏离零的信息
常用插值算法详解 插值法公式

文章插图


循环
改变两种不同颜色的亮度,在中间和开始/结束处遇到不饱和的颜色,并在结束点应用于周围的信息 。
常用插值算法详解 插值法公式

文章插图


质量
用于表示没有关系或顺序的信息
常用插值算法详解 插值法公式

文章插图


杂项
同上
常用插值算法详解 插值法公式

文章插图


在这里,为了观察不同插值算法之间的差异,我们可以选择噪声进行观察 。在这里,我随机选择了Set1,只是把上面代码中的C资源网络图改成了Set1
常用插值算法详解 插值法公式

文章插图


通过对不同插值算法后的效果图进行初步观察,可以发现最近邻插值和区域插值算法的效果相似,而线性插值、三次样条插值和Lanczos插值的整体效果看起来相似,但细节还是有所不同 。接下来,我们将分析这些插值算法 。
最近插值(最近插值)最近邻插值,也称为近端插值,是一种简单的一维或多维空多元插值方法 。插值是从已知的离散数据点导出新数据点的过程或方法 。最近邻插值算法选择最接近数据点的值,完全不考虑其他相邻点的值,从而生成一个分段常数插值值作为数据点的值 。
常用插值算法详解 插值法公式

文章插图


如上图所示,黑色表示要插入的值,它会选择最近的P(x+1,y)值作为它的值 。
如果四个点的距离相等,如何选择最近邻插值?
常用插值算法详解 插值法公式

文章插图


从上图不难发现,当插入的值等于全部四个点时,会选择最接近左上角的值,即
因为图像坐标系的原点在左上角 。
线性插值(线性插值)这里的线性插值实际上是指双线性插值,这个插值算法也是resize函数中使用的默认插值算法 。
双线性插值,也称为双线性插值 。双线插值是二维坐标系下线性插值的扩展,用于插值二元函数 。它的核心思想是在两个方向上执行一次线性插值 。为了帮助大家更好地理解双线性插值算法,我们先来看看线性插值
。假设我们知道坐标(x0,y0)和(x1,y1),我们想得到区间[x0,x1]中任意位置X对应的Y的值,如下图所示


推荐阅读