Реализация калибровки камеры RANSAC

Я просмотрел несколько библиотек, таких как OpenCV и т. д., но не смог найти реализацию калибровки камеры способом RANSAC. Я имею в виду, что я хочу выполнить калибровку, обеспечивающую точечные соответствия (P, p) (т.е. 3D -> 2D), которые могут содержать выбросы, и, наконец, найти как внутреннюю, так и внешнюю матрицу из выбросов. Прежде чем я продолжу и реализую свою собственную, используя некоторые библиотеки, такие как scikit (я также не нашел хорошей общей реализации RANSAC на C++), я хотел знать, доступно ли что-то подобное.


person krips89    schedule 25.03.2015    source источник


Ответы (2)


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

person flix    schedule 26.03.2015
comment
Вот что я делаю сейчас; искал что-то уже реализованное. Ошибка перепроецирования, возвращаемая калибровочной камерой, не очень полезна, так как нужно получить ошибку перепроецирования новых точек, используя существующую матрицу камеры, и для этого есть дополнительный вызовsolvPnP, чтобы получить внешние значения новых точек, а затем projectPoints, чтобы получить ошибка перепроецирования вручную. Не думайте, что это можно сделать проще. - person krips89; 26.03.2015

Первый вопрос, который нужно задать: почему вы хотите это сделать?

Причина, по которой вы не найдете упрощенную реализацию цикла RANSAC вокруг всего пакета калибровки камеры, заключается в том, что на первый взгляд это кажется плохой идеей.

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

Было бы полезно, если бы вы описали свой вариант использования более подробно.

person Francesco Callari    schedule 27.03.2015
comment
Это полезно, если вам нужно откалибровать камеру по изображению, а не заранее - например. если у вас нет камеры. - person Martin Beckett; 27.03.2015
comment
Но у вас есть изображения правильной калибровочной установки? И вы можете гарантировать, что параметры камеры не изменятся ни на калибровочных изображениях (чтобы вы могли калибровать), ни на реальных изображениях сцены? Возможно, вы путаете калибровку камеры (en.wikipedia.org/wiki/Camera_resectioning) с автоматическим -калибровка (en.wikipedia.org/wiki/Camera_auto-калибровка) - person Francesco Callari; 28.03.2015
comment
Если у вас есть априорный доступ к камере для создания калибровочных изображений (и они не меняются при увеличении или фокусе), то да. Но если вы создаете сервис, в который люди могут загружать отдельные фотографии, сделанные вокруг объекта своей камерой, и вы создаете модель из точечных соответствий, вам нужно будет найти матрицу камеры из изображений. - person Martin Beckett; 28.03.2015
comment
@FrancescoCallari, я хочу сделать это, потому что я хочу выполнить калибровку по зашумленным данным - данным, которые гарантируют, что будет большое количество точных соответствий, - что дает возможность выполнить калибровку камеры. Почему это плохая идея? - person krips89; 29.03.2015
comment
В целом неплохая идея, но довольно бессмысленная. Калибровка камеры обычно состоит из двух этапов: (1) первоначальная оценка параметров камеры с использованием линейных методов и (2) фаза уточнения посредством (опционально усиленной) настройки пакета. Если вы ожидаете значительную долю выбросов в ваших калибровочных изображениях, то в фазе (1) имеет смысл говорить о RANSAC или подобных методах (например, MLESAC) — и даже там, только если вы ожидаете больших (›= 50%) доли выбросов, в противном случае такие методы, как метод наименьших медианных квадратов, как правило, более эффективны и просты в использовании. - person Francesco Callari; 31.03.2015
comment
И, как я уже говорил ранее, если вы калибруете в ситуациях, когда вы ожидаете больших долей выбросов, возможно, имеет смысл переосмыслить процедуру захвата изображения и сделать ее более предсказуемой и воспроизводимой. - person Francesco Callari; 31.03.2015