0%

图像的上采样与下采样

图像的上采样与下采样

缩小图像(或称为下采样或降采样)的主要目的有两个:

  • 1.使得图像符合显示区域的大小
  • 2.生成对应图像的缩略图

放大图像(或成为上采样或图像插值)的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息,因此图像的质量将不可避免的收受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量的

下采样原理

​ 对于一幅图像I尺寸为M * N,对其进行s倍下采样,即得到(M/s) * (N/s)尺寸的得分辨率图像,当然s应该是M和N的公约数才行,如果考虑的是矩阵形式的图像,就是把原始图像s*s窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值;

上采样原理:

​ 图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。

​ 无论缩放图像(下采样)还是放大图像(上采样),采样方式有很多种。如最近邻插值,双线性插值,均值插值,中值插值等方法。在AlexNet中就使用了较合适的插值方法。各种插值方法都有各自的优缺点。

常用的插值方法:

  1. 最邻近元法

    这是最简单的一种插值方法,不需要计算,在待求象素的四邻象素中,将距离待求象素最近的邻象素灰度赋给待求象素。设i+u, j+v(i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求象素灰度的值 f(i+u, j+v) 如下图所示:

1563759187630

如果(i+u, j+v)落在A区,即u<0.5, v<0.5,则将左上角象素的灰度值赋给待求象素,同理,落在B区则赋予右上角的象素灰度值,落在C区则赋予左下角象素的灰度值,落在D区则赋予右下角象素的灰度值。

最邻近元法计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

2、双线性内插法

双线性内插法是利用待求象素四个邻象素的灰度在两个方向上作线性内插,如下图所示

1563759418809

对于 (i, j+v),f(i, j) 到 f(i, j+1) 的灰度变化为线性关系,则有:

f(i, j+v) = [f(i, j+1) - f(i, j)] * v + f(i, j)

同理对于 (i+1, j+v) 则有:

f(i+1, j+v) = [f(i+1, j+1) - f(i+1, j)] * v + f(i+1, j)

从f(i, j+v) 到 f(i+1, j+v) 的灰度变化也为线性关系,由此可推导出待求象素灰度的计算式如下:

f(i+u, j+v) = (1-u) * (1-v) * f(i, j) + (1-u) * v * f(i, j+1) + u * (1-v) * f(i+1, j) + u * v * f(i+1, j+1)

双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

3、三次内插法

该方法利用三次多项式S(x)求逼近理论上最佳插值函数sin(x)/x, 其数学表达式为:

S(x)={12x2+x30x<148x+5x2x21x<20x2S(x)=\left\{\begin{array}{cc}{1-2|x|^{2}+|x|^{3}} & {0 \leq|x|<1} \\ {4-8|x|+5|x|^{2}-|x|^{2}} & {1 \leq|x|<2} \\ {0} & {|x| \geq 2}\end{array}\right.

1563762540105

待求像素的灰度计算式如下:

f(x,y)=f(i+u,j+v)=ABCf(x, y)=f(i+u, j+v)=A B C

其中:

A=(S(1+v)S(v)S(1v)S(2v))A=\left(\begin{array}{c}{S(1+v)} \\ {S(v)} \\ {S(1-v)} \\ {S(2-v)}\end{array}\right)^{\top}

B=(f(i1,j1)f(i1,j)f(i1,j+1)f(i1,j+2)f(i,j1)f(i,j)f(i,j+1)f(i,j+2)f(i+1,j1)f(i+1,j)f(i+1,j+1)f(i+1,j+2)f(i+2,j1)f(i+2,j)f(i+2,j+1)f(i+2,j+2))B=\left(\begin{array}{c}{f(i-1,j-1)} & {f(i-1,j)} & {f(i-1,j+1)} & {f(i-1,j+2)} \\ {f(i,j-1)}&{ f(i,j) }&{f(i,j+1) }&{f(i,j+2)} \\ {f(i+1,j-1)} & {f(i+1,j)} &{f(i+1,j+1)} & {f(i+1,j+2)} \\ {f(i+2,j-1)} & {f(i+2,j)} & {f(i+2,j+1)} & {f(i+2,j+2)} \end{array}\right)

C=(S(1+u)S(u)S(1u)S(2u))C=\left(\begin{array}{c}{S(1+u)} \\ {S(u)} \\ {S(1-u)} \\ {S(2-u)}\end{array}\right)

三次曲线插值方法计算量较大,但插值后的图像效果最好