Исходный код blinddeconv.filters.smooth

"""
Фильтры сглаживания изображений.

Автор: Беззаборов А.А.
"""

import cv2 as cv
import numpy as np
from typing import Union, Tuple
from .base import FilterBase


[документация] class MeanBlur(FilterBase): """ Усредняющий (боксовый) фильтр размытия. Атрибуты -------- kernel_size : int Размер усредняющего ядра (должен быть нечетным и положительным). """
[документация] def __init__(self, kernel_size: int) -> None: """ Инициализация усредняющего фильтра. Параметры --------- kernel_size : int Размер усредняющего ядра (должен быть нечетным и положительным). """ if kernel_size <= 0 or kernel_size % 2 == 0: raise ValueError("Размер ядра должен быть положительным нечетным числом") super().__init__(kernel_size, 'blur') self.kernel_size = kernel_size
[документация] def description(self) -> str: """Выдает название смаза с параметром.""" return f"|meanblur_{self.kernel_size}"
[документация] def filter(self, image: np.ndarray) -> np.ndarray: """ Применить усредняющее размытие к изображению. Параметры --------- image : np.ndarray Входное изображение (в градациях серого или цветное). Возвращает ---------- np.ndarray Размытое изображение. """ return cv.blur(image, (self.kernel_size, self.kernel_size))
[документация] class MedianBlur(FilterBase): """ Медианный фильтр (эффективен против шума "соль-перец"). Атрибуты -------- kernel_size : int Размер медианного ядра (должен быть нечетным и >=3). """
[документация] def __init__(self, kernel_size: int) -> None: """ Инициализация медианного фильтра. Параметры --------- kernel_size : int Размер медианного ядра (должен быть нечетным и >=3). """ if kernel_size < 3 or kernel_size % 2 == 0: raise ValueError("Размер ядра должен быть нечетным числом >=3") super().__init__(kernel_size, 'blur') self.kernel_size = kernel_size
[документация] def description(self) -> str: """Выдает название смаза с параметром.""" return f"|medianblur_{self.kernel_size}"
[документация] def filter(self, image: np.ndarray) -> np.ndarray: """Применить медианное размытие к изображению.""" return cv.medianBlur(image, self.kernel_size)
[документация] class GaussianBlur(FilterBase): """ Гауссовский фильтр размытия. Атрибуты -------- kernel_size : int Размер гауссовского ядра (должен быть нечетным и положительным). std : float Стандартное отклонение (0 для автоматического расчета). """
[документация] def __init__(self, params: Union[int, Tuple[int, float]]) -> None: """ Инициализация гауссовского фильтра. Параметры --------- params : Union[int, Tuple[int, float]] kernel_size или (kernel_size, std). """ if isinstance(params, int): kernel_size = params std = 0 else: kernel_size, std = params if kernel_size <= 0 or kernel_size % 2 == 0: raise ValueError("Размер ядра должен быть положительным нечетным числом") super().__init__(params, 'blur') self.kernel_size = kernel_size self.std = std
[документация] def description(self) -> str: """Выдает название смаза с параметром.""" return f"|gaussianblur_{self.kernel_size}_{self.std}"
[документация] def filter(self, img: np.ndarray) -> np.ndarray: """Применить гауссовское размытие к изображению.""" return cv.GaussianBlur(img, (self.kernel_size, self.kernel_size), self.std)
[документация] class BilateralFilter(FilterBase): """ Билатеральный фильтр (с сохранением границ). Атрибуты -------- d : int Диаметр окрестности пикселя. sigma_color : float Сигма фильтр в цветовом пространстве. sigma_space : float Сигма фильтр в координатном пространстве. """
[документация] def __init__(self, params: Union[int, Tuple[int, float, float]]): """ Инициализация билатерального фильтра. Параметры --------- params : Union[int, Tuple[int, float, float]] d или (d, sigma_color, sigma_space). """ if isinstance(params, int): d = params sigma_color = sigma_space = 75 else: d, sigma_color, sigma_space = params super().__init__(params, 'blur') self.d = d self.sigma_color = sigma_color self.sigma_space = sigma_space
[документация] def description(self) -> str: """Выдает название смаза с параметром.""" return f"|bilateralfilter_{self.d}_{self.sigma_color}_{self.sigma_space}"
[документация] def filter(self, img: np.ndarray) -> np.ndarray: """Применение билатерального фильтра к изображению.""" return cv.bilateralFilter(img, self.d, self.sigma_color, self.sigma_space)