一、介绍
RAISR算法是一种快速且准确的图像超分辨率重建算法。
从上面的重建结果可知,RAISR算法的重建效果并不是最好的,它甚至不如A+(1024)的重建效果好,但是它的重建速度是最好的。
二、算法的要点
首先对于从HR->LR, RAISR认为基于这样一个退化模型
z=Ds*H*x
z是input image, 就是LR
x是要还原的HR image
H是blur过程, 就是降低HR的清晰度
Ds是降采样过程
这个就是RAISR的先验, 就是认为LR可以通过简单插值和一个sharpeness过程还原到HR, 而这个sharpness就是一个filter,其中h就是这个filter
一、算法的主要内容
① Cheap upscaling - 4 type filter
这里就用的是Bilinear Interpolation, 因为用的是Bilinear, 所以生成的upscale图上, 根据插值所用的点和权重不同, 要分成4 types of pix, 针对不同的pix, 也要训练不同的filte
P1是原先像素位置上的点,也就是不经过计算所得到的点。
P2 是横向两点插值得到的
P3 是纵向两点插值得到的
P4 是经过横纵两个维度插值得到的
这四种通过不同方式得到的点学出来的过滤器是不一样的。
这四个滤波器在幅度谱上差距不大,但是在相位上差距很大。
上述图片中显示的"divided patches into buckets"在本论文是指将图片patches按某种方式进行分类,在本文中是按gradient、strength、coherence。首先patches按插值元素的类型分为4类,再按照梯度,强度,相关性进行分类,则一共会分成4*24*3*3个桶。
② Hashing Classification
这是用哈希方法对样本进行聚类
其实大家用全局一样的filter也不是不行, 但是效果差点, 所以还是要根据局部特征自适应地训练不同的filter, 其实A+/ANR/SF也都用到K-means的方法来聚类, 只是有些用Euclidean distance, 有的用relevant
RAISR觉得你们这种聚类方式是"expensive" clustering, 这里的expensive应该是指在查找的时候计算量比较大, 所以就想了一种在查找的时候节省下成本的方法, 就是用局部的statistics of gradients来做Hash-table keys, 用对应的filter做hash-table entries, 这样查找就很方便, 在Upscale阶段, 对一个确定的点, 计算它的gradients, 然后找对应的filter来做恢复就可以
Statistics具体使用Angle/Strength/Coherence这三个值来作为Hash-table keys, 角度和强度都不用说, Coherence其实就是梯度各向异性的程度, 就是Coherence越大, 各向趋于不同, 越小, 各向趋于相同。
③ Blending Structure-Preserving Solution
为防止过度sharpen带来的结构改变问题, 在Upscaling阶段, RAISR还增加了一个Blend手段。
就是如果经过filter结构有重大改变, 我还是听原来的(就是cheap upscale的结果), 如果没有的话, 我就听滤波之后的。
这里用到了一个叫CT(Census Transform)的方法。
其实就是LBP, 局部二值化, 用周围的点和中心的关系将这个点附近区域编码, 用这串码表示这个点附近的结构, 判断结构是否相似就是用码串的相似度来衡量
实现过程中的randomness weights就是根据LCC(就是附近最少有多少个1或多少个0是连在一起的), 用这个来判断是不是在edge上, RAISR希望的是尽量只在高频部分进行filter, 而低频部分不要做
三、算法的小技巧
①
对于上图公式,如果A为100*20,则则为20*20,这样就降低了内存。
通过这种方法可以降低算法的复杂度和内存消耗。
②
本论文是对单个像素进行处理,学习得到一个11*11过滤器,其次需要很大的数据量,我们可以将每个块扩展为八个块。四个90度旋转,四个镜像对90度旋转。