Настольное приложение для расчёта параметров фотографических материалов по результатам сенситометрии.
Сенситометрия — это измерение чувствительности фотоматериала к свету. В лаборатории экспонируют плёнку или бумагу через ступенчатый клин, проявляют и измеряют оптическую плотность каждой ступени. Результат — набор из 21 значения плотности D, по которому строится характеристическая кривая D(log H).
Это приложение позволяет:
- вводить несколько наборов сенситометрических данных вручную;
- строить характеристические кривые всех наборов на одном графике;
- автоматически вычислять ключевые параметры фотоматериала;
- экспортировать график для вставки в отчёт.
Приложение подходит для учебных лабораторных работ, НИР и производственного контроля фотоматериалов.
| Параметр | Обозначение | Смысл |
|---|---|---|
| Минимальная плотность | D_min | плотность вуали |
| Плотность точки A | D_A | начало рабочего участка кривой |
| log-экспозиция точки A | log H_A | по значению D_A на интерполированной кривой |
| Экспозиция точки A | H_A = 10^(log H_A) | абсолютное значение экспозиции |
| log-экспозиция точки B | log H_B = log H_A + Δlog H_AB | конец рабочего участка |
| Плотность точки B | D_B | по кривой в точке B |
| Средний градиент | Ḡ = (D_B − D_A) / (log H_B − log H_A) | «контрастность» материала |
| Чувствительность | S = ΔD_AB / H_A | основной паспортный параметр |
log H_i = log H_1 + (i − 1) · log k, i = 1 … 21
k — отношение экспозиций соседних ступеней клина. Типичные значения: √2 ≈ 1.41 (шаг 0.15 lg) или ∜10 ≈ 1.778 (шаг 0.25 lg).
| Параметр | Значение | Описание |
|---|---|---|
| ΔD_A | 0.10 | превышение D_min для точки A |
| Δlog H_AB | 1.30 | ширина рабочего участка |
| ΔD_AB | 0.80 | разность плотностей для расчёта S |
| log H_1 | 0 | начальное значение шкалы |
Все параметры меняются в правой панели настроек без перезапуска.
- Python 3.11 или новее
- pip
# 1. Клонировать репозиторий
git clone <url>
cd ISO_Sensitometer_GUI
# 2. (Рекомендуется) Создать виртуальное окружение
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux / macOS
# 3. Установить зависимости
pip install -r requirements.txt
# 4. Запустить
python main.pyНа Windows достаточно дважды щёлкнуть Запустить.bat — скрипт сам установит зависимости и откроет приложение.
- Нажмите «+ Добавить набор» в левой панели.
- Введите название, выберите цвет, укажите коэффициент
k. - Введите 21 значение оптической плотности (от D_min до насыщения).
- Нажмите OK — кривая появится на графике, параметры — в таблице внизу.
- Добавьте ещё наборы для сравнения. Кривые отображаются на одном графике.
- Нажмите «Экспорт графика…» для сохранения в PNG, JPG или SVG.
┌─────────────────┬────────────────────────────────┬──────────────────┐
│ Левая панель │ График D(log H) │ Правая панель │
│ │ │ │
│ [✓] Набор 1 │ кривые всех видимых наборов │ Параметры │
│ [✓] Набор 2 │ с точками A и B │ расчёта │
│ [ ] Набор 3 │ │ │
│ │ │ Настройки │
│ + Добавить │ [Экспорт графика…] │ отображения │
├─────────────────┴────────────────────────────────┴──────────────────┤
│ Таблица результатов по всем наборам │
└─────────────────────────────────────────────────────────────────────┘
- Левая панель — список наборов с чекбоксами видимости, кнопками редактирования и удаления.
- График — общий для всех видимых наборов. Поддерживает масштабирование и перетаскивание через панель инструментов matplotlib.
- Правая панель — параметры расчёта (ΔD_A, Δlog H_AB, ΔD_AB, log H_1, тип интерполяции) и настройки отображения (легенда, сетка, точки, кривая, маркеры A и B).
- Таблица — сводные результаты по каждому набору. При невозможности вычислить параметр ячейка остаётся пустой, в подсказке — причина ошибки.
| Режим | Когда использовать |
|---|---|
| Линейная | всегда работает, достаточна для грубой оценки |
| Кубическая | точнее на гладких кривых, требует ≥ 4 точек |
Переключается в правой панели без потери данных.
├── main.py # точка входа
├── Запустить.bat # двойной клик для запуска на Windows
├── requirements.txt
├── README.md
├── models/
│ ├── dataset.py # SensitometryDataset
│ ├── params.py # CalculationParams, DisplaySettings, InterpolationType
│ └── result.py # CalculationResult
├── services/
│ ├── calculation.py # вся расчётная логика, build_logH_scale()
│ └── interpolation.py # InterpolationService (линейная / кубическая)
├── ui/
│ ├── main_window.py # главное окно, оркестровка
│ ├── dataset_dialog.py # диалог добавления / редактирования набора
│ ├── dataset_panel.py # левая панель
│ ├── plot_widget.py # matplotlib-виджет + экспорт
│ ├── results_table.py # таблица результатов
│ └── settings_panel.py # правая панель настроек
└── utils/
└── validators.py # валидация пользовательского ввода
Расчётная логика (services/) не зависит от GUI и может тестироваться отдельно. Формула построения шкалы log H вынесена в отдельную функцию build_logH_scale() в services/calculation.py — её можно заменить без изменения интерфейса.
- Нет импорта данных из файлов (CSV, XLSX)
- Нет экспорта численных результатов
- Нет сохранения / загрузки проекта
- Нет печати отчётов