видение. PointTracker

Отследите точки в видео с помощью алгоритма Kanade-Lucas-Tomasi (KLT)

Описание

Объект средства отслеживания точки отслеживает набор точек с помощью Kanade-Lucas-Tomasi (KLT), отслеживающего функцию алгоритма. Можно использовать средство отслеживания точки для видео стабилизации, оценки движения камеры и объектного отслеживания. Это работает особенно хорошо на отслеживание объектов, которые не изменяют форму и на тех, которые показывают визуальную структуру. Средство отслеживания точки часто используется для краткосрочного отслеживания в качестве части большей среды отслеживания.

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

Отслеживать набор точек:

  1. Создайте объект vision.PointTracker и установите его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

pointTracker = vision.PointTracker
pointTracker = vision.PointTracker(Name,Value)

Описание

пример

pointTracker = vision.PointTracker возвращается средство отслеживания точки возражают, что отслеживает набор точек в видео.

pointTracker = vision.PointTracker(Name,Value) свойства наборов с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в кавычки. Например, pointTracker = vision.PointTracker('NumPyramidLevels',3)

Инициализируйте процесс отслеживания:

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

initialize(pointTracker,points,I) инициализирует точки, чтобы отследить и устанавливает начальный кадр видео. Начальные местоположения points, должен быть M-by-2 массив [x y] координаты. Начальный кадр видео, I, должен быть 2D шкалой полутонов или изображением RGB и должен быть одного размера и тип данных, когда кадры видео передали методу step.

detectFASTFeatures, detectSURFFeatures, detectHarrisFeatures и функции detectMinEigenFeatures являются немногими из многих способов получить начальные точки для отслеживания.

Свойства

развернуть все

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

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Количество уровней пирамиды, заданных как целое число. Реализация средства отслеживания точки алгоритма KLT использует пирамиды изображений. Средство отслеживания генерирует пирамиду изображений, где каждый уровень снижен в разрешении фактором два по сравнению с предыдущим уровнем. При выборе уровня пирамиды, больше, чем 1, позволяет алгоритму отследить точки на нескольких уровнях разрешения, запускающегося на самом низком уровне. Увеличение числа уровней пирамиды позволяет алгоритму обрабатывать большие смещения точек между кадрами. Однако стоимость вычисления также увеличивается. Рекомендуемые значения между 1 и 4.

Каждый уровень пирамиды формируется путем субдискретизации предыдущего уровня фактором два по ширине и высота. Средство отслеживания точки начинает отслеживать каждую точку на самом низком уровне разрешения и продолжает отслеживать до сходимости. Объект распространяет результат того уровня к следующему уровню как исходное предположение местоположений точки. Таким образом отслеживание усовершенствовано с каждым уровнем до оригинального изображения. Используя пирамиду уровни позволяют средству отслеживания точки обрабатывать большие пиксельные движения, которые могут включить расстояния, больше, чем размер окружения.

Прямой обратный порог ошибок, заданный как скаляр. Если вы устанавливаете значение к меньше, чем inf, средство отслеживания отслеживает каждую точку от до текущего кадра. Это затем отслеживает те же точки назад к предыдущему кадру. Объект вычисляет двунаправленную ошибку. Это значение является расстоянием в пикселях от исходного местоположения точек к итоговому местоположению после обратного отслеживания. Соответствующие вопросы рассматриваются недопустимые, когда ошибка больше, чем набор значений для этого свойства. Рекомендуемые значения между пикселями 3 и 0.

Используя двунаправленную ошибку эффективный способ устранить точки, которые не могли быть надежно прослежены. Однако двунаправленная ошибка требует дополнительного вычисления. Когда вы устанавливаете свойство MaxBidirectionalError на inf, объект не вычисляет двунаправленную ошибку.

Размер окружения вокруг каждой точки, прослеживаемой, заданной как двухэлементный вектор, [height, width]. height и width должны быть нечетными целыми числами. Это окружение задает область для пространственного вычисления матрицы градиента. Минимальное значение для BlockSize [5 5]. При увеличении размера окружения, увеличивает время вычисления.

Максимальное количество поисковых итераций для каждой точки, заданной как целое число. Алгоритм KLT выполняет итеративный поиск нового местоположения каждой точки до сходимости. Как правило, алгоритм сходится в 10 итерациях. Это наборы свойств предел на количестве поисковых итераций. Рекомендуемые значения между 10 и 50.

Использование

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить Систему object™ алгоритм. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

[points,point_validity] = pointTracker(I)
[points,point_validity,scores] = pointTracker(I)
setPoints(pointTracker,points)
setPoints(pointTracker,points,point_validity)

Описание

пример

[points,point_validity] = pointTracker(I) отслеживает точки во входном кадре, I.

