2009-06-21 2 views
5

Мне нужно оценить, совпадают ли два набора трехмерных точек (игнорируя переводы и вращения) путем нахождения и сравнения правильного геометрического хэша. Я провел несколько исследований в области геометрических методов хэширования, и я нашел пару алгоритмов, которые, как правило, усложняются «требованиями к зрению» (например, от 2d до 3d, окклюзами, тенями и т. Д.).Сравните трехмерные структуры

Более того, мне бы очень хотелось, чтобы, если две геометрии немного отличаются друг от друга, хеши тоже не очень разные.

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

Спасибо

+0

Я знаю некоторые способы грубой силы для этого, хочу узнать, есть ли еще более простой способ. – stevedbrown

+2

Интересная проблема. То, как я решаю проблему, если бы я просто проверял одинаковые наборы, было бы найти две самые отдаленные точки и сделать ось x, а затем найти самую удаленную точку от этой оси и сделать нормалью от оси x до это указывает на ось y. Но это может легко потерпеть неудачу для «похожих» множеств. – Nosredna

+0

@Nosredna: такая нормализация та же самая, что я нашел в статье о видении робота. Единственное отличие состоит в том, что он оценивается для каждой пары точек, потому что вы можете иметь окклюзии. Как только вы нормализуете и получите все пары, вы можете квантовать и оценивать сходство, используя метод подсчета голосов, чтобы согласиться, если все будет правильно соответствовать. –

ответ

0

Это, как я хотел бы сделать это:

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

Чтобы сравнить два набора, если вам не нужно заранее сохранять результаты хэширования, просто примените свой любимый алгоритм сравнения к наборам точек шага 3. Это может быть, например, вычисление расстояния между двумя наборами ,

Я не уверен, могу ли я рекомендовать вам алгоритм для шага 4, так как кажется, что ваши требования противоречивы. Все, что называется хешированием, как правило, обладает тем свойством, что небольшое изменение ввода приводит к очень разному выходу. Во всяком случае, теперь я уменьшил проблему до массива чисел, поэтому вы должны уметь разбираться.

[*] Если две или три оси совпадают с выбранными координатами с помощью некоторых других средств, например. как самое длинное расстояние. Но это чрезвычайно редко для случайных точек.

+0

Это алгоритм, который я использую прямо сейчас. Главный недостаток заключается в том, что настройки, которые являются «почти одинаковыми», производят очень разные хэши, что вызывает раздражение. –

+0

. Затем вы можете применить к хэшированию другую «хэш-функцию». –

1

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

погуглить

least squares rotation translation 

поворачивает вверх довольно здание несколько статей по этой методике (например "Least-Squares Estimation of Transformation Parameters Between Two Point Patterns").

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

+1

Это решает неправильную проблему. Он начинается с известного соответствия каждой вершины соответствующей вершине другого объекта. Затем он находит преобразования между объектами. В случае отправителей вы не знаете каких-либо совпадающих вершин, чтобы начать с ... если вы это сделали, проблема становится легкой. – SPWorley

+0

ОК, извините, процитированная статья была плохим примером, поскольку она предполагает соответствие точечного порядка.Но оценка «близости», не зависящая от точечного упорядочения, все еще может быть определена и приведена численная оптимизация (см. Обновление выше). – timday

+0

Да, это хорошее решение другой проблемы. Нет, я не думаю, что вы можете легко получить от своего обновления. Попробуйте формализовать вопрос, который вы задаете, и вы увидите проблему (которую вы можете решить, но если вы это сделаете, сообщите об этом!) –

1

Там есть куча публикаций SIGGRAPH, которые могут оказаться полезными для вас.

например. "Глобальная нежесткое Выравнивание 3-D сканов" Браун и Rusinkiewicz:

http://portal.acm.org/citation.cfm?id=1276404

Общего поиск, который вы можете получить начала:

http://scholar.google.com/scholar?q=siggraph+point+cloud+registration

2

Ваша первая мысль может быть пытаться найти ротацию, которая отображает один объект в другой, но это очень сложная тема ... и на самом деле не нужна! Вы не спрашиваете, как лучше всего соответствовать двум, вы просто спрашиваете, одинаковы они или нет.

Характеризуйте свою модель по списку всех расстояний между точками. Отсортируйте список на этом расстоянии. Теперь сравните список для каждого объекта. Они должны быть идентичными, поскольку на переводные интервалы не влияет перевод или ротация.

три вопроса:

1) Что делать, если количество точек велико, что это большой список пар (N * (N-1)/2). В этом случае вы можете выбрать только самые длинные, или даже лучше, сохранить 1 или 2 самых длинных для каждой вершины, чтобы каждая часть вашей модели имела некоторый вклад.Однако удаление информации, подобной этой, изменяет проблему на вероятностную и не детерминированную.

