Codice sorgente per utilities.noise_data

"""
    Questa classe permette di creare un oggetto che contiene i disturbi (gaussian, salt_pepper, lightness, focus_blur, 
    motion_blur, geometric) da applicare all'immagine e i relativi parametri. In fase di implementazione sono state 
    prese alcune scelte che evitano l'impostazione di tutti i parametri visti nel modulo library, per avere maggiori 
    informazioni fare riferimento alla relazione.
"""


[documenti] class NoiseData: noise_list = ['gaussian', "salt_pepper", "lightness", "focus_blur", "motion_blur", "geometric"] __types = "" __values = [] __prior = 0 def __init__(self, types: str, values: list, p: int): """ Permette la costruzione di un oggetto della classe NoiseData. Args: types: una stringa che indica la tipologia del rumore da introdurre, quest'ultimo dovrà essere presente nella noise_list. values: una lista che contiene i valori che possono essere impostati all'interno dei metodi che applicano i disturbi. Sfruttando questa classe non sarà possibile modificare tutti i parametri. p: un valore intero che indica una priorità. """ self.__types = types self.__values = values self.__prior = p # Getter @property def typology(self): """ Questo metodo permette di ottenere la lista associata al tipo di rumore da applicare. Returns: stringa con la tipologia del rumore. """ return self.__types # Setter @typology.setter def typology(self, t: str): """ Questo metodo permette di impostare la tipologia di rumore che dovrà essere applicato Args: t: la stringa che contiene la tipologia di rumore, deve essere in noise_list. Raises: ValueError: se la tipologia del rumore, t, non è presente all'interno di ['gaussian', "salt_pepper", "lightness", "focus_blur", "motion_blur", "geometric"] Returns: """ t = t.lower() if t not in self.noise_list: raise ValueError("typology deve essere ", self.noise_list) self.__types = t # Getter @property def values(self): """ Questo metodo permette di ottenere i parametri da impostare all'interno dei metodi che implementano i disturbi. Returns: una lista che contiene tutti i valori da impostare. """ return self.__values # Setter @values.setter def values(self, values: list): """ Questo metodo permette di impostare i valori che verranno passati ai parametri dei metodi che implementano i disturbi. Args: values: una lista con tutti i parametri da impostare. Raises: TypeError: se values non è una lista. ValueError: se qualche parametro presente all'interno di values non è corretto o permesso, infatti, non i parametri modificabili all'interno dei metodi che applicano i disturbi sono stati sfruttati. Le scelte che hanno portato a questa decisione sono descritte nella documentazione. Il messaggio a schermo quando verrà sollevata l'eccezione spiega a che tipologia di disturbo si riferisce l'errore. Returns: """ if not isinstance(values, list): raise TypeError("values deve essere una lista") elif self.__types == "lightness": if len(values) != 2: raise ValueError("La lightness deve avere values = [out_min, out_max].") elif self.__types == 'motion_blur': if len(values) != 1 or not isinstance(values[0], int): raise ValueError("Il motion_blur deve avere values = [ksize].") elif self.__types == 'focus_blur': if len(values) != 1 or not isinstance(values[0], float): raise ValueError("Il focus_blur deve avere values = [sigma]") if self.__types == "gaussian": if len(values) != 1 or not isinstance(values[0], (int, float)): raise ValueError("Il rumore gaussiano deve avere values = [std_dev] e " "questo valore deve essere int o float") elif self.__types == "salt_pepper": if len(values) != 1 or not (0 <= values[0] <= 1): raise ValueError("Il rumore salt & pepper deve avere values = [amount] e " "questo valore deve essere compreso tra 0 e 1.") elif self.__types == "geometry": if len(values) != 1: raise ValueError("La lightness deve avere values = [angle].") self.__values = values @property def priority(self): """ Questo metodo permette di ottenere il livello di priorità associato a ciascun disturbo. Returns: il livello di priorità del disturbo. """ return self.__prior @priority.setter def priority(self, p: int): """ Questo metodo permette di impostare il livello di priorità associato a un disturbo. Args: p: il valore di priorità da impostare. Raises: TypeError: se il parametro p non è un intero. ValueError: se la priorità specificata dal parametro p non è maggiore di 0. Returns: """ if isinstance(p, int): if p > 0: self.__prior = p else: raise ValueError("priority deve essere un valore maggiore di 0.") else: raise TypeError("priority deve essere un int.")