|
|
| from dataset.range_transform import inv_im_trans, inv_lll2rgb_trans |
| from skimage import color, io |
| import cv2 |
| import numpy as np |
|
|
| def detach_to_cpu(x): |
| return x.detach().cpu() |
|
|
| def tensor_to_np_float(image): |
| image_np = image.numpy().astype('float32') |
| return image_np |
|
|
| def lab2rgb_transform_PIL(mask): |
| flag_test = False |
|
|
| mask_d = detach_to_cpu(mask) |
| |
| if flag_test: print('before inv', mask_d.size(), torch.max(mask_d), torch.min(mask_d)) |
| mask_d = inv_lll2rgb_trans(mask_d) |
| if flag_test: print('after inv', mask_d.size(), torch.max(mask_d), torch.min(mask_d));assert 1==0 |
|
|
| im = tensor_to_np_float(mask_d) |
|
|
| if len(im.shape) == 3: |
| im = im.transpose((1, 2, 0)) |
| else: |
| im = im[:, :, None] |
|
|
| im = color.lab2rgb(im) |
|
|
| return im.clip(0, 1) |
|
|
| def calculate_psnr(img1, img2): |
| mse_value = ((img1 - img2)**2).mean() |
| if mse_value == 0: |
| result = float('inf') |
| else: |
| result = 20. * np.log10(255. / np.sqrt(mse_value)) |
| return result |
|
|
| def calculate_psnr_for_folder(gt_folder, result_folder): |
| result_clips = sorted(os.listdir(result_folder)) |
|
|
| psnr_values = [] |
| for clip in result_clips: |
| path_clip = os.path.join(result_folder, clip) |
| test_files = sorted(os.listdir(path_clip)) |
|
|
| for img in test_files: |
| gt_path = os.path.join(gt_folder, clip, img) |
| result_path = os.path.join(path_clip, img) |
| |
| gt_img = np.array(Image.open(gt_path)) |
| result_img = np.array(Image.open(result_path)) |
|
|
| psnr = calculate_psnr(gt_img, result_img) |
| psnr_values.append(psnr) |
| |
| avg_psnr = np.mean(psnr_values) |
| return avg_psnr |