Виртуальная камера: объективы, шум и искажения
3D-моделированиеИдеальная камера без шума, бликов и искажений делает синтетические кадры слишком чистыми, и модель теряется на реальных снимках. Разбираем, какие параметры оптики и сенсора стоит повторять и как это делать без лишней сложности.

Идеальная камера, это проблема
В 3D-редакторе камера по умолчанию, это математическая точка с идеальной перспективой: резкость везде одинаковая, шума нет, линии остаются прямыми, цвет нейтрален. Реальная камера ведёт себя иначе. Объектив размывает то, что не в фокусе, подкрашивает края контрастных объектов, искривляет прямые у краёв кадра. Сенсор добавляет шум, особенно в темноте. Алгоритмы камеры дополнительно повышают резкость, сжимают картинку в JPEG и меняют баланс белого.
Модель компьютерного зрения замечает всё это. Если обучать детектор только на чистых кадрах, он привыкает к резким границам и гладким поверхностям и теряется на снимках с реальной камеры наблюдения или смартфона. Это часть общей проблемы, которую мы разбирали в статье про domain gap, и камера, один из самых дешёвых способов её уменьшить. Достаточно воспроизвести основные эффекты оптики и сенсора, не стремясь к физически точной копии конкретной модели камеры.
Фокусное расстояние и поле зрения
Первое, что нужно задать, это геометрия съёмки. Фокусное расстояние определяет угол обзора и перспективные искажения. Широкоугольный объектив (около 24 мм в пересчёте на полный кадр) охватывает больше сцены, но растягивает объекты у краёв и усиливает перспективу. Телеобъектив (100 мм и больше) сжимает глубину сцены и делает объекты похожими по размеру независимо от расстояния.
Практическое правило: взять параметры реальной камеры, на которой будет работать модель. Для камер видеонаблюдения это обычно 2,8-4 мм при небольшом сенсоре, для смартфонов основная камера соответствует примерно 24-26 мм в пересчёте на полный кадр, для промышленных камер выбирается телецентрический или фиксированный объектив под конкретное расстояние до детали. Если заказчик не знает точных данных, мы просим прислать три-пять реальных кадров и подбираем поле зрения по известным размерам объектов в кадре.
Если реальные условия съёмки неоднородны, лучше рандомизировать фокусное расстояние в разумных пределах. Например, от 24 до 50 мм для смартфонных фото. Это делает модель устойчивой к различиям устройств. Подход подробно описан в материале про доменную рандомизацию.
Положение и высота камеры
Не менее важна позиция камеры. Для камеры над конвейером это почти вертикальный взгляд сверху с небольшим разбросом. Для камеры на полке в магазине это ракурс под углом 10-30 градусов вниз. Для беспилотника, диапазон высот и углов наклона. Мы фиксируем эти распределения вместе с заказчиком до начала рендера, потому что неверный ракурс невозможно исправить аугментациями: объект с другой стороны выглядит иначе.
Глубина резкости и диафрагма
В реальной оптике область, где изображение резкое, ограничена. Чем больше открыта диафрагма (меньше число f) и чем ближе объект, тем уже зона резкости. В рендере эффект включается параметрами диафрагмы и дистанции фокусировки.
Для датасетов важно не переборщить. С одной стороны, лёгкая размытость фона и дальних объектов делает кадр правдоподобным. С другой, если размыть сам целевой объект, модель получит сложнейшую задачу, а разметка (особенно маски) станет неоднозначной: где проходит край размытого предмета? Мы обычно действуем так:
- держим целевые объекты в зоне резкости в большинстве кадров;
- добавляем небольшую долю кадров, около 10-15 процентов, где часть объектов расфокусирована, как это бывает в реальности;
- для камер видеонаблюдения с малой апертурой почти отключаем эффект, так как у них резкость почти везде.
Форма размытия (боке) тоже имеет значение для ярких точечных источников: в кадре с фарами и лампами она оставляет на изображении характерные диски или многоугольники, которые отражают количество лепестков диафрагмы.
Шум сенсора, зерно и сжатие
Шум, это не недостаток рендера, а необходимая часть правдоподобной картинки. В реальной камере он возникает из-за ограниченного числа фотонов (дробовой шум), электроники сенсора и усиления сигнала при высокой чувствительности. Он сильнее в тёмных областях и в условиях слабого освещения.
В рендере шум имитируется после основного расчёта, на этапе постобработки. Мы рекомендуем модель, где шум зависит от яркости: гауссов компонент плюс компонент, пропорциональный сигналу. Уровни подбираем по реальным кадрам заказчика: берём однородный участок серой стены или неба, измеряем стандартное отклонение и воспроизводим его. Типичные значения лежат в диапазоне 1-4 процента от динамического диапазона для дневных кадров и до 8-10 процентов для ночных.
После шума стоит добавить артефакты сжатия. Реальные кадры почти всегда проходили через JPEG или видеокодек, а значит содержат блочные артефакты и потерю мелких деталей. Если обучать только на несжатых PNG, а применять на сильно сжатых потоках, качество упадёт заметно. Простое решение: сохранять часть датасета в JPEG с качеством 60-90 и случайным образом перекодировать ещё часть.
Искажения объектива и хроматическая аберрация
Следующий слой, геометрические и цветовые искажения оптики.
- Дисторсия. Бочкообразная у широкоугольных объективов и подушкообразная у длиннофокусных. Прямые линии у краёв кадра изгибаются. В рендере применяется модель радиальной дисторсии с одним-двумя коэффициентами, которые можно взять из калибровки реальной камеры.
- Виньетирование. Затемнение углов кадра. Параметр простой, но заметный: у дешёвых камер углы могут быть темнее центра на 30-50 процентов.
- Хроматическая аберрация. Цветная кайма на контрастных краях, из-за того что разные длины волн фокусируются немного по-разному. Эффект достаточно подмешать на несколько пикселей смещения красного и синего каналов.
- Блики и засветка. Яркие источники света создают в объективе паразитные отражения. Для уличных сцен и кадров с окнами они встречаются часто и ломают контуры объектов.
Здесь важно соблюдать ту же осторожность, что и с размытием. Дисторсию лучше применять к изображению и к разметке одновременно, чтобы маски и рамки соответствовали искажённой картинке. Мы это делаем на стороне рендера: аннотации считаются уже после искажения либо преобразуются теми же формулами. Подробнее о том, как избежать рассинхрона масок, читайте в материале про маски сегментации.
Смаз движения и скользящий затвор
Если объект или камера движутся, а выдержка не очень короткая, на кадре появляется смаз. Это типичная ситуация для конвейера со скоростью в несколько метров в секунду, для камер на автомобилях и для съёмки с рук. В рендере смаз получается усреднением нескольких подкадров внутри времени выдержки, а величина задаётся как произведение скорости и выдержки.
У дешёвых КМОП-сенсоров с построчной развёрткой (rolling shutter) быстро движущиеся объекты наклоняются: нижние строки считываются позже верхних. Эффект можно воспроизвести отдельно, но нужен он не всегда. Применяйте его, только если реальная камера заказчика страдает от него и объекты движутся быстро.
Сводная таблица эффектов камеры
| Эффект | Когда обязательно | Типичные значения |
|---|---|---|
| Шум сенсора | всегда, особенно для слабого света | 1-10 процентов от диапазона |
| Сжатие JPEG | если реальные кадры сжаты | качество 60-90 |
| Дисторсия | широкоугольные и дешёвые камеры | один-два радиальных коэффициента |
| Размытие по глубине | макро, смартфоны, портретная съёмка | редко более 15 процентов кадров с расфокусом |
| Смаз движения | быстрые объекты, камеры на транспорте | выдержка 1/100-1/500 секунды |
| Блики и засветка | улица, окна, прожекторы | точечно в 5-10 процентах кадров |
Как мы подходим к настройке камеры на проекте
Чтобы не гадать, мы действуем по короткому сценарию:
- Собираем у заказчика данные о камере: модель или хотя бы тип, разрешение, высоту установки, примеры кадров.
- Подбираем геометрию и распределения параметров, делаем 20-30 пробных кадров.
- Сравниваем их с реальными по гистограммам яркости, уровню шума и резкости краёв; при необходимости подправляем.
- Включаем рандомизацию в диапазонах, соответствующих реальному разбросу устройств.
- Проверяем на небольшой выборке, как детектор, обученный на пробной партии, ведёт себя на реальных кадрах, и только потом запускаем полный объём.
Сложнее всего не воспроизвести эффект, а решить, какие эффекты действительно нужны. Лишний эффект, такой же источник ошибки, как и отсутствующий.
Следите и за разрешением. Рендер лучше выполнять в разрешении чуть выше целевого (например, 1 280 на 960 при целевых 640 на 480), а затем уменьшать: это даёт естественное сглаживание краёв и снижает лесенку на масках. Об оптимизации времени такой схемы мы рассказывали в статье про оптимизацию 3D-моделей.
Итог
Виртуальная камера, это набор параметров, которые можно и нужно подгонять под реальную. Минимальный набор для большинства задач состоит из верного поля зрения, ракурса, умеренного шума и сжатия. Остальные эффекты добавляются по необходимости и по результатам проверки на реальных кадрах. Такой подход не усложняет проект, но заметно улучшает перенос модели на реальные данные.
Хотите получить пробную партию кадров, подогнанных под вашу камеру? Пришлите несколько реальных снимков на [email protected], и мы подготовим тестовый датасет с сопоставимой оптикой. Подробнее о наших возможностях в синтетических датасетах.
Нужен датасет под вашу задачу?
Подготовим тестовую партию изображений с разметкой, чтобы вы могли проверить подход на своей модели. Напишите на [email protected] или оставьте заявку.
Читайте также
3D-моделированиеPBR-материалы и почему от них зависит реалистичность
Физически корректные материалы (PBR) определяют, как поверхность реагирует на свет. Разбираем, из чего они состоят, как их настраивать и почему для синтетических датасетов это вопрос качества, а не красоты.
3D-моделированиеОптимизация 3D-моделей для массового рендеринга
Когда нужно получить не десять красивых картинок, а 50 000 размеченных кадров, каждая лишняя миллисекунда рендера превращается в дни ожидания и счета за вычисления. Рассказываем, как мы готовим модели к массовому производству датасетов.
3D-моделированиеПроцедурная генерация сцен для датасетов
Вручную собрать сто сцен реально, десять тысяч — нет. Процедурная генерация задаёт правила, по которым компьютер сам строит разнообразные сцены. Рассказываем, как это устроено и где подводные камни.