fotomer
-
Количество публикаций
98 -
Зарегистрирован
-
Посещение
-
Days Won
14
Сообщения, опубликованные пользователем fotomer
-
-
2 часа назад, mult1plexer сказал:Добрый день. Возникла задача в 3d реконструкции местности, с помощью стерео системы.
Стерео-система имеется ввиду 2 камеры или обычный Structure from motion с одной камеры?
-
23 минуты назад, mrgloom сказал:Чо то я там про ортофотоплан не увидел.
И что должно подаваться на вход для построение ортофотоплана? т.к. как я понимаю в классической постановке SFM имеет в результате sparse point cloud?
Ортофотоплан это скорее простая сшивка панорамы, т.к. все снимки с одной высоты и в одной плоскости. SFM это расчет положений снимков друг относительно друга в пространстве, а потом можно делать с этим что хош, можно получить точки, а можно развернуть снимки по рассчитанным R и t и положить их на одну плоскость. Впрочем SFM для плоскости и должен выдать плоскость с натянутыми текстурами.
-
34 минуты назад, Nuzhny сказал:А параметры камеры в Фотоскане указывали? Там можно и без них, но если указать, то результат получается точнее.
Снимки были без дисторсии, камера сама ее исправляет и весьма хорошо, объектив фикс 20мм указан в EXIF, по идее Фотоскан должен оттуда взять. А больше параметров вроде и не нужно. Но теперь понятно, для sfm и Фотоскана надо весьма много снимков делать и с малым ракурсом. Для ДТП это не очень подходит, там обычно совсем мало снимков.
P.S. Еще интересный момент, я когда делал калибровку камер для своего треугольника, то шахматной доски не достаточно, надо расставлять фишки вдоль метров на 20 и рассчитывать для этого параметры. Тогда камера и вблизи и в дали хорошо измеряет. Если только по шахматной доски, то вблизи хорошо, вдали размеры уплывают.
P.S.S. Еще вопросик, актуально ли в обработке видео с камер рассчитывать 3D координаты движущихся объектов? Можно привернуть 2 камеры, положить на местность треугольник, камеры закоординируются по треугольнику друг относительно друга, и убрать треугольник. После чего можно точно измерять например рост идущего человека и расстояние до него.
-
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мм между делениями на линейке.
-
Уже задавал такой вопрос, но может у кого есть новая информация. Есть метод 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, но результат тоже не впечатлил, сетка кривоватая получается, хотя на вход давал фотки без дисторсии.
-
Попробуй try-catch из QT и OpenCV, может туда прилетит.
-
-
Если повесить 2-ю камеру хотя бы в метре от первой, то можно точно рассчитывать высоту движущихся объектов от дорожного полотна.
-
Есть функция calibrateCamera которая рассчитывает внутренние параметры камеры и возвращает reprojection error. Какой порядок этой ошибки должен быть? И сколько снимков обычно нужно скармливать?
-
Попробуй еще std::thread, в нем имхо больше возможностей ручной настройки распараллеливания.
- 1
-
38 минут назад, Khludenkov сказал:То есть распберри к примеру не потянет?
Зависит от кол-ва пикселей в картинке, например Win7 x64 с планкой 4Гб (все лишне отключено) на поиске соответствия на 2 снимках по 18 МегаПикселей вылетает по памяти.
-
А памяти точно достаточно? Фунции распознования довольно прожорливые. Еще если программа под х86, то в VisualStudio в настройках желательно указать Linker-System - Enable Large Adresses.
-
Dll точно релизные? Сделать, если нет, try-catch. Может зависать на выделении памяти. Ну и в релиз отладчиком тоже можно войти.
-
В findFundamentalMat передаются сходственные точки в количестве 7,8 или больше. Допустим найдено 100 сходственных точек, но некоторые из них ложные. Как лучше работать с этой функцией, передавать сразу 100 точек и findFundamentalMat по идее должен внутри отсеивать ложные точки? Или самим выбирать много вариантов по 8 точек и каким-то образом усреднять?
-
14 часа назад, BeS сказал:Не понял вопроса. Формула перехода от диспаритета к дистанции стандартная: depth = focal * baseline / disparity.
Я имел ввиду точность измерения линейного размера. Я в свое время делал для ГАИ фотограмметрическую программу, погрешность измерения была до 30 метров не более 1%, до 50метров не более 3%, съемка на обычный фотоаппарат.
Еще не подскажешь, есть метод findFundamentalMat. который выдает фундаментальную матрицу для 2 снимков. Есть stereoRectify который выпрямляет снимки, но метод требует матрицы R и T. Как из фундаментальной матрицы получить R и T ?
-
Здесь http://www.compvision.ru/forum/index.php?/topic/1923-создание-3d-моделей-из-2-снимков/ тоже хотел выяснить для произвольных снимков, но так и не понял как найти матрицу R и T. Если фотоаппараты закреплены на жесткой планке, то R и T можно найти через stereoCalibrate. А какое порядок расстояний надо определять с базой 1м и какая точность желательна?
-
Интересно, а как происходит образование облака точек и сетки? Определение позиции кадра в пространстве -> выделение контуров на снимке -> сопоставление контуров при помощи эпиполярных линий?
-
14 часа назад, Smorodov сказал:Посмотрите OpenMVG там, я как то делал 3D облако из нескольких снимков.
Нашел простой пример, который я делал в процессе изучения либы, путем вырезания лишнего main_3dRec.cpp .
Спасибо. Но у них своя математика, не OpenCV. Сколько не искал, но у всех примеры openCV 3D реконструкции половинчатые.
-
1. Сделал калибровку фотоаппарата по шахматным доскам, получил cameraMatrix и distorCoeff.
2. Взял 2 стерео-снимка на местности и одним из методов (я использовал Akaze) нашел массив ключевых точек.
Далее как я понял алгоритм такой
3. При помощи stereoRectify выпрямляем снимки.
4. Выпрямленные снимки кладем в stereoBM и получаем карту смещений.
5. Карту смещений подаем в reprojectImageTo3D и получаем искомые 3-х мерные координаты.
И сразу спотыкаюсь на stereoRectify которая требует матрицы переноса и вращения R и T. Есть 7 и 8-ми точечные методы для получения фундаментальной матрицы. Но как вытащить из нее R и T непонятно. Подскажите откуда можно добыть R и T между кадрами?
-
10 час назад, And36 said:Есть рабочий алгоритм обработки видео в реальном масштабе времени построенный в Матлабе. Хочу реализовать его с помощью С++. Исходя из тех рекомендаций, которые нашел в интернете, остановился на VS10+OpenCV231 (Win7x64). может нужно как-то изменить версию Framework?
У вас же код на managed C++, типа C#, только синтаксис другой. Попробйте на обычном С++. Если делаете все сначала, имхо сразу надо ставить VS13 или 15 и OpenCV 3.1.
Если будете удалять VS2010, лучше делать через эту утилиту https://blogs.msdn.microsoft.com/heaths/2010/08/23/visual-studio-2010-uninstall-utility/
- 1
-
Наложение текстуры на сетку это скорее к OpenGL или DirectX.
-
Сейчас скачал 3.1 для Windows, есть сборка под платформу х64. Под х86 сборка отсуствует. Может кто в курсе почему?
В 3.0 х86 присуствует.
-
-
Можно и на процессоре распаралелить при помощи std::thread.
stereo 3d reconstruction
в OpenCV
Опубликовано · Report reply
Это да ))) Тут или фреймворки копать или самим писать на основе OpenCV http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html