Нужен лучший алгоритм для поиска сопоставления между 2 наборами точек с минимальным расстоянием

Проблема: у меня есть две перекрывающиеся 2D-формы, A и B, каждая из которых имеет одинаковое количество пикселей, но отличается по форме. Некоторая часть фигур перекрывается, и есть некоторые части каждой, которые не перекрываются. Моя цель - переместить все неперекрывающиеся пиксели в форме A на неперекрывающиеся пиксели в форме B. Поскольку количество пикселей в каждой форме одинаково, я смогу найти отображение 1 к 1 для пикселей. Ограничение состоит в том, что я хочу найти отображение, которое минимизирует общее расстояние, пройденное всеми перемещенными пикселями.

Грубая сила: метод грубой силы для решения этой проблемы, очевидно, исключен, поскольку мне пришлось бы вычислить общее расстояние всех возможных сопоставлений, которых, как мне кажется, существует n! (где n - количество неперекрывающихся пикселей в одной форме), умноженное на вычисление расстояния для каждой пары точек в отображении, n, что в сумме дает O (n * n!) или что-то подобное.

Отслеживание с возвратом. Единственное «лучшее» решение, которое я мог придумать, - это использовать отслеживание с возвратом, при котором я мог бы отслеживать текущий минимум на данный момент и в любой момент, когда я оцениваю определенное сопоставление, если я достигнув или превзойдя этот минимум, я перехожу к следующему отображению. Даже это не поможет, чем O (n!).

Есть ли способ решить эту проблему с разумной сложностью?

Также обратите внимание, что «очевидный» подход простого сопоставления точки с ближайшим совпадающим соседом не всегда дает оптимальное решение.

Более простой подход? В качестве второстепенного вопроса, если приемлемого решения не существует, одна из возможностей может заключаться в том, чтобы разделить каждую неперекрывающуюся секцию на небольшие области и сопоставить эти области, значительно уменьшив количество сопоставления. Чтобы рассчитать расстояние между двумя регионами, я бы использовал центр масс (среднее положение пикселей в регионе). Однако здесь возникает проблема, как мне следует делать разбиение, чтобы получить почти оптимальный ответ.

Любые идеи приветствуются !!


person MahlerFive    schedule 15.02.2009    source источник
comment
Просто любопытно, а есть ли это в практическом применении?   -  person Die in Sente    schedule 15.02.2009
comment
Да, я пытаюсь разработать новый алгоритм распознавания форм. Это будет частью алгоритма, который определяет расстояние между двумя фигурами.   -  person MahlerFive    schedule 15.02.2009


Ответы (3)


Это проблема минимального соответствия, и вы правы, что в целом это сложная проблема. Однако для случая двумерного евклидова двустороннего минимального соответствия он разрешим в приближении к O (n²) (см. ссылку).

Для быстрых приближений FryGuy находится на правильном пути с имитацией отжига. Это один из подходов.

Также ознакомьтесь с алгоритмами приближения для двудольного и недвудольного сопоставления в плоскости для O ((n / ε) ^ 1.5 * log ^ 5 (n)) (1 + ε) -рандомизированной схемы аппроксимации.

person Imran    schedule 15.02.2009

Вы можете использовать для этого имитацию отжига. Начните с назначения A [x] -> B [y] для каждого пикселя случайным образом и вычислите сумму квадратов расстояний. Затем случайным образом поменяйте местами пару отображений x ‹-> y. Затем выберите принять это с вероятностью Q, где Q выше, если новое отображение лучше, и со временем стремится к нулю. См. Статью в Википедии для лучшего объяснения.

person FryGuy    schedule 15.02.2009

  1. Сортировка пикселей в форме A: в порядке возрастания ординат «x», а затем «y».
  2. Сортировка пикселей в форме B: в порядке убывания «x» и затем увеличения «y»

Сопоставьте пиксели с тем же индексом: в отсортированном списке первый пиксель в A будет отображаться на первый пиксель в B. Разве это не то сопоставление, которое вы ищете?

person Sesh    schedule 15.02.2009
comment
Не совсем, возьмите этот пример, где я сортирую, как вы говорите .. A: (0,0), (1,0) B: (1,1), (0,1) В этом примере мое общее расстояние составляет 2 * sqrt (2) поскольку это sqrt (2) расстояние от (0,0) до (1,1) и от (1,0) до (0,1), но оптимальное общее расстояние равно 2, (0,0) с (0,1) и с (1,0) по (1,1). - person MahlerFive; 15.02.2009