vision.PointTracker

Отследите точки в видео с помощью алгоритма Канаде-Лукаса-Томази (KLT)

Описание

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

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

Чтобы отследить набор точек:

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

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

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

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, должно быть 2-D полутоновым или RGB изображением и должно быть такого же размера и типа данных, как и видеокадры, переданные в step способ.

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

Свойства

расширить все

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

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

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

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

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

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

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

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

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

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

Описание

пример

[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 функция для определения преобразования между местоположениями точек в предыдущей и текущей системах координат. Можно отметить выбросы как недопустимые.

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

расширить все

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

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

расширить все

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

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

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

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

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

objectFrame = readFrame(videoReader);
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(im2gray(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 hasFrame(videoReader)
      frame = readFrame(videoReader);
      [points,validity] = tracker(frame);
      out = insertMarker(frame,points(validity, :),'+');
      videoPlayer(out);
end

Отпустите видеоплеер.

release(videoPlayer);

Ссылки

[1] Лукас, Брюс Д. и Такео Канаде. «Итеративный метод регистрации изображений с приложением к стерео видению», Труды 7-й Международной совместной конференции по искусственному интеллекту, апрель 1981, стр. 674-679.

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

[3] Ши, Цзяньбо и Карло Томази. «Хорошие функции для отслеживания», IEEE Conference on Компьютерное Зрение and Pattern Recognition, 1994, pp. 593-600.

[4] Калал, Зденек, Крыстиан Миколайчик и Иржи Матас. «Прямая-обратная ошибка: автоматическое обнаружение отказов в отслеживании», Труды 20-й Международной конференции по распознаванию шаблона, 2010, стр. 2756-2759, 2010.

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

.
Введенный в R2012b