在图像变换后,可能出现的两个问题:
①因为相邻像素之间只能有8个方向,而旋转方向却是任意的,使得像素的排列不是完全按照原有的相邻关系。
②会出现许多空洞点。
因此采用插值方法来进行处理。图像差值的目的在于自动选择比较理想的像素值来增加图像的信息。该方法是利用已经的像素值来评估需要差值的位置的像素值。
图像插值的方法很多,常用的有最近邻插值法、均值插值法、双线性插值法和双三次插值法。
1、最近邻插值法 nearest_neighbor
最近邻插值是最简单的一种插值方法。最近邻插值通常用在放大图像时补充空白位置的像素。其原理是在原图像寻找距离目标图像位置点最近距离的像素,然后将原图像该位置像素插入目标图像对应位置。
最近邻插值算法简单,计算速度快。但是这种插值方法导致像素的变化不连续,在新图中会产生锯齿现象。
最近邻插值是一种最简单的图像缩放算法,但是,该算法效果不好,图像放大后存在严重的锯齿现象,图像缩小后有严重的失真。因为由目标图像通过反推得到的原图像中的位置是浮点数,如果直接通过四舍五入的方法取整,没有考虑邻域像素对该位置的影响。如果目标像素值是根据邻域内真实的点按照一定的规律计算出来的,这样才可能达到更好的缩放效果。双线性插值算法即为采用这种思路设计的插值算法,它利用了计算出来的浮点数坐标与原图中邻近的四个真实像素值的关系,来共同决定目标中的像素值。
2、双线性插值法 bilinear
双线性插值首先在水平方向做了两次线性插值,然后将两次线性插值的结果再在垂直方向做一次线性插值来计算目标位置对应的原图像上的坐标。线性插值是利用直线方程进行插值的方法。
对于一个新位置的点,其一定落在四个像素之间。双线性插值法充分考虑了邻域内四个像素对新的像素的影响。因此,该算法的计算时间复杂度比最近邻插值法要大。而且由于双线性插值具有低通滤波器的性质,使高频分量受损,所有可能会使图像轮廓在一定程度上变得模糊。
3、双三次差值 bicubic (也叫双立方插值)
双三次插值也称为双立方插值,是一种更加复杂的插值方式,它能得到比双线性插值更平滑的图像边缘。双三次插值最近的十六个采样点的加权平均得到。双三次插值法首先需要计算每个点的权重。
双三次差值的结果较好。但是,该算法的计算时间复杂度太大,通常对于有打印图像需求的时候,如果涉及将图像放大等操作,采用该算法实现。而对于机器视觉而言,如果对图像缩放之后的要求不是很高,一般不采用此算法。
4、等权双线性插值法 constant (常规双线性差值)
貌似也可以叫均值插值法对于空洞的位置,用其相邻的四个像素的平均灰度来填充。
5、高斯加权双线性插值法 weighted (加强双线性插值)
1、nearest_neighbor:最近邻插值。根据最近像素的灰度值确定插值的灰度值。【质量较低,但速度非常快】 |
2、bilinear:双线性插值。灰度值通过双线性插值从最近的4个像素点确定。如果仿射变换包含比例因子小于1的缩放,则不进行平滑,这可能导致严重的混叠效果。【中等质量和中等计算时间】 |
3、bicubic:双立方插值。灰度值由4×4个最接近的像素通过双三次插值确定。如果仿射变换包含尺度因子小于1的缩放,则不进行平滑处理,这可能导致严重的混叠效果。【放大质量高,但速度慢】 |
4、constant:常规双线性差值。灰度值通过双线性插值从最近的4个像素点确定。如果仿射变换包含尺度因子小于1的缩放,则使用一种均值滤波器来防止混叠效果。【中等质量和中等计算时间】 |
5、weighted:高斯加权双线性插值法。灰度值通过双线性插值从最近的4个像素点确定。如果仿射变换包含比例因子小于1的缩放,则使用一种高斯滤波器来防止混叠效果。【高质量,速度慢】 |
差值算法 | 处理质量 | 计算时间 (将最近邻差值发视为1) |
nearest_neighbor | 质量低,但不处理图像的缩小 | 1 |
bilinear | 质量较高,但不处理图像的缩小 | 3 |
bicubic | 质量最高,但不处理图像缩小 | 6 |
constant | 图像缩小时,质量更高。 | 3 10(图像缩小的情况下) |
weighted | 图像缩小时,质量最高。 | 3 20(图像缩小的情况下) |