- Как стабилизировать камеру без штатива
- Как стабилизировать камеру без штатива: Сохраняйте правильную осанку
- Следите за выдержкой
- Как стабилизировать камеру без штатива: Контролируйте свое дыхание
- Настройте вспышку на срабатывание по второй шторке
- Стабилизация видео с движущейся камеры, или как перевести всё в неподвижную систему координат
- О каждом пункте подробнее:
- Что нужно знать о гомографии
- Пайплайн:
- О проекте
- Визуализация и интерпретация результатов:
- Known issues
- Выводы
Как стабилизировать камеру без штатива
Если вы хотите сделать четкую фотографию неподвижного предмета, ничто не мешает вам сначала сделать десяток-другой…
Если вы хотите сделать четкую фотографию неподвижного предмета, ничто не мешает вам сначала сделать десяток-другой его снимков. А затем, при редактировании, перебрать их все и выбрать тот, на котором изображение получилось наиболее чётким.
Но, согласитесь, устранить проблему с самого начала, а не бороться с ее последствиями будет логичнее.
Если ваша камера или объектив не оснащены системой стабилизации, то присмотритесь к методам получения резких фотографий, которыми пользовались фотографы задолго до того, как возникли технологии стабилизации изображения. Нет, я не говорю о штативах – не совру, если скажу, что их использование не всегда удобно и возможно.
Давайте рассмотрим элементарные способы стабилизации камеры при съемке.
Как стабилизировать камеру без штатива: Сохраняйте правильную осанку
Когда заходит вопрос о стабилизации камеры при съемке, есть несколько советов относительно вашей осанки, которые вы должны постоянно помнить:
- Держите камеру уверенно
- Прижмите локти к телу. Чем плотнее они прижаты к телу, тем стабильнее ваши руки, держащие камеру, а, следовательно, и сама камера
- Если камера оснащена достаточно крупным объективом, удерживайте одной рукой объектив, а второй – камеру. Конечно, это не всегда можно сделать (например, если на камере установлен небольшой объектив-блинчик), но когда у вас есть такая возможность – не примените ей воспользоваться
- При съемке с ЖК-экраном, убедитесь, что ваши предплечья и локти, прижатые к телу, как можно более стабильны
- Попробуйте держать спину, как можно более прямой. Если вам нужно наклониться, постарайтесь во что-нибудь упереть одно или оба колена – это поможет вам сохранить более стабильное положение
Это самые простые советы, сочетая их со способами, которыми мы поделимся далее, вы сможете получить более резкие фотографии. Итак, продолжим.
Следите за выдержкой
Часто возможность получения фотографии без размытия, возникшего из-за дрожания камеры, зависит от выбранной вами выдержки. Общее правило заключается в следующем:
Чтобы получить четкую, неразмытую фотографию, при съемке объекта, выдержка вашей камеры должна быть не менее величины, обратной фокусному расстоянию вашего объектива.
То есть, если вы снимаете с 100-мм объективом на полнокадровой камере, то для получения резких фотографий вы должны установить выдержку, как минимум в 1/100с. Очевидно, это означает, что чем меньше фокусное расстояние – тем сложнее получить четкую фотографию, снимая с рук. Ведь если использовать, например, 35-мм объектив, то минимальная выдержка должна быть 1/40 с.
Помня об этом правиле, не забывайте и о кроп-факторе. Если вы используете 45-мм объектив на камере с сенсором формата Micro Four Thirds, то вы получаете эквивалентное фокусное расстояние в 90 мм, соответственно, вам следует выбрать выдержку наиболее близкую к 1/90 с – чаще всего это 1/100с.
Как стабилизировать камеру без штатива: Контролируйте свое дыхание
В вопросах получения резких фотографий нет мелочей. И когда дело доходит до необходимости убедиться в том, что при съемке ваше тело как можно более стабильно – умение контролировать дыхание становится весьма важным. В этом вопросе существуют две основных точки зрения: одна половина фотографов говорит, что вам нужно сделать глубокий вдох, задержать дыхание и сделать снимок. Другая половина утверждает, что лучше всего нажимать кнопку спуска затвора, полностью выдохнув.
Я придерживаюсь второй точки зрения, но вы можете попробовать оба способа и выбрать тот, который вам более удобен и который дает наилучшие, на ваш взгляд, результаты.
Настройте вспышку на срабатывание по второй шторке
Еще один совет для уменьшения количества размытых фотографий связан с использованием вспышки. Настройка вспышки на срабатывание по второй шторке (также известной, как задняя шторка) позволит вам получать резкие фотографии даже на очень длинных выдержках.
Этот метод идеально подходит для фотографирования, например, световых следов.
На самом деле, когда я впервые начал карьеру фотографа, я имел обыкновение использовать режим вспышки по второй шторке с накамерной вспышкой для Olympus E-510 DSLR. И это много раз спасало мою задницу в ситуациях, когда я работал по заданию редакции.
Так что, я твердо уверен, что если бы мне нужно было бы заниматься этим делом снова – я бы обязательно воспользовался этим режимом.
Автор и фото: Крис Гэмпат
Больше полезной информации и новостей в нашем Telegram-канале «Уроки и секреты фотографии». Подписывайся! Читайте нас на Яндекс.Дзен «Секреты и хитрости фотографии».
Источник
Стабилизация видео с движущейся камеры, или как перевести всё в неподвижную систему координат
Сейчас возможности Computer Vision (CV) полностью перекраивают ландшафт рынка Public Safety solutions. В то время как традиционными системами видеонаблюдения уже не просто никого не удивить, а странно не найти её в любом общественном месте, использование ИИ в данной области всё ещё вновинку.
Мы исследуем применение CV для различных бизнес-задач в сфере Public safety. В этом посте мы предлагаем вариант перевода видео с движущейся камеры в неподвижную систему координат для последующего анализа.
Допустим, у нас есть какое-то видео и мы хотим построить для него неподвижную систему координат, чтобы оценивать расположение объектов относительно друг друга.
Зачем это нужно? Очень часто в задачах public surveillance видео, которое нужно анализировать, снято на движущуюся камеру. Из-за этого возникает несколько проблем в определении положения объектов относительно друг друга:
- Непонятно, чем вызвано изменение координат объекта: движется камера или сам объект;
- При смене сцены из-за поворота камеры разные объекты могут получить одни и те же координаты, даже если объекты были статичными.
Рисунок 1 — Одинаковые объекты имеют разные координаты из-за движения камеры
Для того, чтобы построить неподвижную систему координат необходимо:
- Определить начало координат;
- Сопоставить между собой два последовательных фрейма;
- Найти преобразование, которое будет переводить координаты объекта на текущем фрейме в координаты относительно начала координат, при этом учитывать все движения камеры (поворот, перемещение, наклон и т.д.).
Рисунок 2 — проективное преобразование
О каждом пункте подробнее:
Рисунок 3 — matching visualization
- В качестве преобразования использовали гомографию, подробнее о ней вы можете почитать здесь.
Что нужно знать о гомографии
Гомография характеризуется своей матрицей Н:
- a, e — масштабирование по x и y соответственно;
- b, d — сдвиг по осям (вместе с a и e влияют на поворот);
- c, f — смещение по осям;
- g, h — изменение перспективы.
Используя эту матрицу, можно описать изменение координат одного объекта между двумя фреймами, если это изменение вызванно движением камеры. Получить из (x,y) новые координаты (x’,y’) можно следующим образом:
или в матричном виде:
Пайплайн:
Давайте рассмотрим работу алгоритма на примере обработки k-ого фрейма.
Пусть есть N последовательных фреймов — (f1. fN). В качестве начала координат зафиксируем левый верхний угол первого фрейма. Определим matching points как точки, которые связывают fk и fk-1.
Введем следующие обозначения:
О — начало координат;
(Xk, Yk)=((x 1 k, y 1 k),…, (x n k, y n k)) – координаты n matching points;
(X’k, Y’k) =((x’ 1 k, y’ 1 k),…, (x’ n k, y’ n k)) – координаты n matching points в неподвижной системе координат;
(X»k, Y»k) =((x» 1 k, y» 1 k),…, (x» n k, y» n k)) – k — координаты n matching points в систееме координат, где ее началом является левый верхний угол fk-1.
Hk – матрица гомографии, которая описывает движение камеры между fk-1 и fk.
Считаем, что есть набор общих точек для двух фреймов и их оригинальные координаты относительно фрейма.
Необходимо из (Xk, Yk) получить (X’k, Y’k). Найти матрицу гомографии между f1 и fk не всегда возможно, т.к. за время движения камеры сцена могла кардинально поменяться и фреймы могут не содержать общих объектов. Поэтому найдем матрицу перехода Hk.
Считаем, что уже найдена последовательность таких матриц для предыдущих фреймов (H1,…, Hk-1). Если матрица Hk будет описывать изменения между координатми (Xk-1, Yk-1) и (Xk, Yk), то мы не учтем, что взаимное расположение объектов могло сильно измениться с начала видео.
Рассмотрим рисунок 3:
Рисунок 3 — пример движения камеры, при котором произошло масштабирование объектов
Здесь показан пример такого движения камеры, при котором происходит масштабирование объектов. Если на текущем фрейме координата объекта изменилась на a пискелей:
x 1 k= x 1 k-1 — a, это не значит, что он переместился на a координат в неподвижной системе: x’ 1 k = x 1 k — a, это очень хорошо видно на рисунке 3. Поэтому, при поиске преобразования между двумя фреймами нужно учесть все трансформации, которые произошли с первого кадра.
Как это сделать?
Описать передвижение камеры между всеми предыдущими парами последовательных фреймов можно с помощью известных матриц гомографии (H1,…, Hk-1). Но необходимо найти такую суперпозицию этих матриц, которая будет описывать полное движение от 1 до k-1 кадра и позволит найти координаты mathcing points на fk-1 в неподвижной системе. Если посмотреть на формулу (1), становится понятно, что такая суперпозиция — это перемножение матриц всех предыдущих переходов.
Таким образом, для того, чтобы найти матрицу гомографии, описывающую движение камеры между fk-1 и fk, необходимо: умножить оригинальные координаты (Xk-1, Yk-1) и (Xk, Yk) на суперпозицию матриц (формула (2)), и уже для полученных координат (X’k-1, Y’k-1) и (X»k, Y»k) искать матрицу Hk. В результате, получим преобразование, которое переведет координаты объекта на этом фрейме (x 1 k, y 1 k) в координаты этого объекта относительно начала координат (x’ 1 k, y’ 1 k).
Но есть одна проблема: дело в том, что особые точки могут цепляться за подвижные объекты (за людей, машины, и т.д. ), и из-за этого матрица гомографии может быть посчитана неточно и описывать не только движение камеры, но и движение людей. Поэтому необходимо отфильтровывать точки.
Разработан следующий вариант фильтрации:
- Получаем «грязные» matching points с координатами ((x 1 k, y 1 k),… ,(x’ n k, y’ n k)), которые включают в себя точки и на подвижных объектах
- Находим матрицу гомографии H, которая переведет координаты k-ого фрейма в плоскость k-1 фрейма.
- Применяем ее к найденным точкам и получаем их новые координаты ((x’ 1 k, y’ 1 k),… ,(x’ n k, y’ n k))
- Фильтруем точки следующим образом:
- Ищем расстояние, на которое переместилась каждая точка по сравнению с предыдущим фреймом;
- Группируем. Округляем перемещение до целых, и точки с одинаковым перемещением попадают в одну группу;
- Если кол-во точек в группе меньше порогового значения (в скрипте этот порог равен LENGTH_ACCOUNTED_POINTS len(matching points)), считаем, что это точки, которые зацепились за движущийся объект, и удаляем их из рассмотрения.
Остались только точки, которые находятся на неподвижных объектах. Именно их и используем при подсчете матрицы гомографии Н.
Найденная на «грязных» точках матрица будет описывать не только движение камеры, но и частично движение движущихся объектов. И, следовательно, координаты объектов, движение которых будет описано достаточно точно, не изменятся и попадут в группу с неподвижными объектами. Tаким образом, матрица гомографии может быть посчитана неточно. В связи с этим, в качестве улучшения фильтрации рассматривается внедрение motion video segmentation.
О проекте
А теперь перейдем к реализации всего описанного выше.
На GitHub здесь можно взять проект, запустить его на своем видео и получить неподвижную систему координат.
Проект состоит из трех файлов
- evenvizion_component.py
- evenvizion_visualization.py
- compare_evenvizion_with_original_video.py
evenvizion_component.py
Реализация самого алгоритма неподвижной системы координат и всех основных результатов, происходит в файле evenvizion_component.py. На вход скрипт принимает путь к видео, на выходе возвращает json с матрицами гомографии, описывающими перемещение между fk-1 и fk. Важно, в json записаны матрицы, описывающие перемещение только между двумя фреймами. Чтобы получить координаты в неподвижной системе, необходимо сначала получить суперпозицию матриц, о которой было рассказано выше.
Если же вы хотите пересчитать координаты каких-то определенных объектов, то необходимо указать путь к json файлу в —path_to_original_coordinate с этими объектами и вы получите recalculated_coordinates.json с пересчитанными координатами, а также их визуализацию.
Формат json файла:
Таким образом после работы evenvizion_component.py скрипта, вы получаете 3 визуализации (управлять matching and heatmap визуализациями можно с помощью аргументов —show_matches и —visualize_fixed_coordinate_system соответственно).
evenvizion_visualization.py и compare_evenvizion_with_original_video.py используются исключительно для получения визуализаций работы компонента.
Больше про аргументы и константы Вы можете прочитать в README.
Для демонстрации и проверки работы алгоритма было разработано несколько визуализаций, чуть подробнее о них.
Визуализация и интерпретация результатов:
Визуализация matching points — matching visualization:
Рисунок 5 — matching visualization
Ее описание приводилось выше.
Для демонстрации того, как работает именно неподвижная система координат, была разработана следующая визуализация (heatmap visualization):
Рисунок 6 — heatmap visualization
В данной визуализации фрейм разбивается на 20 прямоугольников, и на каждом кадре координаты центра прямоугольника пересчитываются в новой системе координат, то есть можно посмотреть как неподвижные объекты сохраняют свои координаты по мере движения камеры. Здесь используется окрашивание фрейма в зависимости от того, насколько далеко от начала координат расположен объект. Цвет окрашивания определяется следующим образом: вычисляется расстояние от объекта до начала координат r=sqrt(x 2 +y 2 ), нормализуется с помощью агрумента heatmap_constant и в зависимости от полученного значения окрашивается в определенный цвет, диапазон цветов: 0 — синий, 1 — красный.
Рисунок 7 — fixed_coordinate_system_visualization
Если Вы указали json с координатами объектов, которые необхомо пересчитать, вы получите fixed_coordinate_system_visualization (рисунок 7).
evenvizion_visualization.py и compare_evenvizion_with_original_video.py используются для визуализации стабилизации камеры, и покрывают только перемещение камеры (масштабирование и поворот такая визуализация не учитывает). На рисунках 8 и 9 представлены результаты работы этих скриптов соотвественно.
Рисунок 8 — visualize_camera_stabilization
Рисунок 9 — original_video_with_EvenVizion
Known issues
N/a координаты. Когда matching points цепляются за подвижные объекты, то есть фильтрация работает недостаточно хорошо, и когда угол поворота камеры больше 90 градусов, координаты не могут быть определены. В качестве решения первой проблемы в данный момент рассматривается внедрение video motion segmentation, чтобы, учитывая характер движения, отделять static points от motion points. А в качестве решения второй — переход к цилиндрической системе координат.
Матрица Н не определена. Для поиска гомографии необходимо минимум 4 matching points, но бывают случаи, когда 4 точки невозможно найти, и матрицы гомографии Н=None. В данной версии алгоритма такие случаи обрабатываются следующим образом: если аргумент none_H_processing стоит True, то считаем что матрца предыдущего фрейма будет соответствовать матрице текущего: Hk=Hk-1. Если же False, то H — единичная матрица, то есть никакого движения на данном кадре не было. Необходимо продумать более качественную обработку таких ситуаций.
Погрешность. Имеет место погрешность в координатах. Некачественно полученная матрица гомографии искажает результаты пересчета координат. Причины:
- Некачественная фильтрация. Если точки зацепятся за движущийся объект, то матрица гомографии будет описывать не только движение камеры, но и самостоятельное движение объектов (например, ходьбу человека).
- Ипользование встроенной функции findHomography() модуля opencv. Эта функциия уже предполагет наличие погрешности в расчете матрицы гомографии.
Выводы
Таким образом, получаем компонент, который позволяет оценить реальное положение объектов относительно друг друга, перевести координаты объекта в неподвижную систему относительно фрейма. Т.к. в данном решении основное — оценить преобразование плоскостей, используя ключевые точки, то, как было показано выше, задача может быть решена даже в плохих условиях съемки (резкое движение камеры, сложные погодные условия, съемки в темное время суток и т.д.).
Источник