Традиционный метод Colmap для практики трехмерной реконструкции (GUI | командная строка)

компьютерное зрение

Алгоритм Colmappipeline:

62F04787-5D3D-4638-AF5A-862CE30B48B4.png

Установка Colmap

Установите Colmap в Ubuntu Docker

Сбор данных

Сбор данных для многоракурсной 3D-реконструкции (MVS)


Работа с графическим интерфейсом Colmap

Разреженная реконструкция

Использование технологии инкрементного SfM

Среди них технология SfM происходит отGitHub - openMVG/openMVG: open Multiple View Geometry library. Basis for 3D computer vision and Structure from Motion.

1. Подготовка

  1. Создать каталог проектаTestScan
  2. создать в немimagesкаталог и сохранить исходное изображение
  3. бегатьcolmap gui, нажмитеfile - New ProjectВсплывающее окно проекта
  4. 在Databaseщелчок по строкеNew,существуетTestScanкаталог созданTestScan.dbФайл используется для хранения исходного адреса изображения, сопоставления признаков и других данных.
  5. существуетImagesщелчок по строкеSelectВыберите каталог, в котором находится исходное изображение сцены
  6. последний кликsave

Начальная структура каталогов:

.
|-- TestScan.db
`-- images
    |-- 00000000.jpg
    |-- 00000001.jpg
    |-- ...
    `-- 00000048.jpg

2. Извлечение признаков

На этом шаге выполняется соответствующий поиск точек, который можно понимать как сопоставление глобальных признаков. нажмитеprocessing - Feature Extraction

  • Выберите модель камеры какPinhole
  • выберитеParameters from EXIF: Извлечение внутренних параметров камеры из EXIF ​​(обычно собранные эффекты содержат файлы EXIF)
  • Остальные параметры временно по умолчанию

затем нажмитеExtractвыполнить извлечение признаков

2021-04-06_10-35.png

3. Сопоставление функций

нажмитеprocessing - Feature Matching, все параметры установлены по умолчанию, а затем щелкнитеRunсопоставление функций

После того, как этот шаг будет завершен, он будет сгенерирован автоматически.граф сценыиматрица соответствия(Количество объектов с одинаковыми именами между разными представлениями — это вес, а структура графа разных представлений — это узел графа)

справаLogВы можете увидеть результат этих двух шагов в2021-04-06_10-39.png

4. Инкрементальное моделирование

нажмитеreconstruction - start reconstructionИнкрементная итеративная перестройка в один клик

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

2021-04-06_10-49.png

Возьмем для примера 49-е изображение (39 ракурсов).

  • 576 точек облачности
  • Сначала выполните оценку позы (Отчет об уточнении позы)
  • Затем выполните оптимизацию BA: общее количество точек измерения слияния разреженного облака точек 149, отфильтровать 32 точки измерения.
  • Ретриангуляция
  • Наконец, выполняется итеративная глобальная оптимизация BA для оптимизации положения существующей камеры и координат трехмерного разреженного облака точек.
==============================================================================
Registering image #39 (49)
==============================================================================

  => Image sees 576 / 991 points

Pose refinement report
----------------------
    Residuals : 1132
   Parameters : 8
   Iterations : 7
         Time : 0.0134351 [s]
 Initial cost : 0.535158 [px]
   Final cost : 0.462099 [px]
  Termination : Convergence

  => Continued observations: 540
  => Added observations: 73

Bundle adjustment report
------------------------
    Residuals : 24684
   Parameters : 2030
   Iterations : 21
         Time : 0.501096 [s]
 Initial cost : 0.374389 [px]
   Final cost : 0.367663 [px]
  Termination : Convergence

  => Merged observations: 149
  => Completed observations: 27
  => Filtered observations: 32
  => Changed observations: 0.016853

Bundle adjustment report
------------------------
    Residuals : 24690
   Parameters : 2000
   Iterations : 3
         Time : 0.0764892 [s]
 Initial cost : 0.430376 [px]
   Final cost : 0.427614 [px]
  Termination : Convergence

  => Merged observations: 10
  => Completed observations: 1
  => Filtered observations: 0
  => Changed observations: 0.000891

==============================================================================
Retriangulation
==============================================================================

  => Completed observations: 9
  => Merged observations: 186
  => Retriangulated observations: 0

Оценка и оптимизация карты глубины

Построение, накопление, оценка и оптимизация стоимости в Colmap упакованы вместе и решаются с использованием модели GEM.В основном делится на четыре шага: сопоставление затрат на построение -> накопление затрат -> оценка глубины -> оценка карты глубины

Принцип здесь временно опущен,COLMAP боевой серии с многоракурсной геометрической 3D-реконструкцией

1. Устранение искажений изображения

нажмитеreconstruction - dense reconstruction, нажмите в окне Плотная реконструкцияselectВыберите место хранения файлов и нажмитеundistortionдля устранения искажения изображения

⚠️Примечание: Не выбирайте здесь корневую директорию проекта, при копировании картинок будет выдаваться ошибка, что путь уже существует, что приведет к падению colmap gui, при этом undistortion можно нажать только один раз, а во второй раз тоже произойдет сбой, потому что путь уже существует

2021-04-09_10-40.png

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

Набор данных dtu и предварительно сконфигурированная модель обскуры уже неявно неискажены. Если вы используете самостоятельно собранный набор данных, вам необходимо изменить модель камеры на модель камеры с параметрами искажения.

