LambdaSuperRes / KAIR /image_degradation.py
cooperll
LambdaSuperRes initial commit
2514fb4
import math
import os
import numpy as np
from basicsr.data.degradations import circular_lowpass_kernel, random_mixed_kernels
from basicsr.utils import DiffJPEG, USMSharp
from numpy.typing import NDArray
from PIL import Image
from torch import Tensor
from torch.nn import functional as F
from data.degradations import apply_real_esrgan_degradations
from utils.utils_video import img2tensor
blur_kernel_list1 = ['iso', 'aniso', 'generalized_iso',
'generalized_aniso', 'plateau_iso', 'plateau_aniso']
blur_kernel_list2 = ['iso', 'aniso', 'generalized_iso',
'generalized_aniso', 'plateau_iso', 'plateau_aniso']
blur_kernel_prob1 = [0.45, 0.25, 0.12, 0.03, 0.12, 0.03]
blur_kernel_prob2 = [0.45, 0.25, 0.12, 0.03, 0.12, 0.03]
kernel_size = 21
blur_sigma1 = [0.05, 0.2]
blur_sigma2 = [0.05, 0.1]
betag_range1 = [0.7, 1.3]
betag_range2 = [0.7, 1.3]
betap_range1 = [0.7, 1.3]
betap_range2 = [0.7, 1.3]
def degrade_imgs(src_folder: str, dst_folder: str, degrade_scale: float, start_size: int) -> None:
src_img_filenames = os.listdir(src_folder)
jpeg_simulator = DiffJPEG()
usm_sharpener = USMSharp()
for src_img_filename in src_img_filenames:
src_img = Image.open(os.path.join(src_folder, src_img_filename))
src_tensor = img2tensor(np.array(src_img), bgr2rgb=False,
float32=True).unsqueeze(0) / 255.0
orig_h, orig_w = src_tensor.size()[2:4]
print("SRC TENSOR orig size: ", src_tensor.size())
if orig_h != start_size or orig_w != start_size:
src_tensor = F.interpolate(src_tensor, size=(start_size, start_size), mode='bicubic')
print("SRC TENSOR new size: ", src_tensor.size())
blur_kernel1, blur_kernel2, sinc_kernel = _decide_kernels()
(src, src_sharp, degraded_img) = apply_real_esrgan_degradations(
src_tensor,
blur_kernel1=Tensor(blur_kernel1).unsqueeze(0),
blur_kernel2=Tensor(blur_kernel2).unsqueeze(0),
second_blur_prob=0.4,
sinc_kernel=Tensor(sinc_kernel).unsqueeze(0),
resize_prob1=[0.2, 0.7, 0.1],
resize_prob2=[0.3, 0.4, 0.3],
resize_range1=[0.9, 1.1],
resize_range2=[0.9, 1.1],
gray_noise_prob1=0.2,
gray_noise_prob2=0.2,
gaussian_noise_prob1=0.2,
gaussian_noise_prob2=0.2,
noise_range=[0.01, 0.2],
poisson_scale_range=[0.05, 0.45],
jpeg_compression_range1=[85, 100],
jpeg_compression_range2=[85, 100],
jpeg_simulator=jpeg_simulator,
random_crop_gt_size=start_size,
sr_upsample_scale=1,
usm_sharpener=usm_sharpener
)
# print(src.size())
# print(src_sharp.size())
# print(degraded_img.size())
# print(torch.max(src))
# print(torch.max(src_sharp))
# print(torch.max(degraded_img))
# print(torch.min(src))
# print(torch.min(src_sharp))
# print(torch.min(degraded_img))
# Image.fromarray((src[0] * 255.0).permute(1, 2, 0).cpu().numpy().astype(np.uint8)).save(
# "/home/cll/Desktop/TEST_IMAGE1.png")
# Image.fromarray((src_sharp[0] * 255.0).permute(
# 1, 2, 0).cpu().numpy().astype(np.uint8)).save(
# "/home/cll/Desktop/TEST_IMAGE2.png")
Image.fromarray((degraded_img[0] * 255.0).permute(
1, 2, 0).cpu().numpy().astype(np.uint8)).save(
os.path.join(dst_folder, src_img_filename))
print("SAVED %s: " % src_img_filename)
# Image.fromarray((src_tensor[0] * 255.0).permute(
# 1, 2, 0).cpu().numpy().astype(np.uint8)).save(
# os.path.join(dst_folder, src_img_filename))
# print("SAVED %s: " % src_img_filename)
if __name__ == "__main__":
SRC_FOLDER = "/home/cll/Desktop/sr_test_GT_HQ"
OUTPUT_RESOLUTION_SCALE = 1
DST_FOLDER = "/home/cll/Desktop/sr_test_degraded_LQ_512"
# DST_FOLDER = "/home/cll/Desktop/sr_test_GT_512"
os.makedirs(DST_FOLDER, exist_ok=True)
degrade_imgs(SRC_FOLDER, DST_FOLDER, OUTPUT_RESOLUTION_SCALE, 512)