| import numpy as np | |
| from PIL import Image | |
| import torchvision.transforms as transforms | |
| def padding_336(b): | |
| width, height = b.size | |
| tar = int(np.ceil(height / 336) * 336) | |
| top_padding = int((tar - height) / 2) | |
| bottom_padding = tar - height - top_padding | |
| left_padding = 0 | |
| right_padding = 0 | |
| b = transforms.functional.pad( | |
| b, [left_padding, top_padding, right_padding, bottom_padding], | |
| fill=[255, 255, 255]) | |
| return b | |
| def HD_transform(img, hd_num=16): | |
| width, height = img.size | |
| trans = False | |
| if width < height: | |
| img = img.transpose(Image.TRANSPOSE) | |
| trans = True | |
| width, height = img.size | |
| ratio = (width / height) | |
| scale = 1 | |
| while scale * np.ceil(scale / ratio) <= hd_num: | |
| scale += 1 | |
| scale -= 1 | |
| new_w = int(scale * 336) | |
| new_h = int(new_w / ratio) | |
| img = transforms.functional.resize( | |
| img, | |
| [new_h, new_w], | |
| ) | |
| img = padding_336(img) | |
| width, height = img.size | |
| if trans: | |
| img = img.transpose(Image.TRANSPOSE) | |
| return img | |