opencv: Анализ фона и движения. Оптический поток

23
с/к Обработка информации, осень 2012 4. Анализ фона и движения www.uralvision.blogspot.com [email protected] УрФУ / ИММ УрО РАН Денис Сергеевич Перевалов http://people.rit.edu/andpph/photofile-misc/strobe-motion-ta-08.jpg

Upload: denis-perevalov

Post on 05-Aug-2015

4.389 views

Category:

Documents


15 download

TRANSCRIPT

Page 1: OpenCV: Анализ фона и движения. Оптический поток

с/к Обработка информации, осень 20124. Анализ фона и движения

www.uralvision.blogspot.com [email protected] УрФУ / ИММ УрО РАН

Денис Сергеевич Перевалов

http://people.rit.edu/andpph/photofile-misc/strobe-motion-ta-08.jpg

Page 2: OpenCV: Анализ фона и движения. Оптический поток

Анализ фона

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

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

В компьютерном зрении ставится задача разделения изображения на объекты и фон. То есть требуется вычислить, какие пиксели принадлежат фону, а какие нет.Для чего это нужно: явно зная пиксели, принадлежащие не-фону, то есть пиксели объектов - можно отделять объекты друг от друга, анализировать и распознавать их форму и т.д.

Page 3: OpenCV: Анализ фона и движения. Оптический поток

Объект и фон - понятия неоднозначные

Page 4: OpenCV: Анализ фона и движения. Оптический поток

Объект и фон - понятия неоднозначные

Page 5: OpenCV: Анализ фона и движения. Оптический поток

Объект и фон - понятия неоднозначные

Page 6: OpenCV: Анализ фона и движения. Оптический поток

1. Запоминание фона

Запоминаем картинку фона, а затем смотрим отличие кадра с камеры от запомненной картинки.

Более продвинутый метод - "code book", он запоминает яркости фона в каждом пикселе некоторое время, что позволяет справляться с объектами типа открывающихся дверей.

Есть и более сложные алгоритмы.

Проблемы: - быстрое изменение освещения - надо специально учитывать,- тени от объектов часто воспринимаются какне фон, что обычно нежелательно, поэтомутакже надо специально учитывать (путем анализа цвета).

Page 7: OpenCV: Анализ фона и движения. Оптический поток

2. Адаптивное обучение

Простой метод, в котором мы считаем фон путем усреднения последних N кадров

const float k = 0.01;back = (1-k) * back + k * image;это фильтр низких частот

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

Плюс - не надо специально строить ситуацию когда в кадре никого нет для запоминания фона.

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

Page 8: OpenCV: Анализ фона и движения. Оптический поток

3.Использование данных о глубине

1. Стерео камеры2. Камеры с вычислением времени полета (на основе лазерного дальномера, time of filght cameras)3. Kinect

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

Page 9: OpenCV: Анализ фона и движения. Оптический поток

Анализ движения

Page 10: OpenCV: Анализ фона и движения. Оптический поток

Разность двух кадров - алгоритм"Детектора движения"1. Пусть image1, image2 - два последовательных кадра с камеры, одноканальных.2. Строим модуль их разностиMat diff;absdiff( image1, image2, diff);3. Осуществляем пороговую обработкуMat bin; //тут будут найдены пикселы, соответствующие областям движенияthreshold( diff, bin, 100 /* порог */, 255, CV_THRESH_BINARY );

Page 11: OpenCV: Анализ фона и движения. Оптический поток

Разность двух кадров - алгоритм"Детектора движения"

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

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

Page 12: OpenCV: Анализ фона и движения. Оптический поток

Что такое оптический потокОптический поток (optical flow, optic flow) - это векторное поле явного движения объектов, поверхностей и ребер в визуальной сцене, вызванное относительным движением между наблюдателем (глазом, камерой) и сценой.

http://www.ultimategraphics.co.jp/jp/images/stories/ultimate/BCC/optical.jpg

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

Page 13: OpenCV: Анализ фона и движения. Оптический поток

Основные применения оптического потока1. Для определения направления, в котором движутся объекты в кадре.

2. При производстве фильмов - для осуществления плавного морфинга между последовательными кадрами, либо между кадрами, снятыми соседними камерами (наиболее характерно это использовано в фильме "Матрица").

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

Page 14: OpenCV: Анализ фона и движения. Оптический поток

Методы вычисления оптического потокаВход: два кадра. Выход - векторное поле ( fx(x, y), fy(x,y) ) - вектора геометрического сдвига пикселов с первого кадра на второй. (I) Блочные ("наивные" методы) Для каждой точки ищется сдвиг, минимизирующий разность в локальном окне. (II) Дифференциальные (наиболее используемые)Оценка производных по x, y, t. 1. Lucas-Kanade - очень быстрый.2. Farneback - достаточно качественный, но работает медленней3. CLG - очень качественный, но пока не реализован в OpenCV4. Пирамидальный Lucas-Kanade, вычисляющийся только на "точках интереса"5. Horn-Schunk - не очень устойчивый к шумам

