图(1)是原图
原代码生成上采样生成的图片如图(2)
sr_bicubic_batch = F.interpolate(img_tensor, size=(512, 512), mode='bicubic').clamp(min=0, max=255)
sr_img = sr_bicubic_batch.squeeze(0).permute(1, 2, 0).cpu().numpy()
sr_img = (sr_img * 255).astype(np.uint8)
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, sr_img[:, :, ::-1])
(1) (2) (3)
改正后的代码 生成的图片如图(3)
sr_bicubic_batch = F.interpolate(img_tensor, size=(512, 512), mode='bicubic', align_corners=False)
sr_img = sr_bicubic_batch.squeeze(0).permute(1, 2, 0).cpu().numpy()
sr_img = np.clip(sr_img, 0, 1) # 将值限制在 [0, 1] 之间
sr_img = (sr_img * 255).astype(np.uint8)
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, sr_img[:, :, ::-1])
出现彩色线条的问题通常是由于插值过程中数值的溢出或者不正确的数值范围转换导致的。在 F.interpolate
之后,需要确保图像数据的数值范围正确,并且在保存之前,数据应该在 [0, 255] 之间。