Как обрабатывать отсутствующие данные в структуре из оптимизации движения/регулировки пакета

StackOverflow https://stackoverflow.com/questions/9316288

Вопрос

Я работаю над структурой из приложения движения и отслеживаю несколько маркеров, размещенных на объекте, чтобы определить жесткую структуру объекта.

Приложение, по сути, использует стандартную оптимизацию Левенберга-Маркварда в течение нескольких представлений камеры и сводит к минимуму различия между ожидаемыми точками маркера и точками маркеров, полученными в 2D из каждого представления.

Для каждой точки маркера и каждого представления Следующая функция сведена к минимуму:

double diff = calculatedXY[index] - observedXY[index]

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

Я закодировал симуляцию камеры, видя все точки маркера, но мне было интересно, как справиться с случаями, когда во время запуска точек не видно из -за освещения, окклюзии или просто не в виде камеры. В реальном запуске приложения я буду использовать веб -камеру для просмотра объекта, поэтому вполне вероятно, что не все маркеры будут видны одновременно и в зависимости от того, насколько надежным алгоритм моего компьютерного зрения, я не смогу обнаружить Маркер все время.

Я подумал о том, чтобы установить значение DIFF на 0 (Sigma Squared Wild = 0) в случае, когда маркерная точка не может быть замечена, может ли это исказить результаты, однако?

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top