Архитектура системы

Модульная структура

BlindDeconvolution — модульный фреймворк для исследования методов слепой деконволюции изображений. Архитектура построена по принципу фасада: центральный класс Processing делегирует операции специализированным модулям.

Проект построен по модульному принципу с центральным классом-фасадом Processing:

┌──────────────────────────────────────────────────────────────┐
│                       Processing (Facade)                    │
│                                                              │
│  ┌────────────────────────────────────────────────────────┐  │
│  │                  Core Modules                          │  │
│  │  ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌──────────┐  │  │
│  │  │  Reader  │ │ Display  │ │  Restore  │ │ Pipeline │  │  │
│  │  └──────────┘ └──────────┘ └───────────┘ └──────────┘  │  │
│  │                                                        │  │
│  │  ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌──────────┐  │  │
│  │  │  Filter  │ │  Clear   │ │  Tables   │ │   Prep   │  │  │
│  │  └──────────┘ └──────────┘ └───────────┘ └──────────┘  │  │
│  └────────────────────────────────────────────────────────┘  │
│                                                              │
│  ┌────────────────────────────────────────────────────────┐  │
│  │               Optimization & Analysis                  │  │
│  │  ┌────────────────────────┐ ┌────────────────────────┐ │  │
│  │  │   HyperparamOptimizer  │ │  ParetoFrontAnalyzer   │ │  │
│  │  └────────────────────────┘ └────────────────────────┘ │  │
│  └────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────┘
        │                    │                    │
        ▼                    ▼                    ▼
  ┌───────────┐       ┌────────────┐       ┌─────────────┐
  │  filters/ │       │ algorithms/│       │   core.py   │
  │  • blur   │       │ • our_co.  │       │   utils.py  │
  │  • noise  │       │ • 3rd_party│       │   metrics.py│
  │  • smooth │       │ • octave/  │       │   image.py  │
  │  • denoise│       │ • cython/  │       └─────────────┘
  └───────────┘       └────────────┘

Основные компоненты

1. Processing — центральный класс (фасад)

Модуль: blinddeconv.processing.core

Единая точка входа для всех операций. При инициализации автоматически создаёт все рабочие директории и подключает модули.

Параметр

По умолчанию

Назначение

images_folder

"images"

Директория с оригиналами

blurred_folder

"blurred"

Директория со смазанными

restored_folder

"restored"

Директория с восстановленными

data_path

"data"

Директория для CSV/метаданных

color

False

True — цветные, False — ч/б

kernel_dir

"kernels"

Директория для ядер

Внутренние модули:

Атрибут

Класс

Назначение

reader

ModuleReader

Загрузка изображений, создание связей

display

ModuleDisplay

Визуализация результатов

histogram

ModulePreprocessing

Предобработка (выравнивание гистограмм)

tables

ModuleData

Экспорт метрик в CSV

clear

ModuleClear

Очистка связей и файлов

apply_filter

ModuleFilter

Применение фильтров

module_process

ModuleProcess

Восстановление (один алгоритм)

process_pipeline

ModuleProcessPipeline

Полный пайплайн (фильтры + восстановление)

optimizer

HyperparameterOptimizer

Оптимизация гиперпараметров

analyzer

ParetoFrontAnalyzer

Парето-анализ

2. Image — связь изображений

Модуль: blinddeconv.processing.utils

Ключевая структура данных. Хранит граф связей между оригиналом, смазанными вариантами, восстановленными результатами и метриками.

Image (связь)
│
├── original_path          ← Путь к оригиналу
│
├── blurred_path           ← Буфер (текущее смазанное)
├── blurred_array[]        ← Сохранённые смазанные варианты
│   ├── filters{}          ← Описания фильтров
│   ├── blurred_psnr{}     ← PSNR смазанных
│   ├── blurred_ssim{}     ← SSIM смазанных
│   └── original_kernels{} ← Ядра (GT PSF)
│
└── Для каждого (blurred_path, algorithm_name):
    ├── restored_paths{}   ← Восстановленные изображения
    ├── kernel_paths{}     ← Восстановленные ядра
    ├── psnr{}             ← PSNR восстановленных
    └── ssim{}             ← SSIM восстановленных

3. DeconvolutionAlgorithm — базовый класс алгоритмов

Модуль: blinddeconv.algorithms.base

