基于多尺度自相似算法

采用多尺度自相似思想形成的算法可以引入到超分辨率相关问题的解决中。

主体思想

这类算法通常分为两个部分,一部分属于Classical SR,另一部分属于Example-based SR,通过构造一个框架将它们整合在一起,最终能够有助于单张低分辨率图像到高分辨率图像的恢复。


图1

上图解释了算法的主要原理:在同一张图片下的多个尺度下能够找到外观极其相似的图片快。Input image I中的块能再Various scales of I中的小尺寸图片中找到相似块,相似块能在输入图像中找到母块,因此构成了“低分辨率-高分辨率”的图像对,这就类似基于学习的方法了,再进行传统的图像恢复。

这里再有必要说一说两种方法结合的框架:

  • Classical SR

    图2

在图片中(a)就是传统的超分过程,
而图片中(b)在单幅图像中模拟的(a)的过程。

运用公式,只要这些patches有重叠的地方,就可以用多个patches来联立方程求解。

  • Example-based SR

基于例子的超分辨率需要找到高低分辨率的图像对,这种图像对可以在不同尺度的图片中进行寻找。如图所示:


图3

在图中可见I0 的深绿色小块在I-2 找到一个相似块,该块在I0层是一个大的浅绿色方块,那么我们就认定其为需要寻找的example。然后把它贴到需要恢复的图像层中,这个过程类似一个学习的模拟过程,但是实际上不需要学习。

为了尽可能提高精度,在具体实现上还采用了coarse to fine(粗到精)的思想,即先恢复要恢复的第一层I1,然后对错误进行纠正,在这里采用反向投影法,再用此方法恢复I2,如此迭代,最后得到高分辨率图H。

这里给出本人实现的核心部分(采用Matlab代码),仅供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
ImageName={'Child' 'Oldman' 'Chip'};
ImageName=ImageName{3};
I_small=imread([ImageName '_input.png']);
I_paper=imread([ImageName '_paper.png']);
alpha=2;
N=1;
sigma_example=20;
sigma_classical=(0.01)^2;
if size(I_small,3)==3
I_small = rgb2ycbcr(I_small);
Y = double(I_small(:,:,1));
else
Y = double(I_small);
end
low_size=size(Y);
patchsize=[5 5];
boundary=floor(patchsize(1)/2);
PSF_size=[2*floor(alpha)+1 2*floor(alpha)+1];
sigma_PSF=PSF_size(1)/6.4;
I = cell(3,1); %假设下采样一层
I{2,1} = Y; % 中间层是输入层
I{1,1} = imresize(I{2,1},alpha^(-1)); %下采样后的低尺度图像
%%由粗到精的过程
m = 3;
I_inscale=cell(1,1);
W_inscale=cell(1,1);
I_cross=cell(1,1);
W_cross=cell(1,1);
l = 2;
[W_inscale{1,1} I_inscale{1,1}]=InScale(I{2},alpha^(1),boundary,sigma_classical);
[W_cross{1,1} I_cross{1,1}]=CrossScale(sigma_PSF,I,boundary,2,3,alpha,sigma_example);

小结

此算法并不能还原图像最初包含的真实信息,但确实能在一定程度上增加图像的清晰度,且只需要采样于自身相似结构。