【图像处理】Tensorflow:简易超分辨重建与坑



超分辨重建是图像复原领域的一大热点,能在硬件有限的情况下最大还原原始场景的信号,在天文探索、显微成像等领域有重要作用。成像设备对物体成像时,由于距离较远,成像会模糊,可以类比多尺度高斯滤波;受限于成像机能,成像像素达不到最理想条件,可类比为对原始像进行一个下采样。超分辨重建就是要在这种条件下复原原始图像。
  假设上帝有最好的成像设备,成像为X;我们成像设备成像为B,高斯滤波模板设为G;为了防止问题病态,加入lasso正则。那么有:



argmin [subsampling(conv(X,G))B]2+λX

现在的问题是,Tensorflow如何表示subsampling并进行优化?

  Tensorflow支持以下几种图像缩放/采样:

  • tf.image.resize_images,支持最近邻、双线性、双三次等缩放方法
  • tf.nn.max_pool 最大值下采样
  • tf.nn.avg_pool 均值下采样

      现在我们逐个测试一下。图像经过三倍下采样:
      成像
      1、tf.image.resize_images,双线性采样,振铃不严重,条纹很多:
      双线性
      2、tf.nn.max_pool,没有条纹、振铃,但是有一堆噪声,参数调了几次都没有什么更好的效果:
      maxpool
      3、tf.nn.avg_pool,无条纹、噪声,有振铃,与原图相比颜色变暗,对比度下降:
      avgpool
      4、来与原图做个对比
      原图

      可以看出,效果最好的就是avg_pool了,在只有高斯模板参数,完全没有其他先验信息的情况,一秒钟内得到这个结果,已经让人非常惊讶了。猜测image-resize和max_pool其实在上下采样中都丢失相当多的信号,而avg_pool则保留了最多的信号,因此重建效果较好。
      fast-neural-style文章提到过用感知特征来对图像进行超分辨重建,可以重建同样风格的细节,这个需要用生成网络对大量的图像进行训练,或者直接上vgg慢慢地计算感知特征来仿制风格细节。