fotomer
Пользователи-
Количество публикаций
98 -
Зарегистрирован
-
Посещение
-
Days Won
14
Все публикации пользователя fotomer
-
Это да ))) Тут или фреймворки копать или самим писать на основе OpenCV http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html
-
Стерео-система имеется ввиду 2 камеры или обычный Structure from motion с одной камеры?
-
Ортофотоплан это скорее простая сшивка панорамы, т.к. все снимки с одной высоты и в одной плоскости. SFM это расчет положений снимков друг относительно друга в пространстве, а потом можно делать с этим что хош, можно получить точки, а можно развернуть снимки по рассчитанным R и t и положить их на одну плоскость. Впрочем SFM для плоскости и должен выдать плоскость с натянутыми текстурами.
-
Уже задавал такой вопрос, но может у кого есть новая информация. Есть метод 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, но результат тоже не впечатлил, сетка кривоватая получается, хотя на вход давал фотки без дисторсии.
-
Снимки были без дисторсии, камера сама ее исправляет и весьма хорошо, объектив фикс 20мм указан в EXIF, по идее Фотоскан должен оттуда взять. А больше параметров вроде и не нужно. Но теперь понятно, для sfm и Фотоскана надо весьма много снимков делать и с малым ракурсом. Для ДТП это не очень подходит, там обычно совсем мало снимков. P.S. Еще интересный момент, я когда делал калибровку камер для своего треугольника, то шахматной доски не достаточно, надо расставлять фишки вдоль метров на 20 и рассчитывать для этого параметры. Тогда камера и вблизи и в дали хорошо измеряет. Если только по шахматной доски, то вблизи хорошо, вдали размеры уплывают. P.S.S. Еще вопросик, актуально ли в обработке видео с камер рассчитывать 3D координаты движущихся объектов? Можно привернуть 2 камеры, положить на местность треугольник, камеры закоординируются по треугольнику друг относительно друга, и убрать треугольник. После чего можно точно измерять например рост идущего человека и расстояние до него.
-
Спасибо, посмотрю. Похоже догадываюсь в чем дело, SFM хорошо работает когда много снимков с близких ракурсов и так называемую фундаментальную матрицу можно усреднять по большому кол-ву точек. Если есть только 2-3 снимка и всего 8-10 точек на них, а так обычно и бывает в случае ДТП, то большой точности видимо не получить. Еще интересно, что sfm более менее работает, если взять 8 точек с 2 снимков на плоскости (шахматная доска), а если взять 8 точек условно через 10 м уходящие вдаль, то метод сыпется. P.S. Если получится допилить, потом выложу библиотечку, аналог sfm, которая дает 1-2% погрешности для 2 снимков и 8-10 точек раскиданных на местности. C треугольником вот такая точность получается на обычную мыльницу, т.е. практически в "0", 200мм между делениями на линейке.
-
Попробуй try-catch из QT и OpenCV, может туда прилетит.
-
Если повесить 2-ю камеру хотя бы в метре от первой, то можно точно рассчитывать высоту движущихся объектов от дорожного полотна.
-
Есть функция calibrateCamera которая рассчитывает внутренние параметры камеры и возвращает reprojection error. Какой порядок этой ошибки должен быть? И сколько снимков обычно нужно скармливать?
-
Попробуй еще std::thread, в нем имхо больше возможностей ручной настройки распараллеливания.
-
Утечка памяти. Что надо освобождать.
fotomer replied to Khludenkov's topic in Обсуждение общих вопросов
Зависит от кол-ва пикселей в картинке, например Win7 x64 с планкой 4Гб (все лишне отключено) на поиске соответствия на 2 снимках по 18 МегаПикселей вылетает по памяти. -
Утечка памяти. Что надо освобождать.
fotomer replied to Khludenkov's topic in Обсуждение общих вопросов
А памяти точно достаточно? Фунции распознования довольно прожорливые. Еще если программа под х86, то в VisualStudio в настройках желательно указать Linker-System - Enable Large Adresses. -
В findFundamentalMat передаются сходственные точки в количестве 7,8 или больше. Допустим найдено 100 сходственных точек, но некоторые из них ложные. Как лучше работать с этой функцией, передавать сразу 100 точек и findFundamentalMat по идее должен внутри отсеивать ложные точки? Или самим выбирать много вариантов по 8 точек и каким-то образом усреднять?
-
Code::Blocks + OpenCV debug(работает)/releas(не работает)
fotomer replied to Dvoetut's topic in OpenCV
Dll точно релизные? Сделать, если нет, try-catch. Может зависать на выделении памяти. Ну и в релиз отладчиком тоже можно войти.- 11 replies
-
- opencv
- code::blocks
-
(и ещё %d)
Теги:
-
Определение расстояния до объекта по двум фотографиям
fotomer replied to Khludenkov's topic in Обсуждение общих вопросов
Я имел ввиду точность измерения линейного размера. Я в свое время делал для ГАИ фотограмметрическую программу, погрешность измерения была до 30 метров не более 1%, до 50метров не более 3%, съемка на обычный фотоаппарат. Еще не подскажешь, есть метод findFundamentalMat. который выдает фундаментальную матрицу для 2 снимков. Есть stereoRectify который выпрямляет снимки, но метод требует матрицы R и T. Как из фундаментальной матрицы получить R и T ? -
Определение расстояния до объекта по двум фотографиям
fotomer replied to Khludenkov's topic in Обсуждение общих вопросов
Здесь http://www.compvision.ru/forum/index.php?/topic/1923-создание-3d-моделей-из-2-снимков/ тоже хотел выяснить для произвольных снимков, но так и не понял как найти матрицу R и T. Если фотоаппараты закреплены на жесткой планке, то R и T можно найти через stereoCalibrate. А какое порядок расстояний надо определять с базой 1м и какая точность желательна? -
1. Сделал калибровку фотоаппарата по шахматным доскам, получил cameraMatrix и distorCoeff. 2. Взял 2 стерео-снимка на местности и одним из методов (я использовал Akaze) нашел массив ключевых точек. Далее как я понял алгоритм такой 3. При помощи stereoRectify выпрямляем снимки. 4. Выпрямленные снимки кладем в stereoBM и получаем карту смещений. 5. Карту смещений подаем в reprojectImageTo3D и получаем искомые 3-х мерные координаты. И сразу спотыкаюсь на stereoRectify которая требует матрицы переноса и вращения R и T. Есть 7 и 8-ми точечные методы для получения фундаментальной матрицы. Но как вытащить из нее R и T непонятно. Подскажите откуда можно добыть R и T между кадрами?
-
Интересно, а как происходит образование облака точек и сетки? Определение позиции кадра в пространстве -> выделение контуров на снимке -> сопоставление контуров при помощи эпиполярных линий?
-
Спасибо. Но у них своя математика, не OpenCV. Сколько не искал, но у всех примеры openCV 3D реконструкции половинчатые.
-
У вас же код на managed C++, типа C#, только синтаксис другой. Попробйте на обычном С++. Если делаете все сначала, имхо сразу надо ставить VS13 или 15 и OpenCV 3.1. Если будете удалять VS2010, лучше делать через эту утилиту https://blogs.msdn.microsoft.com/heaths/2010/08/23/visual-studio-2010-uninstall-utility/
-
текстурирование восстановленой поверхности
fotomer replied to Morzh's topic in Обсуждение общих вопросов
Наложение текстуры на сетку это скорее к OpenGL или DirectX. -
Сейчас скачал 3.1 для Windows, есть сборка под платформу х64. Под х86 сборка отсуствует. Может кто в курсе почему? В 3.0 х86 присуствует.
-
Из новенького для начинающих: https://www.packtpub.com/tech/opencv#
-
Можно и на процессоре распаралелить при помощи std::thread.