vision.PointTracker

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

Видеокадр в виде полутонового или истинного цвета (RGB).

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

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

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

Надежность дорожки для каждой точки, возвращенной как M-by-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(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 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] Tomasi, Карло и Тэкео Кэнэйд. Обнаружение и отслеживание функций точки, кафедры информатики, Университета Карнеги-Меллон, апрель 1991.

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

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

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

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