Q:pytorch 的 torchvision 的 transforms.Resize 和 PIL 的 resize 有什么区别?
A:transforms.Resize 和 PIL.Image.resize 都能够用于调整图像大小,但它们的实现形式略有不同,次要体现在以下几个方面:
- 输出参数类型不同:transforms.Resize 承受的参数能够是整数、元组或列表,别离示意调整后的宽度和高度;而 PIL.Image.resize 承受的参数是一个元组或列表,别离示意调整后的尺寸。
- 解决形式不同:transforms.Resize 的解决形式是依据输出参数调整图像的长和宽,同时放弃宽高比例不变。如果只提供一个参数,则图像的长和宽会依据该参数进行缩放。如果提供两个参数,则图像的长和宽会被别离缩放到指定的大小。在缩放时,可能会进行插值操作,以取得更平滑的成果。
- PIL.Image.resize 的解决形式是依据输出参数间接调整图像的尺寸,不放弃宽高比例不变。如果新的尺寸与原始尺寸不同,会进行插值操作以适应新的尺寸。
- 输入类型不同:transforms.Resize 的输入是一个 PIL.Image 对象,能够应用 ToTensor 转换成 tensor,而 PIL.Image.resize 的输入是一个 PIL.Image 对象。
综上所述,transforms.Resize 更适宜在数据加强时应用,而 PIL.Image.resize 更适宜在对单张图像进行简略解决时应用。
Q:transforms.Resize 和 PIL 的 resize 的插值形式有区别吗?
A:是的,transforms.Resize 和 PIL 的 resize 的默认插值形式是不同的。
在 transforms.Resize 中,默认应用的是 PIL.Image.BILINEAR,即双线性插值。而在 PIL 的 resize 中,默认应用的是 PIL.Image.BICUBIC,即三次样条插值。
当然,transforms.Resize 也能够指定其余的插值形式,如 PIL.Image.NEAREST(最近邻插值)、PIL.Image.BICUBIC 等。同样地,也能够在 PIL 的 resize 中指定其余的插值形式。