Codice sorgente per disturbs.focus

"""
Modulo che applica un disturbo di sfocatura dovuta al movimento o alla messa a fuoco, ad un'immagine codificata in RGB o scala di grigi sfruttando openCV2.
"""
import cv2
import numpy as np


[documenti] def apply_motion_blur(image: cv2.typing.MatLike, ksize: int = 15, angle: float = 45.0) -> cv2.typing.MatLike: """ Questo metodo simula un defocus dovuto al movimento. Args: image: l'immagine a cui applicare il rumore sotto forma di matrice. ksize: controlla la quantità di movimento, deve essere dispari e maggiore di 0. angle: controlla la direzione del movimento. Raises: ValueError: se la dimensione del kernel non è maggiore di 0 e non è dispari, Il messaggio a schermo chiarirà il motivo. Returns: l'immagine a cui è stato applicato il motion blur. """ if ksize <= 0: raise ValueError("ksize deve essere maggiore di 0") if ksize % 2 == 0: raise ValueError("il kernel deve avere dimensione dispari") kernel = np.zeros((ksize, ksize)) kernel[ksize // 2, :] = np.ones(ksize) kernel = kernel / ksize if angle != 0: center = (ksize // 2, ksize // 2) m = cv2.getRotationMatrix2D(center, angle, 1.0) kernel = cv2.warpAffine(kernel, m, (ksize, ksize)) # Ruota il kernel data la matrice di rotazione return cv2.filter2D(image, -1, kernel)
[documenti] def apply_focus_blur(image: cv2.typing.MatLike, blur_kernel: tuple[int, int] = (31, 31), sigma: float = 0.0) -> cv2.typing.MatLike: """ Questo metodo che simula un mancato focus dello scatto. Args: image: l'immagine a cui applicare il rumore sotto forma di matrice. blur_kernel: tupla che contiene due numeri dispari, controlla la grandezza del filtro gaussiano. sigma: numero che definisce la forza del defocus, deve essere maggiore di 0. Raises: ValueError: se il blur kernel non è bidimensionale o non contiene valori dispari. L'errore può essere causato anche da una sigma negativa. Il messaggio a schermo chiarirà il motivo. Returns: una matrice numpy che rappresenta l'immagine a cui è stato aggiunto il focus blur. """ if len(blur_kernel) != 2: raise ValueError("Il blur_kernel può essere solamente bidimensionale.") if (blur_kernel[0] % 2) == 0 or (blur_kernel[1] % 2) == 0: raise ValueError("Il blur_kernel deve essere definito mediante una tupla che contiene interi dispari dispari.") if sigma <= 0.e-12: raise ValueError("sigma deve essere un numero maggiore o uguale di 0.") blurred = cv2.GaussianBlur(image, blur_kernel, sigma) return blurred