Интеграл 5/2020

УДК 004.021

DOI 10.24411/2658-3569-2020-10086

СОЗДАНИЕ КАРТЫ ВЫСОТ МЕТОДАМИ OPENCV

CREATING A HEIGHT MAP WITH OPENCV METHODS

Стахеева Алина Алексеевна, Северный арктический федеральный университет им. М.В. Ломоносова, г. Архангельск

Захаров Максим Владимирович, кандидат технических наук, заведующий кафедрой автоматики, робототехники и управления техническими системами, доцент,Северный арктический федеральный университет им. М.В. Ломоносова, г. Архангельск 

Staheeva A.A., staheeva.a@narfu.ru

Zakharov M.V., m.zakharov@narfu.ru

Аннотация. В данной статье объясняется, что такое карта высот, рассмотрены классы функций «StereoBM» и «StereoSGBM» модуля «OpenCV» и их параметры. Выполнено построение карт глубин с помощью «StereoBM» и «StereoSGBM» по фотографиям и проведено сравнение данных методов. То же проделано с фотографиями, сделанными на откалиброванную камеру.

Summary. This article explains what a height map is, describes the classes of functions «StereoBM» and «StereoSGBM» of the «OpenCV» module and their parameters. Depth maps were constructed using «StereoBM» and «StereoSGBM» and a comparison of these methods was carried out. The same is done with photographs taken with a calibrated camera.

Ключевые слова: карта высот, параллакс, стереопара, стереоизображение, OpenCV, StereoBM, StereoSGBM.

Keywords: height map, parallax, stereo pair, stereo image, OpenCV, StereoBM, StereoSGBM.

О карте высот

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

Карта высот похожа на карту нормалей, но их главное отличие в том, что при создании карты нормалей используется освещение, а для карты высот – параллакс.

Параллакс – изменение видимого положения объекта относительно удалённого фона в зависимости от положения наблюдателя.

Даже дети, сами того не понимая, встречают хороший пример параллакса при игре в прятки. Если игрок спрятался за большим деревом в паре метров от вас, то вы сможете его увидеть, если достаточно подвинетесь вправо или влево. Все дело в перспективе, под определенными углами зрения дерево уже не будет загораживать игрока. Геометрически этот пример показан на рисунке 1.

«StereoBM» – это класс функций, который создает изображения с помощью локального сопоставления блоков, а «StereoSGBM» с помощью полу-глобального сопоставления блоков.

Далее приведен пример получения карты высот с помощью «StereoBM» и «StereoSGBM», используя сделанные фотографии.

Получение карты высот с помощью «StereoBM»

Начнем с «StereoBM». Фрагмент кода на языке «Python», показывающий процесс создания карты высот с помощью «StereoBM», приведен в листинге 1, а результат выполнения данного кода на рисунке 3.

Результат получился очень шумным, но регулируя значения параметров «numDisparities» и «blockSize» можно получить лучший результат:

  • «numDisparities» – диапазон поиска несоответствия. Для каждого пиксельного алгоритма будет найдено наилучшее несоответствие от 0 (минимальное несоответствие по умолчанию) до numDisparities. Затем диапазон поиска можно сместить, изменив минимальное несоответствие. Значение всегда больше или равно нулю. В текущей реализации этот параметр должен делиться на 16;
  • «blockSize» – линейный размер блоков, сравниваемых алгоритмом. Размер должен быть нечетным (так как блок центрируется в текущем пикселе). Больший размер блока подразумевает более гладкую, но менее точную карту несоответствия. Меньший размер блока дает более подробную карту несоответствия, но у алгоритма больше шансов найти неправильное соответствие. Значение параметра должно быть нечетным.

Также есть некоторые параметры, которые можно дополнительно настроить для получения лучших и плавных результатов:

  • «texture_threshold»: отфильтровывает области, у которых недостаточно текстуры для надежного сопоставления;
  • «speckle_size»: количество пикселей, ниже которого большой двоичный объект несоответствия считается «пятнистым»;
  • «speckle_range»: определяет, насколько близки должны быть различия в значениях, чтобы их можно было рассматривать как часть одного и того же большого двоичного объекта;
  • «Number of disparities»: определяет насколько пикселей нужно сдвинуть окно. Чем он больше, тем больше диапазон видимых глубин, но требуется больше вычислений.
  • «min_disparity»: смещение от x-позиции левого пикселя, с которого начинается поиск;
  • «uniqueness_ratio»: отфильтровывает пиксель, если несоответствие наилучшего соответствия недостаточно лучше, чем любое другое несоответствие в диапазоне поиска.

Получение карты высот с помощью «StereoSGBM»

Теперь рассмотрим получение карты высот с помощью «StereoSGBM». Фрагмент кода на языке «Python», показывающий процесс создания карты высот с помощью «StereoSGBM», приведен в листинге 2, а результат выполнения данного кода на рисунке 4.

Регулируя значения следующих параметров можно получить лучший результат:

  • «minDisparity» – минимально возможное значение диспаратности. Обычно он равен нулю, но иногда алгоритмы исправления могут сдвигать изображения, поэтому этот параметр необходимо соответствующим образом настроить;
  • «numDisparities» – максимальное несоответствие минус минимальное несоответствие. Значение всегда больше нуля. В текущей реализации этот параметр должен делиться на 16;
  • «blockSize» – соответствующий размер блока. Это должно быть натуральное нечетное число;
  • «P1» – первый параметр, контролирующий плавность диспаратности. P1 – это штраф за изменение несоответствия на плюс или минус 1 между соседними пикселями;
  • «P2» – второй параметр, контролирующий плавность диспаратности. P2 – это штраф за изменение несоответствия более чем на 1 между соседними пикселями. Чем больше значения, тем более плавным будет несоответствие. Значение параметра «P2» должно быть больше значения «P1»;
  • «disp12MaxDiff» – максимально допустимая разница (в целых пикселях) при проверке несоответствия между левым и правым. Для отключения проверки, надо установить неположительное значение параметра;
  • «preFilterCap» – значение усечения для пикселей предварительно отфильтрованного изображения;
  • «uniquenessRatio» – маржа в процентах, при которой наилучшее (минимальное) вычисленное значение функции затрат должно «выиграть» второе лучшее значение, чтобы найденное совпадение считалось правильным.
  • «speckleWindowSize» – максимальный размер областей сглаживания диспаратности, чтобы учесть их шумовые спеклы и исключить их;
  • «speckleRange» – максимальное отклонение диспаратности в каждом подключенном компоненте. Если вы выполняете фильтрацию спеклов, установите для параметра положительное значение, оно будет неявно умножено на 16;
  • «mode» – задает особый вид поиска паттернов блоков на стереопаре изображений. Стандартно этот параметр – ложный.

Карты высот, полученных из фотографий, сделанных на откалиброванную камеру

Очень сильно влияет на качество получаемой карты высот калибровка камеры. При создании фотографий камера не была откалибрована, поэтому проверим, как классы функций «StereoBM» и «StereoSGBM» преобразуют изображения, сделанные на откалиброванную камеру. Результат приведен на рисунках 5 и 6.

Заключение

Получение карты высот, используя класс функций «StereoSGBM» с помощью модуля «OpenCV» является более точным; лучше выделяются границы объектов и разница между оттенками цвета более явная. Также можно выставлять и изменять гораздо больше параметров, чем в классе функций «StereoBM». Однако и время создания карты высот с помощью «StereoSGBM» гораздо больше. Но если есть изображения, сделанные на откалиброванную камеру и большая точность не нужна, то вполне подойдет и «StereoBM».

Список литературы

  1. Электронный журнал Habr – [Электронный ресурс] – Режим доступа URL: https://habr.com/ru/post/482776/.
  2. Электронный журнал Habr – [Электронный ресурс] – Режим доступа URL: https://habr.com/ru/post/374213/.
  3. Документация по OpenCV – [Электронный ресурс] – Режим доступа URL: https://docs.opencv.org/master/dd/d53/tutorial_py_depthmap.html.
  4. Документация по OpenCV – [Электронный ресурс] – Режим доступа URL: https://docs.opencv.org/master/d9/dba/classcv_1_1StereoBM.html.
  5. Документация по OpenCV – [Электронный ресурс] – Режим доступа URL: https://docs.opencv.org/4.3.0/d2/d85/classcv_1_1StereoSGBM.html.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *