|
import numpy as np |
|
|
|
from basicsr.utils.matlab_functions import bgr2ycbcr |
|
|
|
|
|
def reorder_image(img, input_order='HWC'): |
|
"""Reorder images to 'HWC' order. |
|
|
|
If the input_order is (h, w), return (h, w, 1); |
|
If the input_order is (c, h, w), return (h, w, c); |
|
If the input_order is (h, w, c), return as it is. |
|
|
|
Args: |
|
img (ndarray): Input image. |
|
input_order (str): Whether the input order is 'HWC' or 'CHW'. |
|
If the input image shape is (h, w), input_order will not have |
|
effects. Default: 'HWC'. |
|
|
|
Returns: |
|
ndarray: reordered image. |
|
""" |
|
|
|
if input_order not in ['HWC', 'CHW']: |
|
raise ValueError(f'Wrong input_order {input_order}. Supported input_orders are ' "'HWC' and 'CHW'") |
|
if len(img.shape) == 2: |
|
img = img[..., None] |
|
if input_order == 'CHW': |
|
img = img.transpose(1, 2, 0) |
|
return img |
|
|
|
|
|
def to_y_channel(img): |
|
"""Change to Y channel of YCbCr. |
|
|
|
Args: |
|
img (ndarray): Images with range [0, 255]. |
|
|
|
Returns: |
|
(ndarray): Images with range [0, 255] (float type) without round. |
|
""" |
|
img = img.astype(np.float32) / 255. |
|
if img.ndim == 3 and img.shape[2] == 3: |
|
img = bgr2ycbcr(img, y_only=True) |
|
img = img[..., None] |
|
return img * 255. |
|
|