目前常用的数据集提供的都是高分辨率图片。如果是实验室环境下的图项超分辨率监督实验——即不采用现实生活的直接图片,往往都是通过算法将数据集中的高分辨率图片生成出低分辨率图片来进行训练学习。
目前常用的数据集提供的都是高分辨率图片。如果是实验室环境下的图项超分辨率监督实验——即不采用现实生活的直接图片,往往都是通过算法将数据集中的高分辨率图片生成出低分辨率图片来进行训练学习。其中,双三次插值法作为最早的图像插值算法在如今的超分辨率研究领域中往往被用作训练数据集的生成。(RCAN,EDSR都采用这个方法)因此对该算法有一定的了解还是有必要的。 下文会大致讲解双三次插值算法的具体原理,萌新上路,请多指教。
- 双三次插值算法的具体思路 插值算法的核心是将原来mn大小的图像A通过插值算法后缩放为MN大小的图像B。那么映射关系就是:
B ( x , y ) → A ( x ∗ ( m / M ) , y ∗ ( m / M ) ) B(x, y) \rightarrow A(x * (m / M), y * (m / M)) B(x,y)→A(x∗(m/M),y∗(m/M))
而B中的x,y则是有对应的A中坐标附近最近的点通过加权得到。在双三次插值算法中,选择的是距离下图中P点(A中对应点坐标)最近的16个点。由于P点坐标是实数,我们把方框中心记为坐标的整点。记上图的a00为
(
x
0
,
y
0
)
(x_0, y_0)
(x0,y0),P点的小数部分分别为u,v。则P点可以被表示为
(
x
0
+
1
+
u
,
y
0
+
1
+
v
)
(x_0 + 1 + u, y_0 + 1 + v)
(x0+1+u,y0+1+v),其他的点的坐标也可以由这些变量表示。
在找到了最近的16个点后(事实上,只要看P在方框中心的哪个区域就可以很快确定出16个点),接下来就要给16个点的像素值分配权重。(记这16个点构成的集合为
S
i
,
j
S_{i,j }
Si,j)简单思考,对于生成图中的像素来说,原图中距离其对应点越近,对其影响越大。所以权重分配大致来说是距离P点越近的像素点权重越大。双三次插值法所用的函数为BiCubic基函数。 在双三次插值中,距离并不是直接取点到点的直线距离,而是分解为水平竖直方向分别计算。如:
a
00
a_{00}
a00距离P点为
(
1
+
u
,
1
+
v
)
(1 + u, 1 + v)
(1+u,1+v)那么我们可以得到:
k
i
0
=
W
(
1
+
u
)
k_{i_0}=W(1+u)
ki0=W(1+u)
k
j
0
=
W
(
1
+
v
)
k_{j_0}=W(1+v)
kj0=W(1+v) 而最终的权重为分量权重的乘积:
k
i
,
j
=
W
(
1
+
u
)
∗
W
(
1
+
v
)
k_{i, j} = W(1 + u) * W(1 + v)
ki,j=W(1+u)∗W(1+v) 从而得到B中
(
x
,
y
)
(x, y)
(x,y)的像素值:
B
(
x
,
y
)
=
∑
p
∈
S
i
,
j
k
p
∗
A
(
p
)
B(x, y) = \sum_{p\in S_{i, j}} k_p * A(p)
B(x,y)=∑p∈Si,jkp∗A(p)
- 退化逻辑 了解了双三次插值算法的原理之后,那么对于双三次插值的提高分辨率和退化图像事实上就都清楚了。当把图像缩小时,利用多个像素点合成出一个像素点,丢失一部分信息,图像分辨率自然下降。提高分辨率也是一样的道理(增加了细节信息)。