Google超分辨率论文RAISR实现小结

简介

  这段时间研究了下google去年发的超分辨率论文:RAISR: Rapid and Accurate Image Super Resolution,宣称是可以在重建质量不差情况下,速度比目前算法如A+之类,能够有10到100倍性能提升。
比较有工程意义。因此对它进行了下代码实现。
  从我这边实现效果来看,使用A+作者提供的参考代码,在我电脑上跑256x256图片,花费时间在0.56秒左右;而使用RAISR来跑时间花费大概在0.03-0.05秒左右。确实比A+论文原始代码,有10倍以上
性能提升。

基本实现

  同样的RAISR与A+之类字典重建方式一样,需要做字典训练,不过在这片论文中,训练出来的不叫字典,而是叫滤波器。
基本思想也分为训练和重建两个部分。
    注:这里讲解全部默认为2倍重建。

训练阶段

  前提准备:1、待训练的HR高分辨率图像集。
              2、对每个HR图像用下采样2倍大小,得到清晰小图集合。
              3、对清晰小图用双线性或者三次方插值2倍,到和对应HR图像同样大小,得到模糊图像LR集合。
    训练步骤:1、对LR图像求X、Y方向梯度,得到梯度图集合gradX, gradY。
              2、将LR,gradX,gradY图像集合以相同坐标区域切成若干个sqrt(n) X sqrt(n)矩形块,以及该矩形中心对应的HR像素。
              3、将gradX和gradY矩形块填充到:
              4、求出的特征值和特征向量,。Wk可以简单粗暴的理解为:对焦线元素为一维高斯核,其他位置为0的矩阵。
              5、这里求出来的特征值(r1,r2)和特征向量应该都有两个。取最大特征值对应的特征向量,计算梯度Angle:
              6、sqrt(r1)表示为梯度Strength。
              7、利用公式:求出梯度Coherence。
              8、其中设置梯度Angle范围为[0,180],将范围分为24段;梯度Strength和梯度Coherence范围为[0, 1.0],各将范围分成3份。
                注意:这样,每个LR和HR矩形窗口,都可以根据它们各自的梯度(Angle,Strength,Coherence),分类到24*3*3=216种类别中。
              9、同时在2倍插值时候,可以理解为原始图像每个像素,将对应到四个类型插值像素。根据分割矩阵窗口中心像素所属,再将矩形窗口根据
       不同像素类型分到四类。
              10、最终每个分割矩形窗口,将被分类为:4*24*3*3=864类中。
              11、每个类中,LR矩形块数据保存到Q中,HR对应像素存入V中,根据公式:,解最小二乘,得到每个类对应滤波器。


    论文上伪代码步骤如下:
 
        计算梯度(Angle,Strength,Coherence):
              
        滤波器训练:
              


   注:论文上还提到,对训练图像集HR做锐化或对比度增强操作之后,再做训练。得到的滤波器可以使得重建图像清晰度、对比度更好,且不增加重建时间。

重建

  重建流程相对比较简单:1、对输入待重建图像,进行双线性或者三次方放大,得到LR图像。
                          2、获取到LR图像梯度图gradX,gradY
                          3、将LR、gradX、gradY图像分成和训练时候一样大小图像块。
                          4、和训练相同办法,找到每个图像块中心像素对应的像素类型,以及求出图像块的梯度(Angle,Strength,Coherence)。
                          5、根据像素类型和梯度(Angle,Strength,Coherence),在864个分类中,找到该块所属的类,也就获取到了该块重建像素对应的滤波器。
                          6、每个LR块和它对应的滤波器做卷积操作,得到该矩形中心位置像素的HR图像像素,遍历全图之后,也就生成了对应的HR图像。
                          7、最后还需要一步结构相似度来对HR图像滤波,去除掉HR图像上,由于某个类滤波器没有训练好,或者某个块选错了导致异常像素点。
    论文上对应伪代码如下:
          


效果比较

  对应的效果比较如下(左图为RAISR,右图为双线性插值):
  

你可能感兴趣的:(opencv,图像处理,图像插值放大)