Панорама

Содержание лекции:

1. Что такое панорама?

2. Выбор ключевых точек

3. Сопоставление ключевых точек

4. Склейка изображений


1. Что такое панорама?

Панорама или панорамное изображение - это изображение с углом обзора значительно превышающим угол обзора для изображения, снятого на обычную камеру. Обычно при этом подразумевается угол обзора по горизонтали, но также часто встречаются сферические панорамы, напр. в YouTube 360 или Google Maps.

Области применения склейки изображения

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

  1. Создание панорамных снимков и видео.
  2. Склейка текста: снимки газет/иероглифов на стенах пирамид.
  3. Стабилизация изображения: из нескольких снимков создаётся один стабилизированный.
  4. Медицинские снимки, напр. для получения единого снимка для всего тела на основе снимков отдельных частей тела.
  5. Повышение разрешения изображения, аналогично стабилизации изображения - путём смешивания пикселей с отдельных изображений создаётся одно изображение в более высоком разрешении.
  6. Удаление/добавление объектов - происходят за счёт наложения части одного кадра на другой, при этом важно, чтобы линия, по которой выполняется склейка не была заметна.

Процесс создания панорамы

Рассмотрим процесс создания панорамы, который также называют Image или Panorama Stitching, склейкой или сшиванием изображений.

Упрощённое представление процесса

В упрощённом представлении процесс создания панорамы состоит из 4 этапов:

  1. Поиск ключевых точек на всех склеиваемых изображениях. Далее рассмотрим, какие есть варианты выбора ключевых точек.

2. Сопоставление ключевых точек м/у изображениями. Т. е. выполняется поиск схожих по характеристикам точек на двух изображениях для сопоставления.

3. Выполнение склейки. Как уже ранее говорил, важно, чтобы линия склейки была незаметной.

4. Обрезка результата. Как вы могли заметить, после склейки получаются пустые области и для получения завершённой панорамы выделяется наибольшая прямоугольная часть изображения.

2. Выбор ключевых точек

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

Наиболее популярным методом для выбора ключевых точек является метод SIFT. Это связано с тем, что данный метод устойчив к различным видам искажений одних и тех же участков на разных изображениях. Он:

  1. Устойчив к повороту - например, камера немного наклонилась вбок от одного снимка к другому.
  2. Устойчив к изменению освещения - например, неравномерному освещению с разных сторон объекта или в случае, когда матрица камеры немного осветлили или затемнила изображение в зависимости от интенсивности солнечного света.
  3. Устойчив к небольшим сдвигам - например, если при развороте камера немного сдвинулась.


Стоит сказать, что речь идёт о небольших изменениях, то есть если объект развернуть на 180 градусов, здесь метод может по-разному интерпретировать признаки.

Ближайшими конкурентами метода SIFT можно назвать методы SURF и ORB.

Метод SURF устойчив только к повороту, при этом он работает быстрее метода SIFT.

А метод ORB ещё менее устойчив к изменениям и ещё быстрее. Напр. этот метод подходит для склейки документов.

SIFT

Посмотрим ближе, как работает метод SIFT. Вообще SIFT означает Scale-invariant feature transform, что переводится как масштабно-инвариантная трансформация признаков.

SIFT: процесс вычисления дескрипторов

Процесс вычисления признака с помощью SIFT состоит из 4 этапов:

  1. Детектор DoG/Difference of Gaussians: определение масштаба и поворота. С помощью детектора мы получаем кружочки или блобы, которые охватывают наиболее выделяющиеся фрагменты изображения. Подробнее о том, как работает детектор DoG можете ознакомиться самостоятельно.
  2. Далее для блоба выполняется определение основного направления градиента. Т. е. определяется направление изменения насыщенности цвета или освещения, после чего выполняется разворачивание блоба так, чтобы направление градиенте указывало вверх. Так проще сравнивать блобы между собой.
  3. Затем выбирается соответствующая для блоба прямоугольная окрестность.
  4. После чего прямоугольные окрестности приводятся к единому размеру.


3. Сопоставление ключевых точек

Методы для сопоставления признаков/ключевых точек:

RANSAC/RANdom SAmple Consensus:

  1. Позволяет получить результат быстрее, чем полный перебор.
  2. Позволяет игнорировать т. н. выбросы/outliers, шум.
  3. Результат случайный, т. е. выполнив дважды на одном наборе данных можно получить разный результат.

Основные альтернативы:

  1. Модификации метода RANSAC.
  2. Полный перебор: может требовать значительно больше времени, в зависимости от кол-ва признаков.

RANSAC

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

Процесс применения RANSAC

Процесс применения RANSAC можно разбить на 4 этапа:

  1. Сначала нужно выбрать 2 случайных точки. При использовании RANSAC для SIFT 2 случайные точки выбираются в соответствии с 2 парами совпавших точек.
  2. Затем нужно провести линию через выбранные точки.
  3. Затем нужно посчитать кол-во точек на указанном расстоянии от линии - т. н. инлаеров/inliers. Точки на большем расстоянии будут называться выбросами или outliers.
  4. Далее нужно повторить действия N раз, где N выбирается произвольно, и наконец выбрать наилучшее сочетание 2 точек, т. е. такое сочетание, для которого количество инлаеров будет наибольшим.

4. Склейка изображений

Склейка изображений

Последним шагом создания панорамы является склейка изображений.

Склейку изображений также можно разделить на 4 этапа:

  1. Предварительная обработка: андисторсия.
  2. Аффинные преобразования: перенос, масштаб, поворот, сдвиг.
  3. Проективные преобразования/гомография.
  4. Сглаживание/blend.

5. Примеры готовых функций на OpenCV

Функции OpenCV для создания панорамы

Рассмотрим готовые функции OpenCV для создания панорамы.

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

Функция Stitcher_create:

stitcher = cv2.Stitcher_create()

Метод stitch:

(status, stitched) = stitcher.stitch(images)

Спецификация функции Stitcher_create

Stitcher_create([, mode]) -> retval

mode - режим склейки:

  1. cv2.STITCHER_PANORAMA - панорамный снимок.
  2. cv2.STITCHER_SCANS - сканы документов.

retval - объект класса Stitcher.

Спецификация метода stitch

stitch(images[, pano]) -> retval, pano

images - массив изображений

retval - результат склейки, 0 в случае успешной склейки

pano - результирующее изображение

Препятствия при создании панорамы

  1. Дисторсия.
  2. Разница в освещении.
  3. Различные точки съёмки.



Практическое задание:
Из представленных примеров изображений произвести склейку в одно изображение


Домашнее задание:
Подготовить собственный набор изображений (минимум 3 изображения) и склеить из них панораму
* Подготовить изображения с текстом (минимум 3 изображения) и склеить из них “сканирование” текста (по желанию)

Завершить и продолжить  
Обсуждение

0 Комментарии