Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python | |
| # -*- coding:utf-8 -*- | |
| # Power by Zongsheng Yue 2022-08-19 10:00:39 | |
| import cv2 | |
| import numpy as np | |
| from basicsr.data import degradations as degradations | |
| from utils import util_common | |
| def face_degradation(im, sf, sig_x, sig_y, theta, nf, qf): | |
| ''' | |
| Face degradation on testing data | |
| Input: | |
| im: numpy array, h x w x c, [0, 1], bgr | |
| sf: scale factor for super-resolution | |
| sig_x, sig_y, theta: parameters for generating gaussian kernel | |
| nf: noise level | |
| qf: quality factor for jpeg compression | |
| Output: | |
| im_lq: numpy array, h x w x c, [0, 1], bgr | |
| ''' | |
| h, w = im.shape[:2] | |
| # blur | |
| kernel = degradations.bivariate_Gaussian( | |
| kernel_size=41, | |
| sig_x=sig_x, | |
| sig_y=sig_y, | |
| theta=theta, | |
| isotropic=False, | |
| ) | |
| im_lq = cv2.filter2D(im, -1, kernel) | |
| # downsample | |
| im_lq = cv2.resize(im_lq, (int(w // sf), int(h // sf)), interpolation=cv2.INTER_LINEAR) | |
| # noise | |
| im_lq = degradations.add_gaussian_noise(im_lq, sigma=nf, clip=True, rounds=False) | |
| # jpeg compression | |
| im_lq = degradations.add_jpg_compression(im_lq, quality=qf) | |
| # resize to original size | |
| im_lq = cv2.resize(im_lq, (w, h), interpolation=cv2.INTER_LINEAR) | |
| # round and clip | |
| im_lq = np.clip((im_lq * 255.0).round(), 0, 255) / 255. | |
| return im_lq | |