2015-08-19 3 views
0

Я разработал алгоритм, который соответствует корреспондентским линиям, видимым из разных положений робота.Алгоритм слияния согласованных строк?

Теперь я хочу объединить соответствующие строки в один.

Кто-нибудь знает алгоритм для этой цели?

+1

Является ли алгоритм, который вы разработали исключительно в псевдокоде? Если это на самом деле, отправьте код. –

+0

это в C++, но слишком долго, чтобы его можно было разместить здесь. Меня интересует процедура. Язык - это деталь – ubisum

+0

Проверьте http://stackoverflow.com/help/how-to-ask, в котором упоминается, что вы должны «включать достаточно кода, чтобы другие могли воспроизвести проблему». то есть, пожалуйста, дайте нам отрывок вашего кода. –

ответ

0

Кажется, что вы пытаетесь сделать это мозаикой, но ограничено 2D. Или, по крайней мере, что-то подобное, учитывая только извлеченные функции. Я рассмотрю основную идею о том, как это сделать (как я помню, так или иначе).

  1. Вы извлечь полезные функции в обоих изображениях (стропы)
  2. Вы делаете соответствие функции (ваш сопрягая)
  3. Вы извлечь относительную позиционную информацию о ваших камерах из соответствующих функций. Это позволяет определить преобразование между ними.
  4. Вы превращаетесь одно изображение в перспективе другого или как с другой точки зрения

Так вы говорите, что вы работаете в 2D плоскости, где вы хотите преобразовать в. Если ваши сканы можно считать не добавлением какого-либо 3D-искажения (всегда от одного и того же фона, направленного перпендикулярно плоскости), вам нужно иметь дело только с 2D-преобразованиями.

Чтобы сделать то, что вы называете объединением линий, вам необходимо выполнить шаги 3 и 4 алгоритма мозаики.

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

Для шага 4 вы используете рассчитанное двумерное преобразование и, возможно, предыдущее преобразование, которое было рассчитано для предыдущего изображения (не требуется, если вы соглашаетесь с скомпонованным изображением, aa moasic, на новое изображение вместо последовательных изображений) используйте его на изображении, к которому он применим. Вероятно, только ваши 2D-линии из нового сканирования (а не полного изображения) должны быть преобразованы этим глобальным 2D-преобразованием, чтобы занять свое положение и ориентацию на глобальную ссылку на карту.

Надеюсь, это поможет. Удачи!

+0

спасибо за помощь. На самом деле, я уже прошел все шаги, перечисленные вами. поэтому, учитывая 2 последующих сканирования, я вычислил матрицу трансформаций T для перемещения линий карты из одного сканирования в другое. то, как только строки из обоих сканов находились в одном и том же контрольном кадре, я запустил соответствующие сопоставляемые алгоритмы и вычисленные пары совпадающих строк. моя конечная цель заключается в постепенном восстановлении части среды, видимой роботом по его пути. предположим, что M - это часть уже перестроенной карты, а S - новое сканирование, которое пока не анализируется. I: - экстракт линии в S ... – ubisum

+0

... - использование наименьших квадратов подход к extrimate матрицу преобразования T от S до M - использовать T преобразование строки из S М - корреспондент матча линии - объедините каждую пару корриспондентских строк в один - добавьте непревзойденные строки S в виде новых линий на карте Мои сомнения касаются правильного способа выполнения пенитенциарного шага. Я представил себе, что могу просто игнорировать строки в S, которые нашли совпадение в M, и просто добавить непревзойденные строки к моей части карты, не реконструированной до сих пор. во всяком случае, я не очень уверен в этом. возможно, есть способ объединить строки из пары с совпадающими парами в новую строку. – ubisum

+0

Я предполагаю, что строка представляет собой набор параметров, поэтому использование наименьших квадратов на всех согласованных линиях до сих пор, чтобы обновлять линию карты, было бы способом, который нужен всем строки, которые должны быть сохранены, чтобы обновить «объединенные строки» еще раз, чтобы найти найденные. Другим способом, который требует меньше памяти, является усреднение параметров линии, взвешенных по количеству уже объединенных линий. Поскольку согласованные строки уже считаются достаточно близкими к текущему представлению, среднее усреднение не должно приводить к плохим результатам (например, к усреднению больших положительных и больших отрицательных чисел и получению 0) – FrankM

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