2013-05-09 4 views
2

У меня есть два набора линий, заданных A и B. Начальная и конечная точки всех линий в этих двух наборах известны, и я хочу найти вращение и перевод, который лучше всего подходит множество B на множестве A. Там нет масштабирования:Алгоритм наилучшего соответствия для набора строк на многоугольник

enter image description here

  • Существует не отображение взаимно однозначно. Я считаю, что это исключает алгоритм Кабша, хотя я могу предусмотреть алгоритм грубой силы, который использует это.
  • В наборе B, скорее всего, содержатся частичные сегменты линий в A. Это, скорее всего, содержит довольно малое количество строк.
  • Линии B будут ошибочными - могут быть линии, наблюдаемые, которые не существуют в А.
  • Там может, конечно, быть более чем один из возможных «спички»

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

  • Set A - это «карта» - данные импортируются из импортированного файла dxf.
  • Набор B - это набор наблюдаемых линий.

Я имел взгляд вокруг, например, здесь:

How to align shapes together? (Geometrical Best-Fit Algorithm)

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

Наилучший способ, которым я могу воспринимать на данный момент, - использовать подход, похожий на Хобби, с использованием каждой линии в В вдоль каждой линии в А и имеющих ячейки для этих преобразований/преобразований, которые они представляют. Я еще не закодировал это и не пробовал - вроде хотел бы не изобретать колесо.

Любые идеи и вводят очень ценные.

ответ

0

общее решение А, чтобы извлечь «особенности» из множества А и сравнивая функции с множеством В.

Один пример: Рассмотрим все уникальные углы в множестве А и вычислить различные уникальные пары углов. В вашем примере для множества А возможны только три возможных случая: (0,0), (0,90), (90,0). Упорядочить углы всех линий в наборе B и выполнить совпадение с парами из набора A. Пример: если углы равны 0,5,50,93,129, то линии с углами (0,5), (0,93), (5,93), (50, 129) являются подходящими кандидатами. Когда у вас есть кандидаты, вы можете их отфильтровать.

В зависимости от типа линий, которые у вас есть в наборе A, вы можете извлекать соответствующие функции. Пример. Если все ваши линии перпендикулярны или параллельны, вы можете иметь такие функции, как расстояние между строками.

+0

Hi. Спасибо за ответ. Я думаю, я могу видеть, откуда вы родом, хотя я с самого начала застрял. Я не уверен, как вы получите набор A угловых пар? Что означает, например, (0,0) в вашем примере?
Тогда речь идет о том, что я буду делать дальше. Действительно ли этот подход дает мне возможные совпадения между строками в наборе и, следовательно, эвристику, если хотите, уменьшить пространство поиска, в котором я бросаю алгоритм Кабша (или аналогичный) для решения моего перевода и вращения? – Jon

Смежные вопросы