Разработка системы 3D-реконструкции по фотографиям (Photogrammetry)

При переносе сложного промышленного объекта в цифру — например, турбины или архитектурного памятника — традиционное 3D-сканирование часто упирается в бюджет и логистику. Мы решаем эту задачу с помощью фотограмметрии: по серии обычных фотографий восстанавливаем точную трёхмерную геометрию. Результат

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1006

При переносе сложного промышленного объекта в цифру — например, турбины или архитектурного памятника — традиционное 3D-сканирование часто упирается в бюджет и логистику. Мы решаем эту задачу с помощью фотограмметрии: по серии обычных фотографий восстанавливаем точную трёхмерную геометрию. Результат — плотное облако точек, полигональная сетка и текстурированная 3D-модель, готовая к CAD, VR или рендеру. Экономия бюджета по сравнению с лазерным сканированием достигает 70% (на примере проекта цифрового двойника цеха — сэкономили существенную сумму). За 5+ лет мы реализовали 20+ таких проектов для промышленности, строительства и геймдева. Например, для цифрового двойника производственного цеха обработали 1500 снимков с дрона за 8 часов, получив точность 1.5 мм.

Проблемы, которые решаем

Низкое качество исходных снимков. Клиенты часто присылают фото, сделанные на смартфон с неравномерным освещением и малым перекрытием. Это приводит к пробелам в облаке точек и искажениям геометрии. Мы компенсируем это алгоритмической фильтрацией и адаптивным подбором параметров SfM.

Нестабильное освещение и блики. Блестящие и зеркальные поверхности — классическая боль фотограмметрии. Для них применяем кросс-поляризацию или мультиэкспозицию, а на этапе обработки — маскирование бликов с помощью нейросетевых детекторов.

Огромные объёмы данных. Для большого объекта (цех, здание) количество фото достигает 2000–3000. Обработка такого набора без оптимизации занимает сутки. Мы внедряем распределённые вычисления (Ray, Dask) и квантизацию облаков точек, сокращая время до часов.

Почему фотограмметрия эффективнее лазерного сканирования?

Лазерные сканеры точнее (до 0.1 мм), но они дороги и требуют доступа к объекту. Фотограмметрия даёт сопоставимую точность (0.5–3 мм) для большинства задач, при этом стоимость оборудования в 10 раз ниже, а съёмку можно проводить с дрона. Для цифровых двойников зданий и памятников это оптимальный выбор. Получите консультацию, чтобы оценить, подойдёт ли фотограмметрия для вашего проекта.

Как настроить SfM пайплайн?

Photogrammetry пайплайн состоит из двух этапов: SfM и MVS. Разберём настройку на примере COLMAP и OpenMVS.

Шаг 1: Извлечение и сопоставление признаков Используйте SuperPoint вместо SIFT — он лучше работает на гладких поверхностях:

import pycolmap from pathlib import Path def run_sfm_reconstruction(images_dir: str, output_dir: str) -> dict: """Полный SfM пайплайн через COLMAP""" image_path = Path(images_dir) output_path = Path(output_dir) output_path.mkdir(exist_ok=True) database_path = output_path / 'database.db' # Извлечение признаков pycolmap.extract_features(database_path, image_path, sift_options={'max_num_features': 8192}) # Сопоставление признаков pycolmap.match_exhaustive(database_path) # Инкрементальная реконструкция maps = pycolmap.incremental_mapping( database_path=database_path, image_path=image_path, output_path=output_path ) reconstruction = maps[0] # largest map return { 'num_cameras': len(reconstruction.cameras), 'num_images': len(reconstruction.images), 'num_3d_points': len(reconstruction.points3D) } 

Шаг 2: Плотная реконструкция OpenMVS даёт баланс скорости и качества:

import subprocess def run_dense_reconstruction(sfm_output: str, output_dir: str): """Плотная реконструкция через OpenMVS""" subprocess.run([ 'InterfaceCOLMAP', '-i', sfm_output, '-o', f'{output_dir}/scene.mvs' ], check=True) subprocess.run([ 'DensifyPointCloud', '-i', f'{output_dir}/scene.mvs', '--resolution-level', '1', '--number-views', '5' ], check=True) subprocess.run([ 'ReconstructMesh', '-i', f'{output_dir}/scene_dense.mvs', '--quality', '3' ], check=True) subprocess.run([ 'TextureMesh', '-i', f'{output_dir}/scene_dense_mesh.mvs' ], check=True) 

Шаг 3: Постобработка в Open3D

import open3d as o3d import numpy as np def process_point_cloud(pcd_path: str) -> dict: pcd = o3d.io.read_point_cloud(pcd_path) pcd_clean, _ = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) pcd_clean.estimate_normals( o3d.geometry.KDTreeSearchParamHybrid(radius=0.05, max_nn=30) ) mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson( pcd_clean, depth=9 ) density_threshold = np.quantile(densities, 0.05) mesh = mesh.select_by_index(np.where(densities > density_threshold)[0]) return { 'num_vertices': len(mesh.vertices), 'num_triangles': len(mesh.triangles), 'bounding_box': mesh.get_axis_aligned_bounding_box() } 

Что влияет на точность реконструкции?

Точность зависит от трёх факторов: качества снимков, перекрытия и алгоритмов. Даже при идеальных фото COLMAP может дать 1–3 мм, а Reality Capture — 0.5–2 мм. Для повышения точности до 0.1 мм используем лазерное сканирование, но фотограмметрия достаточна для 95% задач. Закажите аудит фото — мы определим ожидаемую точность.

Какой пайплайн выбрать: COLMAP или Reality Capture?

Если бюджет ограничен — ставим open-source COLMAP + OpenMVS. Он бесплатен, гибок, но требует программирования. Для коммерческих проектов с жёсткими сроками Reality Capture даёт ту же точность в 2 раза быстрее. Многие клиенты выбирают гибрид: COLMAP для предобработки, Reality Capture для финальной сборки. Закажите разработку индивидуального пайплайна под ваши задачи.

Требования к фотографиям

Качество реконструкции напрямую зависит от входных фото:

Параметр Рекомендация
Перекрытие кадров 70–80%
Минимальное количество фото 30–50
Оптимальное количество 100–300
Угол между снимками 15–30°
Освещение Равномерное, без резких теней
Разрешение 12 MP+
Глубина резкости Максимальная (f/8–f/16)

Точность и время обработки

Метод Точность (мм) Время (100 фото, CPU)
COLMAP + OpenMVS 1–3 30–120 мин
Meshroom (AliceVision) 1–5 45–90 мин
Reality Capture 0.5–2 15–30 мин
Metashape (Agisoft) 0.5–2 20–60 мин

Что входит в работу

  • Аудит исходных фото и консультация по съёмке.
  • Проектирование пайплайна под вашу задачу.
  • Реализация SfM + MVS с калибровкой и фильтрацией.
  • Построение mesh, текстурирование, экспорт в требуемые форматы (PLY, OBJ, FBX, GLTF).
  • Документация по воспроизведению результата.
  • Обучение вашей команды работе с пайплайном.
  • Техническая поддержка 3 месяца.

Сроки ориентировочно

Применение Срок проекта
Пайплайн обработки фотосессий 3–5 недель
Автоматическая фотостудия с роботом 8–14 недель
Система для инспекции/документации 6–10 недель

Точная стоимость рассчитывается после аудита ваших данных и требований. Свяжитесь с нами — мы оценим проект и предложим оптимальное решение.