Как SampleConsensusPrerejective (напр. RANSA C) действительно работает? - PullRequest
0 голосов
/ 22 февраля 2020

Я использую метод pcl SampleConsensusPrerejective , и он работает хорошо. Я использую его, как описано в руководстве. Но я не совсем понимаю, как работает алгоритм RANSA C. Функции вычисляются с помощью FPFH.

Как я понял, алгоритм берет случайные функции из облака ввода и из облака цели и проецирует облако ввода на вычисленную позу в облаке цели. Затем вычислите consensus set и после некоторой итерации примите позу с самым большим consensus set. Пока все хорошо.

Но как сравниваются эти особенности и вычисляется поза? Я пока не понимаю, как гистограммы функций, основанные на квадрупеле точек <α, ϕ, θ, d>, действительно помогают. Что именно происходит после выбора, например, трех примеров функций из входного и целевого облака?

Может кто-нибудь объяснить простыми словами, что будет дальше? Большое вам спасибо!

1 Ответ

1 голос
/ 03 марта 2020

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

RANSA C - это очень общий алгоритм оптимизации, разработанный для поиска решения в присутствии выбросов. Представьте, что вам дано линейное уравнение a*x_i+b=y_i, и вам нужно найти a и b для данных x_i и y_i. Обычно простые наименьшие квадраты решают проблему, но при наличии метода наименьших квадратов с выбросами метод с треском проваливается, что приводит к совершенно неправильному решению.

С RANSA C можно взять два случайных индекса i,j найти наилучший a и b, нарисуйте линию и проверьте, насколько хорошо эта линия приближается к набору точек (x_i,y_i). Затем, после ряда попыток, вы выбираете лучший вариант и называете его решением или с учетом наилучшего набора образцов, выбираете суммарные значения с их решением и подбираете их наилучшим образом. Эта методология должна отфильтровывать любые выбросы с учетом достаточного количества выборок или приводить к провалу - нужно просто проверить конечный результат на предмет здравого смысла.

Можно также поиграть с «насколько хорошо линия приближается к набору точек» , Пользователь решает критерии. Максимизируйте количество inlier данного порога или минимизируйте ошибку медианы. Как бы то ни было, пока это имеет смысл.

Вы можете применять RANSA C практически к любому процессу оптимизации, учитывая функции ошибок и механизм оптимизации.

Как работает их оптимизация? Я не знаю. Спросите их разработчиков, прочитайте их код или документацию. Но я могу дать вам несколько идей, как это может работать.

С учетом характерных точек (A,B,C) в исходном облаке и трех совпадающих объектов в целевом облаке (X,Y,Z) можно определить положительное ортогональное аффинное преобразование (вращение + shift), который отображает (A,B,C) на (X,Y,Z) - или лучше подходит, если они не совсем совпадают. Нужно четыре точки, если вы также учитываете отрицательные ортогональные преобразования (отражение + вращение + сдвиг), а не только положительные. Это просто классическая c линейная алгебра. Четыре точки могут быть предпочтительнее в любом случае для лучшей точности решения, так как данные наверняка зашумлены.

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

Если вы просто случайным образом рандомизируете объекты A, B, C, X, Y, Z, вы в конечном итоге найдете решение, но оно займет смешное количество времени, делая его непрактичным. Поэтому я считаю, что у них есть несколько методов, чтобы сузить необходимое количество тестов. Скажем, если у них была функция f, возможно, очень ошибочная, которая для каждой функции в исходном облаке соответствует совпадению в целевом облаке. Тогда вы можете просто проверить наборы точек (A,B,C) против (f(A),f(B),f(C)). Но они могут иметь что-то более сложное и хитрое для лучшей устойчивости.

Надеюсь, это даст вам некоторое представление о таких алгоритмах.

...