Запуск COLMAP с параметрами по умолчанию

Задайте пути и создайте выходные папки

Сначала задайте нужные переменные окружения и создайте выходную папку:

set COLMAP_PATH=<Путь к установленному colmap.bat>
set DATA_PATH=<Путь к папке датасета, например plush-dog>
set IMAGE_PATH=%DATA_PATH%\images
set DB_PATH=%DATA_PATH%\colmap.db
set SPARSE_PATH=%DATA_PATH%\sparse

mkdir %SPARSE_PATH%

Запустите извлечение признаков (feature extraction)

Используйте следующую команду, чтобы извлечь SIFT‑признаки из входных изображений:

%COLMAP_PATH% feature_extractor ^
    --database_path %DB_PATH% ^
    --image_path %IMAGE_PATH% ^
    --ImageReader.single_camera 1 ^
    --ImageReader.camera_model PINHOLE ^
    --SiftExtraction.use_gpu 1

Команда извлекает SIFT‑признаки из изображений и сохраняет их в указанную базу COLMAP.

Справка по параметрам:

  • --database_path: путь к SQLite‑базе, куда будут записаны признаки
  • --image_path: путь к папке с входными изображениями
  • --ImageReader.single_camera 1: предположение, что все изображения сняты одной камерой
  • --ImageReader.camera_model PINHOLE: использование pinhole‑модели камеры
  • --SiftExtraction.use_gpu 1: включение GPU‑ускорения для извлечения признаков

Пример вывода:

==============================================================================
Feature extraction
==============================================================================
Creating SIFT GPU feature extractor
Processed file [1/84]
  Name:            IMG_3496.jpg
  Dimensions:      3000 x 2000
  Camera:          #1 - PINHOLE
  Focal Length:    5515.70px (Prior)
  Features:        2400
Processed file [2/84]
  Name:            IMG_3497.jpg
  Dimensions:      3000 x 2000
  Camera:          #1 - PINHOLE
  Focal Length:    5515.70px (Prior)
  Features:        2416
...

Запустите сопоставление признаков (feature matching)

После извлечения признаков запустите exhaustive matcher, чтобы найти соответствия между парами изображений:

%COLMAP_PATH% exhaustive_matcher ^
    --database_path %DB_PATH% ^
    --SiftMatching.use_gpu 1

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

Справка по параметрам:

  • --database_path: путь к базе COLMAP с извлечёнными признаками
  • --SiftMatching.use_gpu 1: включает GPU‑ускорение для сопоставления

Exhaustive matcher сравнивает признаки для каждой возможной пары изображений. Он подходит для небольших и средних датасетов (до нескольких сотен изображений). Для больших датасетов он становится вычислительно дорогим, поскольку число пар растёт квадратично.

COLMAP также поддерживает стратегии сопоставления, лучше подходящие для больших датасетов: sequential matching, spatial matching и vocab tree matching. Подробнее см. в документации COLMAP.

Пример вывода:

==============================================================================
Feature matching
==============================================================================
Creating SIFT GPU feature matcher
Generating exhaustive image pairs...
Matching block [1/2, 1/2]
...
Elapsed time: 0.044 [minutes]

Запустите разреженную 3D‑реконструкцию (sparse reconstruction)

После сопоставления запустите mapper в COLMAP, чтобы оценить позы камер и построить разреженную 3D‑реконструкцию:

%COLMAP_PATH% mapper ^
    --database_path %DB_PATH% ^
    --image_path %IMAGE_PATH% ^
    --output_path %SPARSE_PATH%

Справка по параметрам:

  • --database_path: путь к базе COLMAP с признаками и соответствиями
  • --image_path: путь к папке с входными изображениями
  • --output_path: путь для сохранения моделей. Каждый результат будет в подпапке с номером (например, sparse/0)

Пример вывода и неудачного запуска

В некоторых случаях, включая датасет из этого туториала, COLMAP может не справиться с настройками по умолчанию. Сопоставление признаков может завершиться, но реконструкция может упасть на этапе инкрементального мэппинга (incremental mapping).

Пример лога при неудачном запуске:

Loading database
Loading cameras...
 1 in 0.000s
Loading matches...
 214 in 0.001s
Loading images...
 84 in 0.008s (connected 84)
Loading pose priors...
 0 in 0.000s
Building correspondence graph...
 in 0.005s (ignored 0)
Elapsed time: 0.000 [minutes]
Finding good initial image pair
Initializing with image pair #57 and #83
Global bundle adjustment
Registering image #56 (3)
=> Image sees 52 / 299 points
Retriangulation and Global bundle adjustment
Registering image #84 (4)
=> Image sees 68 / 257 points
...
Registering image #43 (21)
=> Image sees 30 / 144 points
=> Could not register, trying another image.
Retriangulation and Global bundle adjustment
Finding good initial image pair
=> No good initial image pair found.
Finding good initial image pair
=> No good initial image pair found.

Повторяющееся сообщение "No good initial image pair found" означает, что COLMAP не смог найти геометрически корректную пару изображений для инициализации реконструкции. Это может произойти как при старте первой 3D‑модели, так и при попытках начать новую модель после того, как не удалось зарегистрировать дополнительные изображения.

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

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

В следующем разделе, Запуск COLMAP с настроенными параметрами, показано, как менять ключевые настройки для улучшения результата.

Пример batch‑скрипта со всеми командами из этого раздела доступен здесь: scripts/run_colmap_default.bat