超分辨率成像(Super-resolution imaging,缩写SR),是一种提高影片分辨率的技术。在一些称为“光学SR”的SR技术中,系统的衍射极限被超越;而在其他所谓的“几何SR”中,数位感光元件的分辨率因而提高。超分辨率成像技术用于一般图像处理和超高分辨率显微镜。
在2000年以来,小波变换的技术被使用在提高影像的分辨率。
DASR (Demirel-Anbarjafari Super Resolution)是使用离散小波变换(Discrete wavelet transform)来进行超分辨率成像的方法。当时,超分辨率成像通常是以内插影像的像素值来完成,而作者认为,对影像中的高频部分进行内插是造成品质降低的主要理由,因为内插高频部分让物体的边界变得模糊且平滑,于是提出使用离散小波变换的算法来减轻这个问题。
影像可以表示成二维的讯号,经过二维的离散小波变换,可以被分解成四个不同频段的影像,分别是:low-low (LL), low-high (LH), high-low (HL) 和 high-high (HH),各自代表在不同维度是高频或低频,举例来说,LH就是在原影像的第一维(x轴)是低频而在第二维(y轴)是高频的分解后结果。
将原影像分解为LL, LH, HL和HH后,DASR会对高频段的三张影像LH, HL和HH分别做内插,以产生高分辨率的LH, HL和HH。这是由于作者认为,将不同的高频影像各自做内插,能够避免彼此干扰,进而保留更多的高频资讯。DASR不会内插LL,而是内插原图来当作高分辨率的LL,因为原图比LL含有更多资讯。取得四张高分辨率的LL, LH, HL和HH后,DASR将四张影像经过逆离散小波变换(Inversed discrete wavelet transform),来生成最终的成像结果。
DASR当时在 Lena, Elaine, Pepper和Baboon上取得State-of-the-art的结果,并超越传统使用内插和其它使用离散小波变换的方法。
随着神经网络的流行,相关技术也被应用在提高图片分辨率。
SRCNN ( Super-resolution convolution neural network )是一个神经网络,输入是一个低分辨率(视觉上)的图像,而输出是一个高分辨率的图像,这里需要注意的是,在将图像喂进神经网络前,需要先经过一个预处理bicubic interpolation,将原始图片变成跟想要的高分辨率图像一样大小后,再喂进神经网络中。而神经网络做的事情,主要分成三个步骤区块特征抽取与表达(Patch extraction and representation)、非线性对应(non-linear mapping)以及重建(reconstruction)。
这一步就如同一般的CNN ( convolution neural network ),只是没有经过max-pooling,公式如下。
代表已经经过bicubic interpolation的图像,则为这层神经网络的输出,代表个的filter(是图像的channel数量,而则为filter的大小),代表卷积(convolution),是偏移量(bias),最后的则代表激活函数RELU。
非线性对应,基本上就是持续利用一般CNN的方式将前一步每一块的维的特征向量,分别转换成维的特征向量,公式如下。
在重建的步骤中,我们要考虑的是每一个像素所要的值是多少,这个步骤可以想成在多个相关的高维度的特征向量中,取一个平均,很凑巧的,这刚好也很像一般的卷积层(convolution layer),公式如下。
在SRCNN中所采用的差异函数(Loss Function)是简单的平均方根差(Mean Square Error),定义为重建后的相片每一个像素与真正的图片的每一个像素的差异,公式如下。
为SRCNN的参数,为给定的SRCNN重建的图像,则为真正的高分辨率图像,为拿来训练神经网络的图像数量或者是一个batch中所有的图像数量。
这篇论文提供了一个做法,可以应用在图像风格转移(Style Transfer)以及超高分辨率(Super-resolution)。
整个系统由两个神经网络组成,其中一个是图像转移网络,另一个则是可以用来定义各种差异的差异网络。
图像转移网络的输入为一张图像,输出也是一张图像,而这个网络的参数以表示。
这个图像转移网络由5个residual block所组成,而所有非residual的convolution layer后面都会接上batch normalization。激活函数(activation function)的部分,除了在最后的输出层(output layer)使用scaled tanh使得输出的数值在0到255之间,其他都是使用RELU。
convolution layer的filter(kernel)的数量上,第一层和最后一层使用个,其他层则是使用个。
差异网络定义了各种差异函数(loss function),输入为两张图像,一张来自图像转移网络,一张则是真正的高分辨率影像,输出为一个实数(scalar)。
而这篇论文所使用的差异网络是16层的VGG网络,并事先利用Image Net训练过。差异函数的部分,使用了两个不同于传统简单的差异函数。(CHW代表feature map各个维度的数值)
这个差异函数的设计理念在于,当我们在看两张图片像不像时,我们并不是一个一个像素的比较,而是比较两张图片中的特征像不像。因此,他拿差异网络中某一层的输出,当作一个图片特征值,再以两张图片的特征值的Euclidean Distance当作差异。
除了一般的特征以外,我们也会需要图像转移网络正确的重建颜色、材质等等的内容,因此必须再加上风格重建差异函数。在定义风格重建差异之前,我们先定义Gram矩阵。
接着差异函数就可以定义为
而一般比较每一个像素差异的差异函数,则可以写为
有了这两个网络后,训练图像转移网络的方法则是最小化各式差异函数的权重和(weighted sum),优化的方法是梯度下降法(Stochastic Gradient Descent(l()是差异函数(loss function)))。
这篇论文在高分辨率图像这个传统问题上,给了一个快速且有效的解法,快速的原因在于,在遇到一张新的图片时,只需要把图像喂进图像转移网络就好(一次forward pass)。而在结果上,也大大的超越了之前的做法(一样使用深度神经网络)SRCNN。