Математическая модель полного пайплайна камеры: от источника света до итогового RGB-кадра.
Точечный источник света с заданной мощностью (Вт) и спектром излучения (Вт/м²/нм) освещает плоский объект. Облучённость каждой точки объекта вычисляется по закону обратных квадратов с учётом угла падения:
E = P · cos(θ) / r² · spectrum · reflectance
Объект задаётся коэффициентами спектрального отражения (reflectance) по длинам волн 380–730 нм.
Геометрическая проекция сцены через точечную диафрагму на плоскость изображения. Учитывается виньетирование по радиометрической формуле (закон cos⁴):
E_image = L · (π/4) · (D/v)² · cos⁴(α)
где D — диаметр диафрагмы, v — расстояние диафрагма → изображение, α — угол между лучом и оптической осью.
Результат проекции — трёхмерный массив H × W × bands, где каждый пиксель содержит спектральное распределение облучённости.
Спектральный куб свёртывается с кривыми чувствительности RGB-каналов (гауссовы пики: B≈460 нм, G≈540 нм, R≈600 нм). Результат накладывается на мозаику Байера, после чего вычисляется накопленный заряд:
charge = irradiance · gain + dark_offset + FPN
Аналоговый сигнал квантуется в цифровой код:
code = clamp(charge / full_scale) · (2ⁿ − 1)
где n — разрядность АЦП (8–16 бит).
RAW-мозаика восстанавливается в полноцветный RGB-кадр методом ближайшего соседа.
Итоговый RGB-кадр с возможностью автонормализации (min-max stretch) или отображения физических значений АЦП.
| Слой | Инструмент |
|---|---|
| Симуляция | NumPy, Python |
| Графики | Matplotlib, Plotly |
| GUI + визуализация | Streamlit |
| Данные | Pandas |
Python Backend (workspace/) ←→ Streamlit (streamlit_app/app.py)
source .venv/bin/activate
streamlit run streamlit_app/app.py