2) Для определения формы, а не ребер используются только вершины. Это может быть хорошо (и на практике будет), но если вы ожидаете иметь цифры с одинаковыми вершинами, но разные соединительные края. Если это так, сначала проверьте соответствие вершины. Если это пройдет, назначьте уникальную маркировку каждой вершине, используя это отсортированное расстояние. Самый длинный край имеет две вершины. Для каждой из THOSE вершин найдите вершину с самым длинным (оставшимся) ребром. Обозначьте первую вершину 0 и следующую вершину 1. Повторитесь для других вершин в порядке, и у вас будут назначены теги, которые не зависят от сдвига и вращения. Теперь вы можете точно сравнить топологии ребер (проверьте, что для каждого ребра в объекте 1 между двумя вершинами имеется соответствующее ребро между теми же двумя вершинами в объекте 2). Примечание: это начинает становиться действительно сложным, если у вас есть несколько одинаковых интервалов расстояния, и поэтому вы необходимо сопоставить тай-брейк, чтобы задания были стабильными и уникальными.

3) Существует вероятность того, что две фигуры имеют одинаковые популяции длины ребер, но они не идентичны. Это верно, когда один объект является зеркальным отображением другого. Это довольно раздражает, чтобы обнаружить! Один из способов сделать это - использовать четыре некомпланарных точки (возможно, те, которые помечены от 0 до 3 с предыдущего шага) и сравнить «ручность» системы координат, которую они определяют. Если ручность не соответствует, объекты являются зеркальными изображениями.

Обратите внимание, что список расстояний дает вам легкое отклонение неидентичных объектов. Он также позволяет добавлять «нечеткое» принятие, допуская некоторую ошибку в заказах. Возможно, использование среднеквадратичной разницы между двумя списками как «мера подобия» будет хорошо работать.

Редактировать: Похоже, ваша проблема - облако точек без краев. Тогда раздражающая проблема краевого соответствия (№ 2) даже не применяется и может быть проигнорирована! Вы все равно должны быть осторожны с проблемой зеркального изображения № 3.

+1

очень, очень возможно иметь две сетки, определяющие совершенно разные формы, и все же имеющих очень сходные промежуточные расстояния. это не является надежным способом генерации представлений изображений. см. также гистограммы формы: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.9487 – Autoplectic

+0

@auto, да, действительно, если списки расстояний не идентичны, у вас может быть очень разная точка наборы. Но вопрос, который задают, - это способ определить идентичные множества. «Подобные объекты имеют похожие хэши» - это просто хорошая эвристическая бонус, но явно не гарантия. Кстати, хорошая ссылка, я использовал эту бумагу много лет назад! – SPWorley

+0

Найденный ниже алгоритм автоматически определит поворот, который преобразует один набор в другой как побочный продукт, если они такие же или похожие (за исключением некоторых редких случаев). –

1
  1. Если вы хотите оценки жесткой преобразования между двумя похожими облаками точки вы можете использовать устоявшейся Итерационной ближней точкой метода. Этот метод начинается с приблизительной оценки преобразования и , итеративно оптимизирует для преобразования путем вычисления ближайших соседей и минимизации связанной функции стоимости . Это может быть эффективно реализованы (даже в реальное время) и есть в наличии реализации, доступной для MATLAB, C++ ... Этот метод был протяженными и имеет несколько вариантов, в том числе оценки нежестких деформаций, если вы заинтересованы в расширениях вы должны посмотреть на Решение проблем компьютерной графики проблема регистрации при регистрации, где ваша проблема - решающий шаг. Для отправной точкой является Wikipedia page on Iterative Closest Point , который имеет несколько хороших внешних ссылок . Просто тизер изображение из matlab implementation, который был разработан, чтобы соответствовать к точке облака: alt text http://www.mathworks.com/matlabcentral/fx_files/12627/1/icp.gif

    После выравнивания можно окончательная мера ошибки сказать, насколько похожи две точечные облака, но это очень АПЧРК решение, там должно быть лучше.

  2. Использования дескрипторов формы можно вычислительные отпечатков форм, которые зачастую инвариантны относительно переводов/ротаций. В большинстве случаев они определяются для сеток, а не для облаков точек, тем не менее существует множество дескрипторов формы, поэтому в зависимости от вашего ввода и требований вы можете найти что-то полезное. Для этого вам нужно взглянуть в поле shape analysis, и, вероятно, this 2004 SIGGRAPH course presentation может дать представление о том, что люди делают, чтобы вычислить дескрипторы формы.

+0

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

+0

Да, вы совершенно правы, вам нужна разумная оценка, чтобы начать оптимизацию. Ваши шаги решения 1. и 2. подходят для этого. Для вашей информации, в принципе, это особый случай анализа основных компонентов, который является методом поиска доминирующих осей точечных множеств. См. Http://en.wikipedia.org/wiki/Principal_components_analysis –

0

Возможно, вам также следует прочитать алгоритм RANSAC. Он обычно используется для сшивания панорамных изображений, которые, похоже, немного похожи на вашу проблему, только в двух измерениях. Просто отправьте Google для RANSAC, панораму и/или сшивание, чтобы получить отправную точку.

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