"""A file containing some useful checks for the project. This file should NOT be modified. """ from os.path import exists import numpy as np def check_path(file_path: str) -> None: """Checks if a file exists at file_path and is a png image. Args: file_path (str): Path to check Raises: Exception: Exception if the path is invalid. """ if not exists(file_path): raise Exception('File does not exist.') def check_png(file_path: str) -> None: """Checks if the file is a png image. Args: file_path (str): Path to check. """ if not file_path.endswith('.png'): raise Exception(f'Path must end with ".png". Got {file_path[-4:]}.') def check_rgb(img: np.ndarray) -> None: """Checks if image is a 3 dimensional array with 3 channels. Args: img (np.ndarray): Image to check. Raises: Exception: Exception if image is not a 3 dimensional array with 3 channels. """ if not (len(img.shape) == 3 and img.shape[2] == 3): raise Exception(f'The images must be 3 dimensional (RGB) arrays. Got an array of shape {img.shape}.') def check_shape(img1: np.ndarray, img2: np.ndarray) -> None: """Checks if img1 and img2 have the same shape. Args: img1 (np.ndarray): First image. img2 (np.ndarray): Second image. Raises: Exception: Exception if img1 and img2 do not have the same shape. """ if img1.shape != img2.shape: raise Exception(f'The images must have the same shape. Got {img1.shape} and {img2.shape}.') def check_data_range(img: np.ndarray) -> None: """Checks if the values of img are in the interval [0, 1]. Args: img (np.ndarray): Image to check. Raises: Exception: Exception if img's values are not in [0, 1]. """ if np.max(img) > 1 or np.min(img) < 0: raise Exception(f'Pixel\'s values must be in range [0, 1]. Got range [{np.min(img)}, {np.max(img)}].') def check_cfa(cfa: str) -> None: """Checks if the CFA's name is correct. Args: cfa (str): CFA name. Raises: Exception: Exception if the name of the CFA is not correct. """ if cfa not in ['bayer', 'quad_bayer']: raise Exception(f'Unknown CFA name. Got {cfa} but expected either bayer or quad_bayer.') #### #### #### #### #### #### ############# #### ###### #### ################## #### ######## #### #################### #### ########## #### #### ######## #### ############ #### #### #### #### #### ######## #### #### #### #### #### ######## #### #### #### #### #### ######## #### #### #### #### #### ## ###### #### #### ###### #### #### #### ## #### #### ############ #### #### ###### #### #### ########## #### #### ########## #### #### ######## #### #### ######## #### #### #### #### ############ #### #### #### ########## #### #### #### ######## #### #### #### ###### #### # 2023 # Authors: Mauro Dalla Mura and Matthieu Muller