[points,point_validity,scores] = pointTracker(I) дополнительно возвращает счет уверенности к каждой точке.

setPoints(pointTracker,points) устанавливает точки для отслеживания. Функция устанавливает M-by-2 массив points [x y] координаты с точками отслеживать. Можно использовать эту функцию, если точки должны быть повторно обнаружены, потому что слишком многие из них были потеряны во время отслеживания.

setPoints(pointTracker,points,point_validity) дополнительно позволяет вам отметить точки или как допустимые или как недопустимые. Вход логический векторный point_validity длины M, содержит истинное или ложное значение, соответствующее валидности точки, которая будет прослежена. Длина M соответствует числу точек. Ложное значение указывает на недопустимую точку, которая не должна быть прослежена. Например, можно использовать эту функцию с функцией estimateGeometricTransform, чтобы определить преобразование между местоположениями точки в предыдущих и текущих кадрах. Можно отметить выбросы как недопустимые.

Входные параметры

развернуть все

Кадр видео, заданный как полутоновый или истинный цвет (RGB).

Выходные аргументы

развернуть все

Отслеженные точки, возвращенные как M-by-2 массив [x y] координаты, которые соответствуют новым местоположениям точек во входном кадре, I.

Надежность дорожки для каждой точки, возвращенной как M-by-1 логический массив. Точка может быть недопустимой по нескольким причинам. Точка может стать недопустимой, если она падает за пределами изображения. Кроме того, это может стать недопустимым, если пространственная матрица градиента, вычисленная в ее окружении, сингулярна. Если двунаправленная ошибка больше, чем порог MaxBidirectionalError, это условие может также высказать недопустимое мнение.

Счет уверенности между 0 и 1, возвращенным как M-by-1 массив. Значения соответствуют степени подобия между окружением вокруг предыдущего местоположения и новым местоположением каждой точки. Эти значения вычисляются как функция суммы различий в квадрате между предыдущими и новыми окружениями. Самая большая уверенность отслеживания соответствует счету идеальной пары 1.

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

initializeИнициализируйте кадр видео и точки, чтобы отследить
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

развернуть все

Создайте Системные объекты для чтения и отображения видео и для рисования ограничительной рамки объекта.

videoFileReader = vision.VideoFileReader('visionface.avi');
videoPlayer = vision.VideoPlayer('Position',[100,100,680,520]);

Считайте первый кадр видео, который содержит объект, задайте область.

objectFrame = videoFileReader();
objectRegion = [264,122,93,93];

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

фигура; imshow (objectFrame);

objectRegion=round (getPosition (imrect))

Покажите начальный кадр с красной ограничительной рамкой.

objectImage = insertShape(objectFrame,'Rectangle',objectRegion,'Color','red');
figure;
imshow(objectImage);
title('Red box shows object region');

Обнаружьте точки интереса в объектной области.

points = detectMinEigenFeatures(rgb2gray(objectFrame),'ROI',objectRegion);

Отобразите обнаруженные точки.

pointImage = insertMarker(objectFrame,points.Location,'+','Color','white');
figure;
imshow(pointImage);
title('Detected interest points');

Создайте объект средства отслеживания.

tracker = vision.PointTracker('MaxBidirectionalError',1);

Инициализируйте средство отслеживания.

initialize(tracker,points.Location,objectFrame);

Считайте, отследите, точки отображения и результаты в каждом кадре видео.

while ~isDone(videoFileReader)
      frame = videoFileReader();
      [points,validity] = tracker(frame);
      out = insertMarker(frame,points(validity, :),'+');
      videoPlayer(out);
end

Выпустите видео читателя и проигрыватель.

release(videoPlayer);
release(videoFileReader);

Ссылки

[1] Лукас, Брюс Д. и Тэкео Кэнэйд. “Итеративный Регистрационный Метод Изображений с Приложением к Видению Стерео”, Продолжения 7-й Международной Объединенной Конференции по Искусственному интеллекту, апрель 1981, стр 674–679.

[2] Tomasi, Карло и Тэкео Кэнэйд. Обнаружение и отслеживание функций точки, кафедры информатики, Университета Карнеги-Меллон, апрель 1991.

[3] Ши, Джиэнбо и Карло Томази. “Хорошие Функции, чтобы Отследить”, Конференция по IEEE по Компьютерному зрению и Распознаванию образов, 1994, стр 593–600.

[4] Kalal, Зденек, Krystian Mikolajczyk и Иржи Матас. “Прямая обратная Ошибка: Автоматическое обнаружение Отслеживания Отказов”, Продолжения 20-й Международной конференции по вопросам Распознавания образов, 2010, страницы 2756-2759, 2010.

Расширенные возможности

Представленный в R2012b