Почему ни одна функция не отслеживается с помощью KLT-отслеживания в Matlab?

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

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

  • Это проблема с данными (слишком низкое разрешение изображения (240x180 пикселей))?

  • Проблема в выбранных функциях?

Вот два изображения, которые я использую:

Это целевое изображение, для которого у меня есть функции, которые я хочу отслеживатьЭто изображение, на котором я хочу отслеживать точки, найденные в

Это мой код:

img = single(imread('img.png'));
end_img = single(imread('end_img.png'));

coord_first = [24,21;25,97;29,134;37,25;37,55;37,64;38,94;38,103;40,131;41,139;43,14;44,22;44,54;44,63;46,93;46,101;47,111;49,131;49,140;52,166;55,52;62,151;76,51;78,89;81,151;81,165;83,13;92,165;111,18;111,96;155,42;155,62;155,81;155,100;156,129;163,133;168,126;170,40;170,65;172,26;173,134;174,59;174,84;174,103;174,116;175,73;178,97;186,142;186,149;190,119;190,132;194,75;209,99;210,42;210,66;212,133;212,152;215,61;215,79;218,119];

% display of the target image and all the features I want to track
figure
imshow(img,[]), 
colormap gray
hold on
plot(coord_first(:,1), coord_first(:,2), 'r*');

% point tracker creation
% the paramters reported here are the default ones
pointTracker = vision.PointTracker('MaxIterations', 30, 'BlockSize', [31,31]);
% point tracker initialization
initialize(pointTracker,coord_first,img);

% actual tracking
[coord_end, point_validity] = step(pointTracker, end_img);

% display of all the correctly tracked featrures
figure
imshow(end_img,[]), 
colormap gray
hold on
plot(coord_end(point_validity,1), coord_end(point_validity,2), 'r*');

2 ответа

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

Проблема состоит в том, что изображения, представленные на входе, должны иметь значения в градациях серого в [0, 1], а не в [0, 255] (как я делал).

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

Проверьте содержимое point_validity, Если все элементы points_validity ложны, то вы бы не увидели никаких точек. Если это так, то следующий вопрос - почему точки не отслеживались.

Для изображения такого размера попробуйте установить 'NumPyramidLevels' до 1.

Другие вопросы по тегам