Русский
Русский
English
Статистика
Реклама

Камеры

Проецирование положения объектов с камеры видеонаблюдения на карту, используя лишь школьную геометрию

13.06.2021 16:20:24 | Автор: admin

Введение

Возможно ли превратить координаты на изображении в конкретные географические координаты? Несмотря на то, что это звучит несколько необычно, такая конвертация вполне возможна.

Сегодня я расскажу о том, как можно спроецировать координаты с плоского изображения на карту. Эта короткая статья будет своеобразным продолжением первой статьи, в которой я рассказывал о базовых возможностях Mask R-CNN.

Статья была написана в сотрудничестве с @avdosev за что ему большое спасибо.

Проблема

Необходимо по изображению с камеры понять, где находится объект на карте территории. Схематично это выглядит так.

На изображении каждый объект у меня вписан в прямоугольник, это не случайно, в дальнейшем мы будем с помощью этого прямоугольника получать нужный пиксель для объекта.

Также условимся, что мы рассматриваем простой случай, когда камера не пересекает стены, и мы можем представить ее область видимости при виде сверху, как трапецию.

Требования к камере:

Требование к изображению:

  • На изображении с камеры должна быть видна плоскость земли.

Способ 1.

Можно задать для каждого пикселя изображения соответствующую координату местности. При необходимости узнать геокоординату, мы просто ее получим по связанному пикселю.

Достоинства:

  • Алгоритм будет работать быстро, мы ограничены скоростью доступа к Map структуре данных, файлу или базе данных;

  • Сложных вычислений в рантайме нет.

Недостатки:

  • Если камера сдвигается даже на миллиметр, все наши данные устаревают, и будут давать уже не точный результат;

  • Требуется хранить информацию о каждом пикселе для каждой камеры на территории, что нецелесообразно;

  • Задавать для каждого пикселя координаты слишком долго и сложно.

Исходя из этих проблем, был отброшен первый способ и продолжен поиск других.

Способ 2.

Имея координаты углов области видимости камеры, можно вычислять координаты для подаваемого пикселя. Их можно получить двумя способами:

  1. Посмотреть на карту территории и изображения с камеры и постараться указать наиболее точные координаты углов;

  2. Зная параметры камеры (высота над землей, координаты камеры, угол наклона камеры и углы обзора), получить координаты углов видимости (трапеции), либо сразу вычислить координаты объекта.

Расчет положения объекта по координатам углов видимости

Для начала стоит разобраться, как выглядит область видимости камеры на виде сверху.

Для работы с этой областью, нужно отбросить часть плоского конуса рядом с камерой, которую я обозначил красным на рисунке выше. Эта область выбирается, исходя из того, что в красную зону не могут (или не должны) попасть объекты.

Область видимости камерыОбласть видимости камеры

Для простоты расчетов можно считать его трапецией.

Упрощенная до трапеции область видимости камерыУпрощенная до трапеции область видимости камеры

Для расчета местоположения объекта используем следующие формулы.

l_1 = \cfrac{C-B}{imageHeight - Y} + Bl_2 = \cfrac{D-A}{imageHeight - Y} + AM = \cfrac{l_2 - l_1}{imageWidth} * X + l_1

Где

  • l2 , l1 промежуточные переменные для вершины;

  • imageHeight, imageWidth высота и ширина изображения с камеры в пикселях соответственно;

  • A, B, C, D географические координаты вершин трапеции поля зрения камеры в формате {lat: float, lng: float};

  • X, Y координаты пикселей на изображении в декартовой системе координат, являются целыми числами;

  • M - результирующие координаты.

В случае Full HD картинки ширина и высота будут следующими: imageHeight=1080; imageWidth=1920.

После распознавания объекта на изображении, нейросеть отдаст координаты углов прямоугольника. Из него необходимо выбрать точку на изображении, для которой будут определяться координаты. Для этого есть несколько способов:

  1. Брать центроид прямоугольника;

  2. Брать середину нижней стороны прямоугольника. Этот способ даст более точный результат, если объект перемещается по земле, а не летает;

Всё это можно объединить:

Взять 1/N высоты и центр по горизонтали, где N может изменяться в зависимости от различных факторов, например, типа объекта или способа перемещения.

Например, для N=8 мы получим такую результирующую точку на прямоугольнике объекта.

Все эти способы имеют существенную погрешность при малой высоте камеры или/и при большом наклоне камеры.

Расчет углов видимости камеры, используя ее характеристики

Для нахождения точек A, B, C, D автоматизированным образом, нам необходимо найти центр будущей трапеции C.

