Перейти к содержимому
Compvision.ru
fotomer

Точность измерения расстояний методом SFM

Recommended Posts

Уже задавал такой вопрос, но может у кого есть новая информация. Есть метод Structure From Motion, который из двух и более снимков получает координаты сходственных точек снимков в пространстве. В OpenCV это реализованно: CameraCalibrate выдает параметры для конкретной камеры(фокус, дисторсия), потом для 2 снимков и 7,8 сходственных точек методом findFundamentalMat рассчитывается матрица их взаимного положения, потом по формуле E = K'TF K  получаем матрицу и всовываем ее в функцию SVD (sinagular value decomposition) и получаем искомые R и t, матрица переноса и вращения между 2 снимками.

И сколько я не бился погрешность меньше 7% по размеру не получалось, т.е. снимок шахматной доски сверху размер 100 единиц, снизу 93, или хуже. Или я где-то ошибся или сам метод фундаментальной матрицы не очень точен. Интересно что на глаз разница в размерах 7-10% не заметна, и сетка кажется правильной. Т.е. не факт что всякие 3D модельки в интернете получаются точные.

Может кто-нибудь оценивал точность измерений? Мне это нужно для замеров при автомобильных авариях, где точность надо уместить в 1%. До этого делал программу, где на местности лежал равносторонний треугольник как мерный объект и удавалось вогнать погрешность в 0.5-1%, но SFM конечно более прогрессивный, когда указывается только 1 размер на местности для масштаба.

Еще пробовал программу Agisoft Photoscan, но результат тоже не впечатлил, сетка кривоватая получается, хотя на вход давал фотки без дисторсии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

https://github.com/mapillary/OpenSfM или https://github.com/openMVG/openMVG пробовали ?

Вот здесь есть неплохой мануал: https://pfalkingham.wordpress.com/2016/10/09/photogrammetry-testing-4-openmvg-and-mvs-texrecon/

OpenCV обычно отрабатывает хуже специализированных библиотек. 

PS: Может брать не два, а больше снимков ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Smorodov сказал:

OpenCV обычно отрабатывает хуже специализированных библиотек. 

PS: Может брать не два, а больше снимков ?

Спасибо, посмотрю. Похоже догадываюсь в чем дело, SFM хорошо работает когда много снимков с близких ракурсов и так называемую фундаментальную матрицу можно усреднять по большому кол-ву точек. Если есть только 2-3 снимка и всего 8-10 точек на них, а так обычно и бывает в случае ДТП, то большой точности видимо не получить. Еще интересно, что sfm более менее работает, если взять 8 точек с 2 снимков на плоскости (шахматная доска), а если взять 8 точек условно через 10 м уходящие вдаль, то метод сыпется.

P.S. Если получится допилить, потом выложу библиотечку, аналог sfm, которая дает 1-2% погрешности для 2 снимков и 8-10 точек раскиданных на местности.

C треугольником вот такая точность получается на обычную мыльницу, т.е. практически в "0", 200мм между делениями на линейке.

calib3.jpg

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно еще глянуть в сторону трифокального тензора ( Trifocal Tensor ).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А параметры камеры в Фотоскане указывали? Там можно и без них, но если указать, то результат получается точнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
34 минуты назад, Nuzhny сказал:

А параметры камеры в Фотоскане указывали? Там можно и без них, но если указать, то результат получается точнее.

Снимки были без дисторсии, камера сама ее исправляет и весьма хорошо, объектив фикс 20мм указан в EXIF, по идее Фотоскан должен оттуда взять. А больше параметров вроде и не нужно. Но теперь понятно, для sfm и Фотоскана надо весьма много снимков делать и с малым ракурсом. Для ДТП это не очень подходит, там обычно совсем мало снимков.

P.S.  Еще интересный момент, я когда делал калибровку камер для своего треугольника, то шахматной доски не достаточно, надо расставлять фишки вдоль метров на 20 и рассчитывать для этого параметры. Тогда камера и вблизи и в дали хорошо измеряет. Если только по шахматной доски, то вблизи хорошо, вдали размеры уплывают.

P.S.S. Еще вопросик, актуально ли в обработке видео с камер рассчитывать 3D координаты движущихся объектов?  Можно привернуть 2 камеры, положить на местность треугольник, камеры закоординируются по треугольнику друг относительно друга, и убрать треугольник. После чего можно точно измерять например рост идущего человека и расстояние до него.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×