opencv: Анализ фона и движения. Оптический поток
TRANSCRIPT
![Page 1: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/1.jpg)
с/к Обработка информации, осень 20124. Анализ фона и движения
www.uralvision.blogspot.com [email protected] УрФУ / ИММ УрО РАН
Денис Сергеевич Перевалов
http://people.rit.edu/andpph/photofile-misc/strobe-motion-ta-08.jpg
![Page 2: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/2.jpg)
Анализ фона
Про понятия объект и фон:- в компьютерном зрении предполагается изображение представляет собой 3D сцену, и объектами на изображении являются проекции ближайших и небольгих объектов.А фоном являются в некотором смысле далекие или иногда - очень большие объекты, не влезающие в кадр.
- в психологии эти понятия являются неоднозначными (в этих случаях на изображениях показаны сцены, в которых все объекты имеют примерно одинаковый размер и одинаково удалены).
В компьютерном зрении ставится задача разделения изображения на объекты и фон. То есть требуется вычислить, какие пиксели принадлежат фону, а какие нет.Для чего это нужно: явно зная пиксели, принадлежащие не-фону, то есть пиксели объектов - можно отделять объекты друг от друга, анализировать и распознавать их форму и т.д.
![Page 3: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/3.jpg)
Объект и фон - понятия неоднозначные
![Page 4: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/4.jpg)
Объект и фон - понятия неоднозначные
![Page 5: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/5.jpg)
Объект и фон - понятия неоднозначные
![Page 6: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/6.jpg)
1. Запоминание фона
Запоминаем картинку фона, а затем смотрим отличие кадра с камеры от запомненной картинки.
Более продвинутый метод - "code book", он запоминает яркости фона в каждом пикселе некоторое время, что позволяет справляться с объектами типа открывающихся дверей.
Есть и более сложные алгоритмы.
Проблемы: - быстрое изменение освещения - надо специально учитывать,- тени от объектов часто воспринимаются какне фон, что обычно нежелательно, поэтомутакже надо специально учитывать (путем анализа цвета).
![Page 7: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/7.jpg)
2. Адаптивное обучение
Простой метод, в котором мы считаем фон путем усреднения последних N кадров
const float k = 0.01;back = (1-k) * back + k * image;это фильтр низких частот
Через несколько секунд объект, пришедший в кадр, становится фоном. Для некоторых задач это хорошо.
Плюс - не надо специально строить ситуацию когда в кадре никого нет для запоминания фона.
Есть более сложные алгоритмы автоматического вычисления фона с помощью учета нескольких кадров.
![Page 8: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/8.jpg)
3.Использование данных о глубине
1. Стерео камеры2. Камеры с вычислением времени полета (на основе лазерного дальномера, time of filght cameras)3. Kinect
Дают информацию о расстоянии до каждого пиксела, что позволяет отбросить дальние объекты, осуществив пороговую обработку глубины.
![Page 9: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/9.jpg)
Анализ движения
![Page 10: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/10.jpg)
Разность двух кадров - алгоритм"Детектора движения"1. Пусть image1, image2 - два последовательных кадра с камеры, одноканальных.2. Строим модуль их разностиMat diff;absdiff( image1, image2, diff);3. Осуществляем пороговую обработкуMat bin; //тут будут найдены пикселы, соответствующие областям движенияthreshold( diff, bin, 100 /* порог */, 255, CV_THRESH_BINARY );
![Page 11: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/11.jpg)
Разность двух кадров - алгоритм"Детектора движения"
Данный метод позволяет находить области, к которых произошло движение.
Для анализа направления движения таких объектов - используется понятие оптического потока.
![Page 12: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/12.jpg)
Что такое оптический потокОптический поток (optical flow, optic flow) - это векторное поле явного движения объектов, поверхностей и ребер в визуальной сцене, вызванное относительным движением между наблюдателем (глазом, камерой) и сценой.
http://www.ultimategraphics.co.jp/jp/images/stories/ultimate/BCC/optical.jpg
Обратите внимание: похоже, что точка обзора камеры движется вниз, но в малотекстурированной области поток не находится - так как локально пикселы в окрестностях не меняются
![Page 13: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/13.jpg)
Основные применения оптического потока1. Для определения направления, в котором движутся объекты в кадре.
2. При производстве фильмов - для осуществления плавного морфинга между последовательными кадрами, либо между кадрами, снятыми соседними камерами (наиболее характерно это использовано в фильме "Матрица").
3. Принципиально можно применять в стереозрении - для определения расстояния до объекта с помощью анализа оптического потока кадров, поступающих с двух камер.
![Page 14: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/14.jpg)
Методы вычисления оптического потокаВход: два кадра. Выход - векторное поле ( 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: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/15.jpg)
Методы вычисления оптического потока1. Метод Лукаса-Канаде (Lucas-Kanade)Это локальный метод, так как вычисляет оптический поток в каждом пикселе независимо от значений потока в других пикселях.Это дифференциальный метод - он использует частные производные для оценки.Достоинства: быстро вычисляется.Недостатки: "aperture problem" - на областях с однородной текстурой работает плохо в силу того, что он локальный.Реализован только в C-версии OpenCV, cvCalcOpticalFlowLK.
Поток, наложенный на изображение.Обратите внимание, что внутри ладони поток не найден.
Поток нарисован с шагом в 10 пикселов, функцией line. (Примечание: значения потока сглажены по окрестности для получения более устойчивого результата).
![Page 16: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/16.jpg)
Метод Лукаса-КанадеИмеется: последовательность изображений 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: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/17.jpg)
Метод Лукаса-КанадеДопустим, что движение объектов на изображении происходит непрерывно, и яркость пикселей объектов при этом не меняется. Тогда имеем
Допустим, что перемещение пикселей мало, тогда можно записать разложение в ряд Тейлора:
Подставляя, получим:
![Page 18: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/18.jpg)
Метод Лукаса-Канаде
Здесь (Vx, Vy)- оптический поток, Ix, Iy, It - производные изображения в соответствующих направлениях.
Это уравнение скалярное, а в нем два неизвестных Vx и Vy.Поэтому, оно неразрешимо однозначно. Разные методы нахождения оптического потока по-разному решают эту неоднозначность.
В алгоритме Лукаса-Канаде для разрешения неоднозначности применяется предположение, что в локальной окрестности каждого пикселя значение оптического потока одинаково. Таким образом, можно записать уравнение оптического потока для всех пикселей окрестности и решить полученную систему уравнений методом наименьших квадратов.
Уравнение оптического потока
![Page 19: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/19.jpg)
Метод Лукаса-КанадеА именно, по предположению, для данного пикселя p оптический поток одинаков для пикселей его окрестности q1,...,qn:
Это переопределенная система, которую будем решать методом наименьших квадратов
![Page 20: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/20.jpg)
Метод Лукаса-Канаде
Окончательно, получаем
Формула метода Лукаса-Канаде
(Примечание: для более гладкого результата лучше, чтобы при удалении пикселей от центра окрестностей их вклад в результат уменьшался. Для этого надо на qi накладывать вес, уменьшающийся при удалении их от p. Тогда задача нахождения Vx, Vy будет решаться взвешенным методом наименьших квадратов.)
![Page 21: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/21.jpg)
Методы вычисления оптического потока2. FarnebackЛокальный метод, использующий для расчета аппроксимацию изображения полиномиальной функцией.
Достоинства: заметно более устойчив к проблемы апертуры.
Недостатки: работает заметно медленней Lucas-Kanade, хотя это не очень критично на современных вычислителях.
![Page 22: OpenCV: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/22.jpg)
Методы вычисления оптического потока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: Анализ фона и движения. Оптический поток](https://reader031.vdocuments.site/reader031/viewer/2022012403/5572116a497959fc0b8ef1ad/html5/thumbnails/23.jpg)
Методы вычисления оптического потока3. CLG
"Combining Local and Global"Метод, объединяющий Lucas-Kanade и Horn-Schunk
Сейчас (2010 г.) он и его модификации считаются одними из лучших по соотношению качество / скорость.
Пока не реализован в OpenCV, но можно найти готовые реализации.