Я делаю vlfeat в Matlab, и я слежу за этим вопросом -are">здесь.
Ниже приведены мои простые тестовые изображения:
Левое изображение:
Правое изображение:
Я провел здесь простой тест с двумя простыми изображениями (правое изображение — это просто повернутая версия левого), и я получил соответствующий результат:
Это работает, но у меня есть еще одно требование: сопоставить точки SIFT двух изображений и показать их, например:
Я понимаю, что vl_ubcmatch возвращает 2 массива совпадающих индексов, и не проблема сопоставить их, какая точка идет к какой точке на двух изображениях. Однако в настоящее время я застрял в процедуре Matlab. Я нашел это. Но это работает только в том случае, если сюжет остается таким. Когда вы добавляете изображение в подзаголовок, размер изменяется, а нормализация не удалась.
Вот мой код: (im и im2 — изображения. f, d и f2, d2 — кадры и дескрипторы из функции vl_sift из 2-х изображений соответственно)
[matches score] = vl_ubcmatch(d,d2,threshold);%threshold originally is 1.5
if (mode >= 2)%verbose 2
subplot(211);
imshow(uint8(im));
hold on;
plot(f(1,matches(1,:)),f(2,matches(1,:)),'b*');
subplot(212);
imshow(uint8(im2));
hold on;
plot(f2(1,matches(2,:)),f2(2,matches(2,:)),'g*');
end
if (mode >= 3)%verbose 3
[xa1 ya1] = ds2nfu( f(1,matches(1,:)), f(2,matches(1,:)));
[xa2 ya2] = ds2nfu( f2(1,matches(2,:)), f2(2,matches(2,:)));
for k=1:numel(matches(1,:))
xxa1 = xa1(1, k);
yya1 = ya1(1, k);
xxa2 = xa2(1, k);
yya2 = ya2(1, k);
annotation('line',[xxa1 xxa2],[yya1 yya2],'color','r');
end
end
Приведенный выше код дает следующее:
Я думаю, что подзаговор - не лучший способ пойти на что-то подобное. Есть ли лучший метод для этого в Matlab? Если возможно, я хочу что-то вроде пустой панели, на которой я могу рисовать свое изображение, свободно рисовать линии и свободно масштабировать, точно так же, как рисовать 2D-игры в стиле OpenGL.
imshow([im imresize(im2, size(im));
(ссылка на изменение размера). Но я думаю, вы уже подумали об этом... - person plesiv   schedule 09.11.2012