Абстрактный класс, определяющий интерфейс для всех алгоритмов деконволюции:

  • process(image) (restored, kernel) — обработка изображения

  • change_param(params) — изменение гиперпараметров

  • get_param() [(name, value), ...] — получение текущих параметров

  • get_name() str — название алгоритма

  • get_timer() float — время последнего запуска

4. FilterBase — базовый класс фильтров

Модуль: blinddeconv.filters.base

Абстрактный класс для фильтров искажений:

  • filter(image) image — применение фильтра

  • description() str — описание для файловой системы

  • get_type() str — тип фильтра ("blur", "noise", "denoise")

5. Система расширений (extensions)

Модуль: blinddeconv.processing.extensions

Расширения наследуют ProcessingExtension и добавляют специализированный функционал:

  • HyperparameterOptimizer — байесовская оптимизация гиперпараметров через Optuna (TPE, Random, GP, NSGA-II)

  • ParetoFrontAnalyzer — многокритериальный анализ с построением 3D фронта Парето

Организация исхожного кода алгоритмов

algorithms/
├── base.py                           # DeconvolutionAlgorithm (ABC)
├── blind_deconvolution/
│   ├── our_company/                  # Собственные реализации
│   │   ├── bayesian/                 # Байесовские методы
│   │   │   ├── vbbid_tv.py          #   VBBID_TV
│   │   │   ├── bbd_deip.py          #   BBD_DEIP
│   │   │   └── sb_bid_pe.py         #   SB_BID_PE
│   │   ├── classic/                  # Классические методы
│   │   │   ├── richardson_lucy.py   #   RichardsonLucy
│   │   │   ├── expectation_maximization.py  # EM
│   │   │   └── alternating_minimization.py  # MAP
│   │   ├── variational/             # Вариационные методы
│   │   │   ├── vabid.py             #   VABID (Likas2004)
│   │   │   ├── vapibe.py            #   VAPIBE
│   │   │   └── vbsk_sid_st.py       #   VBSK_SID_ST
│   │   └── sparse/                  # Разреженные методы
│   │       ├── vbc_bid.py           #   VBC_BID
│   │       └── pbtvgr.py            #   PBTVGR
│   └── third_party_company/         # Внешние обёртки
├── nonblind_deconvolution/           # Не-слепая деконволюция
├── kernel_estimation/                # Оценка ядра
├── octave/                           # Octave/MATLAB-обвязка
└── unsorted/                         # Экспериментальные

Организация фильтров

Модуль

Фильтры

Тип

filters.blur

DefocusBlur, MotionBlur, BSpline_blur, Kernel_convolution

blur

filters.noise

GaussianNoise, PoissonNoise, SaltAndPepperNoise, OldPhotoNoise, ColoredNoise, Pink_Noise, Brown_Noise

noise

filters.smooth

MeanBlur, MedianBlur, GaussianBlur, BilateralFilter

denoise

filters.distributions

gaussian_distribution, uniform_distribution, ring_distribution, linear_decay_distribution, exponential_decay_distribution

(PSF-функции)

Вспомогательные скрипты

Модуль

Класс

Назначение

scripts.dataset_generator

DatasetGenerator

Автоматическая генерация датасета с комбинациями фильтров

scripts.kernel_generator

KernelGenerator

Генерация ядер размытия (PSF) для экспериментов

Система автоматизации

Два интерфейса для автоматизации в корне проекта:

Файл

Назначение

Зависимости

run.py

Запуск пайплайна по YAML/JSON-конфигу

pyyaml, jsonschema

cli.py

CLI-интерфейс (click) для быстрых команд

click, pyyaml

Подробнее — в разделах Конфигурационные файлы и Руководство пользователя.

Паттерны проектирования

  1. FacadeProcessing скрывает сложность подсистем за единым интерфейсом.

  2. StrategyDeconvolutionAlgorithm и FilterBase позволяют подменять алгоритмы без изменения клиентского кода.

  3. Template MethodModuleProcessPipeline.full_process() определяет скелет пайплайна, делегируя шаги подметодам.

  4. Registryrun.py содержит реестры (ALGORITHM_REGISTRY, FILTER_REGISTRY) для динамического создания экземпляров по имени.

  5. ExtensionProcessingExtension (ABC) позволяет подключать новый функционал без изменения ядра.