2. Оценка глубины

Щелкните в окне плотной реконструкции.stereoВыполнение оценки глубины сцены После оценки глубины мы можем получитьphotometricиgeometricКарта глубины и векторная карта нормалей под

Этот шаг медленный и ресурсоемкий

2021-04-09_11-15.png

Затем нажмите на них в красном поле, чтобы просмотреть карту глубины и карту нормалей после оптической согласованности, фотометрической и геометрической согласованности.

1476DCB5-C004-4BB2-8700-CD79B42F135E.png

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


плотная реконструкция

нажмитеFusionПлотная реконструкция на основе слияния карт глубины

2021-04-06_17-18_1.png

После перестройки он будет вdenseгенерируется вplyфайл модели

Визуальный дисплей

Meshlab

УстановитьMeshLabдля отображения

sudo snap install meshlab

[Ошибка: meshlab не может открыть файл ply]

2021-04-06_14-18.png

анализ проблемы: Откройте файл ply в текстовом браузере и найдите все искаженные символы после заголовка.

BFCA8075-4921-4811-99A0-2830B2F44D28.png

Перерыл много информации, так и не нашел решения.Наконец, я попросил у брата скрипт на питоне, отображающий ply, в основном с использованием библиотеки open3d и это удалось?, эта история говорит нам о том, что слушая совет учителя и брата может сэкономить целое время отладки во второй половине дня Скрипт размещен на гитхабе и пока не является открытым исходным кодом, если он вам нужен, вы можете оставить сообщение~

! !решение: После месяца блужданий наконец-то нашел решение

sudo snap install --devmode meshlab

Недавние установки meshlab используют snap, модель безопасности, которая запрещает приложениям просматривать содержимое каталога и открывать файлы, поэтому использование devmode для установки meshlab нарушает ограничения.

Colmap GUI

Или используйте официальный метод визуализации Colmap GUI, нажмитеFile - Import model from..., выберите сгенерированныйfused.plyВы можете открыть его, чтобы просмотреть эффект объединенного облака точек; однако,meshed-poisson.plyНе могу открыть, все еще нужно использовать Meshlab

2021-04-06_17-18.png

Анализ промежуточных данных — матрица сопоставления

нажмитеExtras - Match MatrixМатрица соответствия текущей сцены может быть экспортирована

8278ADD8-0E5E-4C6F-8FC1-6E34825BEA12.png

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

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


Операции командной строки Colmap

готов сimagesфайлы каталога изображений

  1. Извлечение признаков
colmap feature_extractor \
   --database_path ./database.db \
   --image_path ./images

вывод: Сохранение характерных точек в файле database.db. 2.Сопоставление характерных точек

colmap exhaustive_matcher \
   --database_path ./database.db
  1. Разреженная реконструкция
mkdir sparse
colmap mapper \
    --database_path ./database.db \
    --image_path ./images \
    --output_path ./sparse

вывод:sparseпапка, структура каталогов выглядит следующим образом:

└── sparse
    └── 0
        ├── cameras.bin        # 相机内参
        ├── images.bin         # 相机位姿
        ├── points3D.bin       # 稀疏3D点
        └── project.ini
  1. Устранение искажений изображения
mkdir dense
colmap image_undistorter \
    --image_path ./images \
    --input_path ./sparse/0 \
    --output_path ./dense \
    --output_type COLMAP \

вывод:denseпапка, структура каталогов выглядит следующим образом:

└── dense
    ├── images
    │   ├── 0.JPG
    │   ├── ...
    │   └── 48.JPG
    ├── run-colmap-geometric.sh
    ├── run-colmap-photometric.sh
    ├── sparse
    │   ├── cameras.bin
    │   ├── images.bin
    │   └── points3D.bin
    └── stereo
        ├── consistency_graphs
        ├── depth_maps
        ├── fusion.cfg
        ├── normal_maps
        └── patch-match.cfg
  1. плотная реконструкция
colmap patch_match_stereo \
    --workspace_path ./dense \
    --workspace_format COLMAP \
    --PatchMatchStereo.geom_consistency true    

вывод:dense/stereoпапка, рассчитанная для каждого изображенияdepth_mapиnormal_map

└── dense
    ├── images
    │   ├── 0.JPG
    │   ├── ...
    │   └── 48.JPG
    ├── run-colmap-geometric.sh
    ├── run-colmap-photometric.sh
    ├── sparse
    │   ├── cameras.bin
    │   ├── images.bin
    │   └── points3D.bin
    └── stereo
        ├── consistency_graphs
        ├── depth_maps
        │   ├── 0.JPG.geometric.bin
        │   ├── 0.JPG.photometric.bin
        │   ├── ...
        │   ├── ...
        │   ├── 48.JPG.geometric.bin
        │   └── 48.JPG.photometric.bin
		├── fusion.cfg
        ├── normal_maps
        │   ├── 0.JPG.geometric.bin
        │   ├── 0.JPG.photometric.bin
        │   ├── ...
        │   ├── ...
        │   ├── 48.JPG.geometric.bin
        │   └── 48.JPG.photometric.bin
        └── patch-match.cfg
  1. слияние
./colmap stereo_fusion \
    --workspace_path ./dense \
    --workspace_format COLMAP \
    --input_type geometric \
    --output_path ./dense/result.ply

вывод:result.plyфайл модели облака точек

Resources