Как я могу отсортировать матрицу координат на основе расстояния между точками в другой матрице координат в Matlab? - PullRequest
0 голосов
/ 12 июня 2018

Я использую встроенную функцию Matlab под названием Procrustes, чтобы увидеть поворот вращения и масштабирование между двумя изображениями.Но я просто использую координаты самых ярких точек на изображении и вращаю эти координаты вокруг центра изображения.Procrustes сравнивает две матрицы и дает вам вращение, перевод и масштаб.Тем не менее, procrustes работает правильно, только если матрицы находятся в том же порядке для сравнения.

Мне дано изображение и отдельная матрица координат сравнения.Конечная цель состоит в том, чтобы найти, насколько изображение было повернуто, переведено и масштабировано по сравнению с координатной матрицей.Я могу просто использовать Procrustes для этого, но мне нужно правильно упорядочить координаты, найденные на изображении, чтобы соответствовать порядку в матрице координат сравнения.Я думал сравнить расстояние между всеми возможными комбинациями точек в матрице координат и сравнить его с координатами, которые я нахожу на рисунке.Я просто не знаю, как написать этот код из-за того, что если будет n координат, будет n!возможные комбинации.

1 Ответ

0 голосов
/ 12 июня 2018

Просто поиск кратчайшего расстояния не так уж и сложен.

A = rand(1E4,2);
B = rand(1E4,2);
tic
idx = nan(1,1E4);
for ct = 1:size(A,1)
    d = sum((A(ct,:)-B).^2,2);
    idx(ct) = find(d==min(d));
end
toc

plot(A(1:10,1),A(1:10,2),'.r',B(idx(1:10),1),B(idx(1:10),2),'.b')

занимает пол секунды на моем ПК.

Проблемы могут начаться, если две точки в наборе A сопоставлены с одним и тем же местоположением в наборе B.

length(unique(idx))==length(idx)

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

Более простой метод (но с большей ошибкой)склонен) - удалить согласованную точку из набора B.

...