Статья
Ветвление в графе Альтрон: сохранение, усреднение и отображение одновременно
Допустим, в лаборатории под камерой несколько часов находится образец. Вы хотите видеть на мониторе плавное изображение с низким уровнем шума, сохранять все необработанные данные для последующего анализа и отдельно делать снимок каждые несколько секунд для отчёта. Это три задачи для одной камеры. В Альтрон это решается ветвлением графа.

Что означает ветвление?
Каждый граф Альтрон состоит из узлов, соединённых связями. Во главе цепочки — камера. Далее идёт обработка, а в конце — узлы хранения и отображения. Выход узла не обязан вести только к одному узлу. От выхода одного узла можно провести несколько связей, и каждая создаёт отдельную ветвь.
Ветвление не копирует данные, а лишь делает их общими. Поэтому добавление ветви отображения или сохранения не требует дополнительной памяти.
Это самое важное решение. Каждая ветвь получает ровно те данные, которые проходят в точке ветвления. Несколько простых правил:
- Ответвляйте ветвь, сохраняющую данные для анализа, после физических коррекций сенсора, таких как уровень чёрного, коррекция темнового сигнала и коррекция по белому. Но эта ветвь должна идти до косметических изменений, например гаммы.
- Сглаживание и повышение резкости, предназначенные только для глаза, размещайте в ветви отображения, чтобы сохраняемые данные оставались нетронутыми.
- Если вашей собственной программе нужно брать данные из середины пути, подключите в этой точке узел Data Holder. Этот узел не изменяет данные, а лишь хранит их копию для внешнего кода.
Соберите такую структуру в Tools › Flow Graph Editor:
- Сначала разместите камеру, затем базовые коррекции, например коррекцию темнового сигнала и по белому с помощью узла Correction.
- От выхода последней коррекции проведите первую связь к узлу сохранения необработанных данных. Эта ветвь сохраняет всё полностью.
- Вторую связь проведите к узлу Smoothing со ступенью Continuous Average, а его выход подайте на дисплей. Эта ветвь показывает плавное усреднённое изображение.
- Третью связь подключите напрямую к другому дисплею, чтобы видеть и живые неусреднённые данные.
- Сохраните граф и нажмите Recreate All в основной программе. Изменения не вступят в силу, пока цепочка не будет перестроена.
Для периодических снимков поставьте в начало ветви узел ImagingInterval и подключите после него узел сохранения. У него три режима:
Обязательно проверьте опцию Apply to saving too. Если она отмечена, узлы сохранения после этого узла записывают только прошедшие выборки, и вы получаете покадровую запись. Если не отмечена, прореживание лишь облегчает обработку и отображение после узла, а узлы сохранения игнорируют его выход. В этом случае, пока узел сохранения на той же камере ведёт запись, узел пропускает все данные, чтобы ничего не было потеряно из записи.
Среди графов Альтрон по умолчанию есть и готовый пример Default_AreaScan_Color_Usb3+ImagingIntervalForDataSaving, с которого можно начать.
- Гамма или повышение резкости размещены до точки ответвления ветви сохранения, а потом возникает вопрос, почему сохранённые данные не совпадают с измерениями.
- Забыли нажать Recreate All после изменения графа.
- Тяжёлая ветвь отображения замедляет всю цепочку. Посмотрите на вкладке Performance, какой узел занимает наибольшую долю CPU, и поставьте перед ним ImagingInterval в режиме Max rate.
Перед длительной записью запустите граф на несколько минут и сравните на вкладке Internal Info входную и выходную скорость данных каждого узла. Если выход узла вдруг меньше входа, а вы этого не задумывали, данные теряются именно в этом узле.
Более общее объяснение конвейеров обработки см. Википедия (на английском).
Типичные вопросы о графах и записи мы собрали в разделе Частые вопросы. Если вашему графу нужна особая структура, напишите нам через страницу контактов , и мы спроектируем его вместе.