Skip to content

NixWrk/ISO_Sensitometer_GUI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ISO Sensitometer GUI

Настольное приложение для расчёта параметров фотографических материалов по результатам сенситометрии.


Что это и для кого

Сенситометрия — это измерение чувствительности фотоматериала к свету. В лаборатории экспонируют плёнку или бумагу через ступенчатый клин, проявляют и измеряют оптическую плотность каждой ступени. Результат — набор из 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-экспозиции

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 — скрипт сам установит зависимости и откроет приложение.


Быстрый старт

  1. Нажмите «+ Добавить набор» в левой панели.
  2. Введите название, выберите цвет, укажите коэффициент k.
  3. Введите 21 значение оптической плотности (от D_min до насыщения).
  4. Нажмите OK — кривая появится на графике, параметры — в таблице внизу.
  5. Добавьте ещё наборы для сравнения. Кривые отображаются на одном графике.
  6. Нажмите «Экспорт графика…» для сохранения в 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 — её можно заменить без изменения интерфейса.


Ограничения версии 1.0

  • Нет импорта данных из файлов (CSV, XLSX)
  • Нет экспорта численных результатов
  • Нет сохранения / загрузки проекта
  • Нет печати отчётов

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors