Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import torch | |
| def apply_gamma_tensor(img_tensor, low=0.15, high=0.85, target=0.5): | |
| """对图像张量进行Gamma校正,当亮度超出[low, high]范围时自动调整到target亮度""" | |
| arr = img_tensor.detach().cpu().numpy() | |
| arr = (arr * 0.5) + 0.5 | |
| arr = np.clip(arr.squeeze(0).transpose(1, 2, 0), 0.0, 1.0) | |
| lum = float(np.dot(arr[..., :3], [0.299, 0.587, 0.114]).mean()) | |
| if low <= lum <= high: | |
| return img_tensor, lum, False, 1.0 | |
| eps = 1e-6 | |
| gamma = np.log(target + eps) / np.log(lum + eps) | |
| gamma = float(np.clip(gamma, 0.5, 2.5)) | |
| arr = np.clip(arr ** gamma, 0.0, 1.0) | |
| tensor = torch.from_numpy(((arr - 0.5) / 0.5).transpose(2, 0, 1)).unsqueeze(0).float() | |
| return tensor, lum, True, gamma | |