本文只考虑基本用法。常用的三个参数如下所示:
RandomResize(scale, ratio, keep_ratio):
其中,scale一般是个tuple,格式为(w, h),可以理解为缩放的基数。其中,w是宽度的基数,h是高度的基数。
ratio_range也是一个tuple,格式为(s1, s2),可以理解为缩放的倍率。大多数情况下ratio_range会被设置成(0.5, 2.0),也就是在缩小一半与放大一倍的区间内随机抽取。
那么,如果keep_ratio设为False,此时当前新图像的宽度为,从s1与s2区间内随机取一个倍率,并乘以scale[0]。高度则为同样的倍率下乘以scale[1]。注意这里宽与高的缩放用的是同一个倍率。
如果keep_ratio设为True,那么会在keep_ratio为False所得的结果上进行进一步校正。以保证输出图像的宽高比与原输入图像一致。具体来说,在缩放完后,会将新图的高度除以原图的高度,得到高度的缩放比例r1;将新图的宽度除以原图的宽度,得到宽度的缩放比例r2。那么,最终的缩放比例将以r1 r2中较小的值为准。
这里举一个更具体的例子,假如图像的原宽度为1280,高度为720,给定random resize配置如下:
dict(
ratio_range=(
0.5,
2.0,
),
scale=(
2880,
720,
),
type='RandomResize')
考虑随机抽取到的ratio为1.5:
如果keep_ratio设为False,那么新图像的宽度为2880×1.5=4320;高度为720×1.5=1080。
如果keep_ratio设为True,那么宽度的倍率为4320/1280=3.375,高度的倍率为1080/720=1.5。此时按较小的倍率1.5为准,修正后的最终宽度为1280×1.5=1920。
从另一个角度理解,如果keep_ratio设为True,scale参数会先被校正以与原图像的宽高比一致。