大家好,又见面了,我是你们的朋友全栈君。
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
目录
2.1 最近邻插值 (Nearest Neighbor Interpolation) —— 零阶插值法
2.2 线性插值 (Linear Interpolation) —— 一阶插值法
2.3 双线性插值 (Bilinear Interpolation) —— 一阶插值法
2.4 双三次插值 (Bicubic Interpolation)
一、绪论
插值 (Interpolation),通常指内插,既是离散数学名词,也是图像处理术语,二者的联系十分密切。作为图像放缩 (Scale) 的手段,常见的传统插值方法有:
- 最近邻插值 (Nearest Neighbour Interpolation)
- 线性插值 (Linear Interpolation)
- 双线性插值 (Bilinear Interpolation)
- 双三次插值 (Bicubic interpolation)
等等,乃至更高阶的线性、非线性插值方法。
在 离散数学 中,插值指在离散数据的基础上补插连续函数,使得连续曲线 通过 全部给定的离散数据点。作为离散函数逼近的重要方法,利用插值可根据函数在有限个点处的取值状况,估算出函数在其他点处的近似值。
这实际指出了 插值的本质 —— 利用已知数据估计未知位置数值。图像插值问题类似于拟合问题,二者均为函数逼近或数值逼近的重要组成部分。但不同之处在于:对于给定的函数,插值 要求离散点“坐落在”函数曲线上从而满足约束;而 拟合 则希望离散点尽可能地 “逼近” 函数曲线。
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
至于为什么要插值,上图展示了一个二维图像/像素坐标系下,数字图像放大3倍的局部坐标点变换。对于原图像的坐标点 (红色实心点),其在新图像上都 能确定一一对应 的坐标点 (红色实心点)。而对于新图像中因放大而的多出坐标点 (蓝色圈叉),则在原图像中 找不到对应点 了,这可如何是好呢?这时,插值技术应运而生,旨在 通过某些规则/规范/约束,获取这些多出坐标点的像素值。举个简单的一维例子:
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
如上图所示,假设数轴上某三个离散点坐标分别为 xi-1,xi,xi+1。对于给定某连续函数 f(x) 作为约束条件/规则,三点坐标的函数值分别为 f(xi-1),f(xi), f(xi+1)。这时,如果我们想得到更密集、更精细的点,则可以给定坐标值,根据 f(x) 得到函数值。例如,设 xi-1 和 xi 之间的一坐标点 x’,根据 f(x) 其函数值即为 f(x’)。
上例即为一个简易的一维插值表示,f(x’) 就是一个插值结果。事实上,给定不同的函数约束 f(x),通常会得到不同的插值结果,因此当前存在多种不同的插值方法,而本文将结合图示逐一说明这些传统的 线性插值 原理。
二、说明
2.1 最近邻插值 (Nearest Neighbor Interpolation) —— 零阶插值法
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
上图是一个一维的最近邻插值的示意图,坐标轴上各点 xi-1,xi,xi+1 … 两两对半等分间隔 (红色虚线划分),从而非边界的各坐标点都有一个等宽的邻域,并根据每个坐标点的值构成一个类似分段函数的函数约束,从而使各插值坐标点的值等同于所在邻域原坐标点的值。例如,插值点 x 坐落于 坐标点 xi 的邻域,那么其值 f(x) 就等于 f(xi)。
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
上图是一个二维最近邻插值的定量俯视示意图,(x0, y0)、(x0, y1)、(x1, y0)、(x1, y1) 都是原图像上的坐标点,灰度值分别对应为 Q11、Q12、Q21、Q22。而灰度值未知的插值点 (x, y),根据最近邻插值方法的约束,其与坐标点 (x0, y0) 位置最接近 (即位于 (x0, y0) 的邻域内),故插值点 (x, y) 的灰度值 P = Q11。
了解机器学习 KNN (K – Nearest Neighbor) 算法的人会知道,这其实 等同于 K=1 的 1NN。
2.2 线性插值 (Linear Interpolation) —— 一阶插值法
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
上图是一个一维的线性插值的定性示意图,坐标轴上各点 xi-1,xi,xi+1 … 的值“两两直接相连”为线段,从而构成了一条连续的约束函数。而插值坐标点例如 x,根据约束函数其值应为 f(x)。因为每两个坐标点之间的约束函数曲线是一次线性的线段,对插值结果而言是“线性” 的,所以该方法称为线性插值。
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
上图是一个一维线性插值的定量示意图,x0 和 x1 都是原有的坐标点,灰度值分别对应为 y0 和 y1。而灰度值未知的插值点 x,根据线性插值法约束,在 (x0, y0) 和 (x1, y1) 构成的一次函数上,其灰度值 y 即为:
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
实际上,即便 x 不在 x0 与 x1 之间,该公式也成立,但此时这种方法叫 线性外插。
2.3 双线性插值 (Bilinear Interpolation) —— 一阶插值法
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
由一维的线性插值很容易拓展到二维图像的双线性插值,每次需要要经过三次一阶线性插值才能获得最终结果,上图便展示了该过程的一种定性斜视示意图。其中,(x0, y0)、(x0, y1)、(x1, y0)、(x1, y1) 均为原图像上的像素坐标点,灰度值分别对应为 f(x0, y0)、f(x0, y1)、f(x1, y0)、f(x1, y1)。而灰度值未知的插值点 (x, y),根据双线性插值法的约束,可以先由像素坐标点 (x0, y0) 和 (x0, y1) 在 y 轴向作一维线性插值得到 f(x0, y)、由像素坐标点 (x1, y0) 和 (x1, y1) 在 y 轴向作一维线性插值得到 f(x1, y),然后再由 (x0, y) 和 (x1, y) 在 x 轴向作一维线性插值得到插值点 (x, y) 的灰度值 f(x, y)。当然,一维线性插值先作 x 轴向再作 y 轴向,得到的结果完全相同,仅为顺序先后的区别,例如:
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
上图是一个二维双线性插值的定量俯视示意图 (点位稍有变动但不影响),我们换个顺序。先由像素坐标点 (x0, y0) 和 (x1, y0) 在 x 轴向作一维线性插值得到 f(x, y0)、由像素坐标点 (x0, y1) 和 (x1, y1) 在 x 轴向作一维线性插值得到 f(x, y1):
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
然后再由 (x, y0) 和 (x, y1) 在 y 轴向作一维线性插值得到插值点 (x, y) 的灰度值 f(x, y):
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
合并上式,得到最终的双线性插值结果:
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
2.4 双三次插值 (Bicubic Interpolation)
又称 立方卷积插值 / 双立方插值,在数值分析中,双三次插值是二维空间中最常用的插值方法。在这种方法中,插值点 (x, y) 的像素灰度值 f(x, y) 通过矩形网格中 最近的十六个采样点的加权平均 得到,而 各采样点的权重由该点到待求插值点的距离确定,此距离包括 水平和竖直 两个方向上的距离。相比之下,双线性插值则由周围的四个采样点加权得到。
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
上图是一个二维图像的双三次插值俯视示意图。设待求插值点坐标为 (i+u, j+v),已知其周围的 16 个像素坐标点 (网格) 的灰度值,还需要计算 16 个点各自的权重。以像素坐标点 (i, j) 为例,因为该点在 y 轴和 x 轴方向上与待求插值点 (i+u, j+v) 的距离分别为 u 和 v,所以的权重为 w(u) × w(v),其中 w(·) 是插值权重核 (可以理解为定义的权重函数)。同理可得其余 15 个像素坐标点各自的权重。那么,待求插值点 (i+u, j+v) 的灰度值 f(i+u, j+v) 将通过如下计算得到:
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
其中各项由向量或矩阵表示为:
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
插值权重核 w(·) 为:
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
其函数图像如下所示:
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
三、比较与总结
插值算法常用于对图像进行缩放处理。数字图像像素的灰度值是离散的,因此一般的处理方法是对原来在整数点坐标上的像素值进行插值生成连续的曲面,然后在插值曲面上重新采样以获得缩放图像像素的灰度值。缩放处理 从输出图像出发,采用 逆向映射 方法,即在输出图像中找到与之对应的输入图像中的某个或某几个像素,从而保证输出图像中的每个像素都有一个确定值。否则,若从输入图像出发来推算输出图像,输出图像的像素点可能出现无灰度值的情况。因为对图像进行缩放处理时,输出图像像素和输入图像之间可能不再有一一对应关系。实际应用中,常利用插值技术增加图形数据,以便在打印或以其他形式输出时,能够增大打印面积及 (或) 分辨率。
最近邻插值 法的优点是计算量很小,算法也简单,因此运算速度较快。但它仅使用离待测采样点最近的像素的灰度值作为该采样点的灰度值,而没考虑其他相邻像素点的影响,因而重新采样后灰度值有明显的不连续性,图像质量损失较大,会产生明显的马赛克和锯齿现象。
双线性插值 法效果要好于最近邻插值,只是计算量稍大一些,算法复杂些,程序运行时间也稍长些,但缩放后图像质量高,基本克服了最近邻插值灰度值不连续的特点,因为它考虑了待测采样点周围四个直接邻点对该采样点的相关性影响。但是,此方法仅考虑待测样点周围四个直接邻点灰度值的影响, 而未考虑到各邻点间灰度值变化率的影响, 因此具有低通滤波器的性质, 从而导致缩放后图像的高频分量受到损失, 图像边缘在一定程度上变得较为模糊。用此方法缩放后的输出图像与输入图像相比, 仍然存在由于插值函数设计考虑不周而产生的图像质量受损与计算精度不高的问题。
双三次插值 法计算量最大,算法也是最为复杂的。在几何运算中,双线性内插法的平滑作用可能会使图像的细节产生退化,在进行放大处理时,这种影响更为明显。在其他应用中,双线性插值的斜率不连续性会产生不希望的结果。立方卷积插值不仅考虑到周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响。因此克服了前两种方法的不足之处,能够产生比双线性插值更为平滑的边缘,计算精度很高,处理后的图像像质损失最少,效果是最佳的。
总之,在进行图像缩放处理时,应根据实际情况对三种算法做出选择,既要考虑时间方面的可行性,又要对变换后图像质量进行考虑,这样才能达到较为理想的 权衡 (trade-off)。
四、延伸
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
事实上,当前的插值技术还有很多,如上图所示,大致可分为两类:一是 线性插值 方法,二是 非线性插值 方法。
一方面,传统插值方法多为 线性插值 方法,如最近邻插值、双线性插值、双三次插值等。这类方法在插值过程中采用同一种插值内核、无需考虑待插像素点所处位置,以至于图像中的高频部分 —— 边缘纹理等变得模糊,无法达到高清效果。
另一方面,非线性插值 方法主要有:基于 小波系数 的方法和基于 边缘信息 的方法。其中,基于边缘信息的方法又可分为 隐式方法 和 显式方法。隐式方法含:边缘导向插值 (New edge directive interpolation,NEDI)、最小均方误差估计插值 (Linear minimum mean square-error estimation,LMMSE)、软判决自适应插值 (Soft-decision adaptive interpolation interpolation, SAI),边缘对比度引导图像插值 (Contrast-guided image interpolation, CGI) 等均为基于图像边缘的隐式插值方法。
此外,还有更后来发展的诸如基于 决策树、字典学习、深度学习 等的图像插值算法。
在计算机图像处理和计算机图形学中,图像缩放(image scaling)是指对数字图像的大小进行调整的过程。图像缩放是一种非平凡的过程,需要在处理效率以及结果的平滑度(smoothness)和清晰度(sharpness)上做一个权衡。当一个图像的大小增加之后,组成图像的像素的可见度将会变得更高,从而使得图像表现得“软”。相反地,缩小一个图像将会增强它的平滑度和清晰度。
中文名
图像缩放
外文名
image scaling
分类1
传统差值原理和评价
分类2
基于边缘的图像插值算法
分类3
基于区域的图像插值算法
相关视频
查看全部
9438播放
28:15
opencv图像处理-5图像缩放案例
目录
用途
播报
编辑
缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。
放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量的。
除了为了适应显示区域而缩小图片外,图像缩小技术更多的是被用来产生预览图片。图像放大技术一般被用来令一个较小的图像填充一个大的屏幕。当你放大一张图像时,你不能可能获得更多的细节,因此图像的质量将不可避免的下降。不过也有很多技术可以保证在放大图像即增加像素的时候,图像的质量不变。
缩放算法
播报
编辑
假设源图像如下图1所示:
图1 原图像
要将该图像放大两倍,可以有很多种算法,最简单的方法为邻域插值,即将每一个原像素原封不动地复制映射到扩展后对应四个像素中:
这种方法在放大图像的同时保留了所有的原图像的所有信息,但是会产生锯齿现象。
双线性插值的效果对于放大的图像而言较领域插值来得平滑,但是却使得图像变得模糊而且仍然会有一部分锯齿现象。
双三次插值更好比双线性插值更好。
对于低分辨率或颜色很少的(通常是从2到256色)图像的放大问题,效果最好的算法是hq2x算法或类似的缩放算法。这些算法将会产生锐边并保留大量的细节,其效果如下:
对于照片(以及有许多色阶的光栅图像)的缩放算法可以参看一种被称为超采样(supersampling)的反锯齿算法。
放大算法
播报
编辑
图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。
插值算法分类
对插值算法分类比较混乱,各人有各人的分类算法。文献《图像插值技术综述》中简略的将插值算法分为传统插值、 基于边缘的插值和基于区域的插值3类,作为初学者入门明晰插值算法还是有帮助。
1.传统差值原理和评价
在传统图像插值算法中,邻插值较简单,容易实现,早期的时候应用比较普遍。但是,该方法会在新图像中产生明显的锯齿边缘和马赛克现象。双线性插值法具有平滑功能,能有效地克服邻法的不足,但会退化图像的高频部分,使图像细节变模糊。在放大倍数比较高时,高阶插值,如双三次和三次样条插值等比低阶插值效果好。这些插值算法可以使插值生成的像素灰度值延续原图像灰度变化的连续性,从而使放大图像浓淡变化自然平滑。但是在图像中,有些像素与相邻像素间灰度值存在突变,即存在灰度不连续性。这些具有灰度值突变的像素就是图像中描述对象的轮廓或纹理图像的边缘像素。在图像放大中,对这些具有不连续灰度特性的像素,如果采用常规的插值算法生成新增加的像素,势必会使放大图像的轮廓和纹理模糊,降低图像质量。
2.基于边缘的图像插值算法
为了克服传统方法的不足, 提出了许多边缘保护的插值方法,对插值图像的边缘有一定的增强, 使得图像的视觉效果更好, 边缘保护的插值方法可以分为两类: 基于原始低分辨图像边缘的方法和基于插值后高分辨率图像边缘的方法。基于原始低分辨率图像边缘的方法:(1)首先检测低分辨率图像的边缘, 然后根据检测的边缘将像素分类处理, 对于平坦区域的像素,采用传统方法插值;对于边缘区域的像素, 设计特殊插值方法, 以达到保持边缘细节的目的。(2)基于插值后高分辨率图像边缘的方法这类插值方法:首先采用传统方法插值低分辨率图像,然后检测高分辨率图像的边缘,最后对边缘及附近像素进行特殊处理, 以去除模糊, 增强图像的边缘。
3.基于区域的图像插值算法
首先将原始低分辨率图像分割成不同区域,然后将插值点映射到低分辨率图像, 判断其所属区域, 最后根据插值点的邻域像素设计不同的插值公式, 计算插值点的值。
主流插值算法
上述文献所阐述的分类方法可以参考,但文献阐述的方法过于狭隘,都是在线性方法上的基础做改良。偏微分方程插值(PDE),分形,小波逆向插值这三种也是插值算法的主流之一。小波与分形算法计算复杂度高,效果较好,小波边缘处理最好,分形次之。 [1]
小波插值充分利用 了图像奇异特征沿小波分解尺 度的传播性 , 能够更准确地重建出高分辨率图像细节。 但由于小波系数奇异值 的定位涉及精确复杂的边缘检 测且小波系数很难跨 尺度对准, 使得算法实现十分复杂。基于小波插值 的算法主要有两种, 分别为子带插值 和极值外推插值。小波变换本质上是用小波函数作为
带通滤波器进行滤波, 将原始信号分解为一系列频带上 的信号由小波函数簇定义小波变换为: 小波插值公式1。
小波插值公式1
而小波逆变换则是从分解到各频带 的信号进行原
始信号的重构 :小波插值公式2
小波插值公式2
小波插值公式3:推广出二维离散小波变换, 对数字图像进行重构和插值。 如果图像 是空间频率有限的二维信号, 对图像进行相应频窗的小 波反变换得到的图像就可认为是对该图像的插值。
小波插值公式3
分形图像是一种具有复杂几何形状,不规则的图像 ,但其内部基本特征是自相似性 ,它反映了局部与局部 ,局部与整体在形态、 功能、 时空等方面具有统计意义的相似性.提高图像分辨率的简单有效的方法是进行内插 ,但经通常的内插后 ,图像的纹理特征会有损失 ,利用分形插值方法可以生成高分辨率的图像 ,而且能保持原来图像的纹理特征。 [1]