(III) На основе дискретной оптимизации (ресурсоемкие) Решение строится с помощью методов min-cut, max-flow, линейного программирования или belief propagation.

Page 15: OpenCV: Анализ фона и движения. Оптический поток

Методы вычисления оптического потока1. Метод Лукаса-Канаде (Lucas-Kanade)Это локальный метод, так как вычисляет оптический поток в каждом пикселе независимо от значений потока в других пикселях.Это дифференциальный метод - он использует частные производные для оценки.Достоинства: быстро вычисляется.Недостатки: "aperture problem" - на областях с однородной текстурой работает плохо в силу того, что он локальный.Реализован только в C-версии OpenCV, cvCalcOpticalFlowLK.

Поток, наложенный на изображение.Обратите внимание, что внутри ладони поток не найден.

Поток нарисован с шагом в 10 пикселов, функцией line. (Примечание: значения потока сглажены по окрестности для получения более устойчивого результата).

Page 16: OpenCV: Анализ фона и движения. Оптический поток

Метод Лукаса-КанадеИмеется: последовательность изображений Ik(x,y) (например, это могут быть кадры с камеры).

Требуется: для каждого кадра вычислить оптический поток, то естьVk(x,y) - векторное поле, которое бы характеризовало сдвиг объектов с Ik на Ik+1.

Будем считать, что пространственные координаты и время x,y,t - меняются непрерывно.Тогда имеем

I( x, y, t ) - входные изображения,

V( x, y, t ) = (Vx( x, y, t ), Vy( x, y, t ) ) - скорость движения, то есть искомый оптический поток в (x,y,t).

Page 17: OpenCV: Анализ фона и движения. Оптический поток

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

Допустим, что перемещение пикселей мало, тогда можно записать разложение в ряд Тейлора:

Подставляя, получим:

Page 18: OpenCV: Анализ фона и движения. Оптический поток

Метод Лукаса-Канаде

Здесь (Vx, Vy)- оптический поток, Ix, Iy, It - производные изображения в соответствующих направлениях.

Это уравнение скалярное, а в нем два неизвестных Vx и Vy.Поэтому, оно неразрешимо однозначно. Разные методы нахождения оптического потока по-разному решают эту неоднозначность.

В алгоритме Лукаса-Канаде для разрешения неоднозначности применяется предположение, что в локальной окрестности каждого пикселя значение оптического потока одинаково. Таким образом, можно записать уравнение оптического потока для всех пикселей окрестности и решить полученную систему уравнений методом наименьших квадратов.

Уравнение оптического потока

Page 19: OpenCV: Анализ фона и движения. Оптический поток

Метод Лукаса-КанадеА именно, по предположению, для данного пикселя p оптический поток одинаков для пикселей его окрестности q1,...,qn:

Это переопределенная система, которую будем решать методом наименьших квадратов

Page 20: OpenCV: Анализ фона и движения. Оптический поток

Метод Лукаса-Канаде

Окончательно, получаем

Формула метода Лукаса-Канаде

(Примечание: для более гладкого результата лучше, чтобы при удалении пикселей от центра окрестностей их вклад в результат уменьшался. Для этого надо на qi накладывать вес, уменьшающийся при удалении их от p. Тогда задача нахождения Vx, Vy будет решаться взвешенным методом наименьших квадратов.)

Page 21: OpenCV: Анализ фона и движения. Оптический поток

Методы вычисления оптического потока2. FarnebackЛокальный метод, использующий для расчета аппроксимацию изображения полиномиальной функцией.

Достоинства: заметно более устойчив к проблемы апертуры.

Недостатки: работает заметно медленней Lucas-Kanade, хотя это не очень критично на современных вычислителях.

Page 22: OpenCV: Анализ фона и движения. Оптический поток

Методы вычисления оптического потокаvoid calcOpticalFlowFarneback( const Mat& prevImg, //Первый кадр, 8-битное одноканальное изображение const Mat& nextImg, //Второй кадр, тип и размер как у prevImg Mat& flow, //Результирующий поток, будет иметь тип CV_32FC2 double pyrScale, //<1, масштаб построения пирамиды. 0.5 int levels, //Число уровней пирамиды 5 int winsize, //Окно усреднения. Чем больше - тем результат //более размытый, но и более устойчивы к шумам 5 int iterations, //Число итераций на каждом уровне пирамиды 3 int polyN, //Размер окна для вычисления аппроксимации //полиномом 7 double polySigma, //параметр гауссиана для сглаживания производных //при построении аппроксимации 1.5 int flags //флаги //OPTFLOW_USE_INITIAL_FLOW - не рекомендую использовать!! //OPTFLOW_FARNEBACK_GAUSSIAN - использовать гауссиан для усреднения //дает более точный результат в ущерб качеству. )

Page 23: OpenCV: Анализ фона и движения. Оптический поток

Методы вычисления оптического потока3. CLG

"Combining Local and Global"Метод, объединяющий Lucas-Kanade и Horn-Schunk

Сейчас (2010 г.) он и его модификации считаются одними из лучших по соотношению качество / скорость.

Пока не реализован в OpenCV, но можно найти готовые реализации.