Зная высоту h и угол наклона камеры , мы можем найти противоположный катет len.

len = h * \tan(\alpha)

Зная координаты камеры (точка О) и её направление (в какую сторону она смотрит, угол ) можно найти центр её наблюдения (точка С). Найти ее можно по формуле:

С_x = O_x + cos(\beta) * lenC_y = O_y + sin(\beta) * len

Измерить угол и на практике может быть затруднительным. Чтобы избежать сложных замеров, можно оценить примерную координату точки C (центр изображения), и вычислить углы.

\alpha = \arctan( \frac{\lvert С_x - О_x \rvert + \lvert C_y - O_y \rvert}{h})

Для того, чтобы найти координаты углов изображения, необходимо знать углы обзора камеры по горизонтали и вертикали. Посмотрев углы обзора в характеристиках камеры, мы можем найти координаты. Расчеты выполняются аналогично расчету центральной точки. При этом необходимо делать смещение.

Для основного угла +/- половина угла обзора по вертикали.

Для вторичного угла +/- половина угла обзора по горизонтали.

Примем горизонтальный угол обзора за viewAngleHorizontal, а вертикальный за viewAngleVertical.

Для точек, которые находятся ближе к камере, мы отнимем половину угла обзора, а для дальних - добавим.

Далее повторно рассмотрим точки трапеции. (Не стоит путать следующую точку C с центральной).

lenNear = h * tan(\alpha + viewAngleVertical / 2)A_x = O_x + cos(\beta - viewAngleHorizontal / 2 ) * lenNearA_y = O_y + sin(\beta - viewAngleHorizontal / 2 ) * lenNearB_x = O_x + cos(\beta - viewAngleHorizontal / 2 ) * lenNearB_y = O_y + sin(\beta - viewAngleHorizontal / 2 ) * lenNear lenFar = h * tan(\alpha - viewAngleVertical / 2)C_x = O_x + cos(\beta + viewAngleHorizontal / 2 ) * lenFarC_y = O_y + sin(\beta + viewAngleHorizontal / 2 ) * lenFarD_x = O_x + cos(\beta + viewAngleHorizontal / 2 ) * lenFarD_y = O_y + sin(\beta + viewAngleHorizontal / 2 ) * lenFar

Скомбинировав смещения по углам обзора, мы получаем координаты углов изображения - точки A, B, C, D.

Зная точки A, B, C, D можно получить географические координаты объекта. Но можно обойтись и без них. Следующий расчет потребует imageHeight, imageWidth, X, Y.

Если добавить вспомогательные оси, где координаты X, Y будут центром, то наш пиксель поделит изображение на 4 части. Определив отношения частей по горизонтали и по вертикали, мы можем определить углы, на которые должны делать смещение. Итоговая формула выглядит так:

