Я не слишком знаком с этой библиотекой, но я могу объяснить, что 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))
. Но они могут иметь что-то более сложное и хитрое для лучшей устойчивости.
Надеюсь, это даст вам некоторое представление о таких алгоритмах.