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

Post on 05-Aug-2015

4.396 Views

Category:

Documents

15 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

www.uralvision.blogspot.com perevalovds@gmail.com УрФУ / ИММ УрО РАН

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

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

Анализ фона

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Методы вычисления оптического потокаВход: два кадра. Выход - векторное поле ( 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.

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

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

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

Метод Лукаса-КанадеИмеется: последовательность изображений 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).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Методы вычисления оптического потока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 - использовать гауссиан для усреднения //дает более точный результат в ущерб качеству. )

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

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

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

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

top related