len_M = h * tan(\alpha + viewAngleVertical * \frac{imageHeight - y}{imageHeight - 0.5})M_x = O_x + cos(\beta - viewAngleHorizontal * \frac{imageWidth - x}{imageWidth - 0.5} * len_MM_y = O_y + sin(\beta - viewAngleHorizontal * \frac{imageWidth - x}{imageWidth - 0.5} * len_M

Реализация на Python

imageWidth = 1920 # в данном примере зададим их константамиimageHeight = 1080import numpy as npdef geoToList(latlon):  return np.array((latlon['lat'], latlon['lng']))  def listToGeo(latlon):  return {'lat': latlon[0], 'lng': latlon[1] }  def getGeoCoordinates(A, B, C, D, X, Y):    A, B, C, D = list(map(geoToList, [A, B, C, D]))    vBC = (C - B) / imageHeight    vAD = (D - A) / imageHeight    latlonPixel1 = vBC * (imageHeight - Y) + B    latlonPixel2 = vAD * (imageHeight - Y) + A    vM = (latlonPixel2 - latlonPixel1) / imageWidth    M = vM * X + latlonPixel1    return listToGeo(M)

Результаты

Из этого изображения были получены координаты объекты левого верхнего и правого нижнего угла по X, Y соответственно - 613;233 1601;708.

Исходный код всегда доступен на Github.

Если найдете ошибки в алгоритме или в формулах, пожалуйста, сообщите об этом в комментариях.

Литература

Подробнее..

Перевод Зачем современные 50-миллиметровые объективы настолько сложно устроены?

30.05.2021 12:21:38 | Автор: admin

Объективы наподобие Nikon Z 50mm F1.2 S больше, тяжелее, дороже и сложнее, чем старые объективы F1.2. Но почему?

Для начала немного истории оптики


В те времена, когда корабли строили из дерева, у людей уже были надёжные оптические инструменты. Одним из таких инструментов являлся объектив с постоянным фокусным расстоянием, изготовленный по схеме двойной объектив Гаусса. До начала двадцатого века проектировщики объективов уже создали пять из шести типов объективов, ставших основой для тех, которые мы используем сегодня. (Ретрофокусный объектив появился в 1920-х, а зум-объективы, если вам любопытно, по сути, являются модифицированными триплетами Кука.)

С конца 19-го века двойной объектив Гаусса был основной конструкцией объективов с постоянным фокусным расстоянием и большой светосилой. В течение многих лет конструкторы добавляли новые группы для получения большего количества света, коррекции аберраций и совершенствования объективов в целом. Но вплоть до современности фундаментом для объективов с постоянным фокусным расстоянием оставался двойной Гаусс. Вспомните любой известный объектив с постоянным фокусным расстоянием, и он скорее всего будет изготовлен по схеме двойного Гаусса: Speed Panchro, Planar, Xenon, Summicron, Takumar, Ultron, и так далее.



Наверху: объектив Петцваля, апланат, двойной объектив Гаусса. Внизу: триплет Кука, телеобъектив, обратный телеобъектив (ретрофокусный).


В большинстве схем двойного Гаусса есть особенности, имеющие практическую важность (обратите внимание, что я сказал в большинстве, а не во всех). Проще всего проектировать двойной объектив Гаусса с углом обзора, эквивалентным фокусному расстоянию 40-60 мм полнокадровых камер. Поэтому в сфере 50 мм обычно властвуют двойные объективы Гаусса, а объективы с большим или меньшим фокусным расстоянием обычно становятся телеобъективами или ретрофокусными объективами. Во-вторых, аберрации в двойных объективах Гаусса проще контролировать при диафрагме F2.8 и меньше. Приличный 50-миллиметровый двойной объектив Гаусса с диафрагмой F2.8 можно изготовить всего из пяти элементов, а диафрагмы большего диаметра требуют больше элементов для коррекции аберраций (см. схему выше).

Но объективы меняются


За последнее десятилетие 50-миллиметровые объективы стали более сложными. Сравните тридцатилетнюю конструкцию Canon 50mm F1.2 (справа) с более новыми Sigma 50mm F1.4 Art и Zeiss Otus 55mm F1.4 (слева).


Схемы объективов (слева направо) Zeiss 55mm Otus, Sigma 50mm F1.4 Art и Canon 50mm EF F1.2L.

Недавно три крупных производителя представили объективы 50mm F1.2 с ещё более сложной схемой, содержащие от 13 до 18 элементов, с несколькими асферическими и низкодисперсионными компонентами. В них достаточно сложно увидеть какое-то бы ни было влияние схемы двойного объектива Гаусса.


Схемы объективов (слева направо): Sony FE 50mm f1.2 GM, Nikkor Z 50mm f1.2 S и Canon RF 50mm f1.2L.

Конструкторы объективов добавляют всё это новое стекло не для того, чтобы повысить цену и сделать схему более крутой. Эти новые более дорогие и сложные конструкции предназначены для преодоления ограничений, с которыми мы сталкивались у 50-миллиметровых объективов с постоянным фокусным расстоянием и сверхширокой диафрагмой. По крайней мере, они решат эти проблемы в теории и моих ожиданиях. А мы знаем, чем обычно заканчиваются ожидания.

Поговорим про объективы со сверхширокой диафрагмой


Кстати, об ожиданиях: многие годы фотографы тратили целые состояния на объективы F1.2 в надежде, что несмотря на снижение резкости при полностью открытом отверстии, хотя бы при уменьшении отверстия они будут так же хороши, как более дешёвые 50-миллиметровые объективы. Ведь уменьшение отверстия способно решить все проблемы, не так ли?

К сожалению, всё работало не так, по крайней мере, для двойных объективов Гаусса с диафрагмой больше, чем F1.4. Разумеется, уменьшение относительного отверстия делало их резче, особенно в центре. Но вдали от центра они никогда не были очень чёткими; скорее, становились приемлемыми. Например, ниже представлено сравнение классического объектива Canon 50mm EF F1.2L и более нового Sigma 50mm F1.4 Art, протестированных при F5.6. Как видите, Sigma превосходит Canon.


Функция передачи модуляции (ФПМ) объективов Canon 50mm EF 50mm F1.2L (слева) и Sigma 50mm F1.4 Art (справа).

График кривизны поля демонстрирует, что это не её влияние (хотя некоторая кривизна присутствует). Скорее, эти объективы имеют аберрации, которые не очень снизились благодаря уменьшению относительного отверстия (астигматизм третьего и пятого порядка, эллиптическая кома и другие аберрации высокого порядка при диафрагмах меньшего размера устраняются не так хорошо).


Эти диаграммы показывают, что несмотря на уменьшение относительного отверстия внешние части объектива не такие уж резкие и присутствует большая степень астигматизма.

Именно такой была ситуация. Объектив со сверхширокой диафрагмой по цене 1500 долларов давал потрясающие снимки при F1.2, но при уменьшении отверстия до F5.6 или F8, обычно более резким оказывался объектив F1.8 за 300 долларов. Я использовал в качестве примера Canon EF 50mm F1.2L, но то же самое, по сути, было справедливо для всех сверхшироких (F1.2 или шире) объективов, в том числе и ценой 3000 долларов.

Тестируем новую Sony FE 50mm F1.2 GM


Компания Sony прислала мне для предварительного тестирования пять новых объективов FE 50mm F1.2 GM. Это неполное тестирование, потому что объективов всего пять, но этого должно быть достаточно, чтобы дать нам некоторую информацию. И хотя я не тестировал 50-миллиметровые Canon и Nikon, их конструкция предполагает, что результаты должны быть примерно одинаковыми.

Тесты с полностью открытым отверстием


Если сравнивать со старым EF Canon 50mm F1.2, то видно, что последние 30 лет проектирования объективов не прошли даром. Sony (справа) значительно лучше.


Canon EF 50mm F1.2L @ F1.2 | Sony FE 50mm F1.2 GM @ F1.2

Вот показатель, дающий представление о том, насколько хорош Sony: при F1.2 он имеет лучшее разрешение, чем превосходный Sigma 50mm F1.4 Art при F1.4.


Sigma 50mm F1.4 Art при F1.4 | Sony FE 50mm F1.2 GM при F1.2

Так вот в чём преимущество новой конструкции: при полностью открытом отверстии он так же хорош, как превосходный 50mm F1.4. Это определённо стоит своих денег для многих фотографов. Но мне всё равно было любопытно насколько повышается резкость при уменьшении отверстия?

Сравнения с уменьшенным отверстием


Давайте начнём с очевидного: сравним один объектив F1.2 GM с одним объективом Sony Planar 50mm F1.4 ZA, оба с диафрагмой F5.6. ZA не такой уж потрясающий объектив, но многие пользователи FE работали с ним. При уменьшении отверстия представленная ниже диаграмма ФПМ демонстрирует его высокий астигматизм. Я ожидал, что GM будет лучше него; так и оказалось.


Sony FE 50mm F1.2 GM при F5.6 | Sony FE 50mm F1.4 ZA при F5.6

Теперь давайте проведём более сложное сравнение, между одним из GM и Sigma 50mm F1.4 Art (на графике я поменял их местами, то есть Sony справа). Есть незначительные отличия, но если вы захотите сказать, что один точно лучше другого, то я предпочту промолчать, потому что вы ошибётесь. Sigma чуть-чуть получше по краям, Sony в центре, и у Sony чуть меньше астигматизма. Но различия очень незначительны, вплоть до того, что они окажутся в пределах отклонения выборки, и будут незаметны на фотографиях.


Sigma 50mm F1.4 Art при F5.6 | Sony FE 50mm F1.2 GM при F5.6

Именно это я и надеялся увидеть. Раньше, если вы покупали объектив F1.2 или с более широкой диафрагмой, то ожидали, что при открытом отверстии картинка будет нерезкой, и даже при уменьшении отверстия она не станет такой же резкой, как у более дешёвого и медленного объектива. Современные (и более сложные) конструкции позволяют объективам F1.2 быть потрясающе резкими при полностью открытом отверстии, а при уменьшении отверстия такими же резкими, как объективы с меньшими диафрагмами. И это, на самом деле, очень важно.

Разумеется, разрешение это ещё не всё. Вероятно, это даже не самое важное. Но важно то, что, по крайней мере, у объективов F1.2 до недавнего времени таких показателей не было.

И надеюсь, теперь вы начинаете понимать, почему эти новые объективы состоят из такого количества элементов (хотя на самом деле причина не только в этом).



На правах рекламы


Закажите и сразу работайте! Создание VDS любой конфигурации в течение минуты, в том числе серверов для хранения большого объёма данных до 4000 ГБ, CEPH хранилище на основе быстрых NVMe дисков от Intel. Эпичненько :)

Присоединяйтесь к нашему чату в Telegram.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru