|
import cv2 |
|
import numpy as np |
|
import torch |
|
|
|
|
|
def save_img(img, name, gamma=False): |
|
if gamma: |
|
img = np.power(img, 1/2.2) |
|
img = np.clip(img, 0, 1) |
|
img = (img * 65535).astype(np.uint16) |
|
if img.ndim == 3: |
|
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) |
|
cv2.imwrite(name, img) |
|
|
|
|
|
def compute_y(img: np.ndarray) -> np.ndarray: |
|
y = 0.299 * img[:, :, 0] + 0.587 * img[:, :, 1] + 0.114 * img[:, :, 2] |
|
return y |
|
|
|
|
|
def compute_raw_y(img: np.ndarray) -> np.ndarray: |
|
g1 = img[..., 1] |
|
g2 = img[..., 2] |
|
ret = (g1 + g2) / 2 |
|
return ret |
|
|
|
|
|
def pack_raw(im): |
|
|
|
if isinstance(im, torch.Tensor): |
|
im = torch.unsqueeze(im, dim=-1) |
|
img_shape = im.shape |
|
H = img_shape[0] |
|
W = img_shape[1] |
|
|
|
out = torch.cat((im[0:H:2, 0:W:2, :], im[0:H:2, 1:W:2, :], |
|
im[1:H:2, 1:W:2, :], im[1:H:2, 0:W:2, :]), |
|
dim=-1) |
|
elif isinstance(im, np.ndarray): |
|
im = np.expand_dims(im, axis=-1) |
|
img_shape = im.shape |
|
H = img_shape[0] |
|
W = img_shape[1] |
|
|
|
out = np.concatenate((im[0:H:2, 0:W:2, :], im[0:H:2, 1:W:2, :], |
|
im[1:H:2, 1:W:2, :], im[1:H:2, 0:W:2, :]), |
|
axis=-1) |
|
return out |
|
|
|
|
|
def depack_raw(im): |
|
|
|
img_shape = im.shape |
|
H = img_shape[0] |
|
W = img_shape[1] |
|
if isinstance(im, torch.Tensor): |
|
output = torch.zeros((H * 2, W * 2), dtype=im.dtype) |
|
elif isinstance(im, np.ndarray): |
|
output = np.zeros((H * 2, W * 2), dtype=im.dtype) |
|
img_shape = output.shape |
|
H = img_shape[0] |
|
W = img_shape[1] |
|
|
|
output[0:H:2, 0:W:2] = im[:, :, 0] |
|
output[0:H:2, 1:W:2] = im[:, :, 1] |
|
output[1:H:2, 1:W:2] = im[:, :, 2] |
|
output[1:H:2, 0:W:2] = im[:, :, 3] |
|
|
|
return output |
|
|