Holmogorov.ru

Блог
Валентина
Холмогорова

3D-сканирование без 3D-сканера. Как получить трехмерную модель при помощи смартфона

Статья была впервые опубликована в журнале «Хакер»

Как и у любого человека, увлекающегося 3D-печатью, у меня периодически возникает необходимость превратить какой-нибудь материальный предмет в виртуальную объемную модель для последующей отправки на принтер. В онлайн-каталогах вроде Thingiverse можно найти далеко не все, а рисовать сложную деталь в 3D-редакторе — долго и муторно. Казалось бы, решение проблемы — 3D-сканер, но он не всегда имеется под рукой. Можно ли обойтись и вовсе без этого хитроумного устройства? Оказывается, можно! Для этого вполне достаточно обычной цифровой фотокамеры или смартфона.

Суть метода

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

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

Этот метод хорош для тех владельцев 3D-принтеров, которые пока еще не освоили работу в профессиональных трехмерных редакторах, но желают изготовить из пластика какое-то полезное изделие. В этом случае его можно будет вылепить, например, из пластилина, причем в большем масштабе — так можно получить довольно мелкие детали, отсканировать, а затем отправить на печать. Правда, полученная объемная модель все равно будет иметь изъяны, поэтому ее придется немного «подправить» в соответствующих программах вроде бесплатных Meshmixer или MeshLab.

Железо

Для получения трехмерной модели методом фотограмметрии подойдет любая цифровая камера. Очевидно, что профессиональные зеркалки дают заметно лучший результат просто в силу более качественной оптики. Кроме того, такие фотоаппараты позволяют импортировать снимки в «сыром» формате RAW, то есть без сжатия, что дает определенное преимущество при обработке изображения, поскольку при сжатии графики неизбежны потери. Но в целом для достижения приемлемого результата вполне достаточно камеры, которой оборудованы практически все современные смартфоны, при условии, что сам объектив камеры не имеет физических повреждений и дефектов. Общий принцип тут таков: чем больше разрешение полученных снимков, тем выше будет качество трехмерной модели, но тем больше времени потребуется на программную обработку кадров.

Экшен-камеры вроде GoPro для целей фотограмметрии подходят не очень хорошо, поскольку большинство из них оборудованы объективами типа «рыбий глаз», которые вносят искажения в полученное такой камерой изображение. Этим сводятся на нет все преимущества подобных устройств.

Именно поэтому в качестве устройства для получения изображений вместо экшен-камеры вполне можно использовать обычную веб-камеру, благо именно они и лежат в основе большинства бюджетных 3D-сканеров. Качество полученной таким образом покадровой съемки будет, честно говоря, так себе, зато подобным способом можно снимать достаточно большие объекты — например, архитектурные сооружения или автомобили.

Ограничения

Очевидно, что с использованием метода фотограмметрии можно получить качественную 3D-модель далеко не всякого объекта. При помощи цифрового фотоаппарата не получится отсканировать следующие предметы:

  • прозрачные объекты;
  • объекты, имеющие поверхность с высокой отражающей способностью, например зеркальные или хромированные;
  • очень маленькие предметы;
  • предметы, поверхность которых имеет большое количество мелких деталей, выступов и выемок, либо объекты очень сложной формы.

Чрезвычайно плохо получаются модели однотонных предметов с очень гладкой и ровной поверхностью, потому что в этом случае программе будет не к чему «привязаться» при обсчете объемной фигуры. Кроме того, объект, безусловно, должен располагаться перед объективом камеры совершенно неподвижно. Качественно отсканировать движущийся объект не получится.

Приступаем к съемке

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

Следует позаботиться и об освещении: свет должен падать на снимаемую сцену равномерно, не оставляя на объекте бликов или сильно затененных участков. Лучше всего фотографировать предмет на улице в пасмурный день, но подойдет и обычный дневной свет в помещении либо рассеянный свет люминесцентных ламп. Не нужно направлять источники света непосредственно на объект, лучше ориентировать их на белый потолок или воспользоваться светорассеивателями. Важно, чтобы на предмете отсутствовали резкие затенения. Располагай источники света выше модели, чтобы прямые лучи не попадали в объектив. Вспышку на камере следует отключить — она даст ненужные блики.

Запомни начальную точку съемки — она же станет и конечной точкой, на которой ты должен будешь завершить обход объекта. Старайся настроить фотоаппарат так, чтобы фотографируемый предмет по возможности занимал весь кадр, но при этом полностью в него помещался, не «вылезая» за его пределы. Переключи камеру в ручной режим съемки — в автоматическом режиме она будет постоянно перенастраивать экспозицию, баланс белого и прочие параметры, чего нам следует по возможности избегать. Единственный автоматический параметр, который можно оставить включенным, — автофокусировка: хороший фокус — это залог успеха всего мероприятия. Выставив все необходимые настройки в самом начале съемок, больше не меняй их.

Обходим вокруг сканируемого предмета с камерой в руках, делая не менее пятидесяти снимков таким образом, чтобы каждый последующий захватывал часть экспозиции предыдущего. Твоя траектория движения должна составлять по возможности ровную окружность. Во время первого прохода старайся держать камеру примерно на одном уровне по отношению к объекту, чтобы на полученных фотографиях предмет располагался на одной высоте, затем можно сделать снимки немного под углом сверху или снизу, обойдя модель по кругу еще несколько раз. Можно использовать штатив, но это увеличит время съемки, поэтому лучше всего работать, что называется, «с рук»: сделал кадр, переместился на несколько сантиметров, сделал новый кадр и так далее.

3D сканирование с помощью фотоаппарата
Каждый новый кадр должен содержать часть предыдущего

Порядок фотографий для большинства приложений не имеет решающего значения, поэтому, сделав несколько снимков, можно вернуться немного назад и получить еще пару кадров с предыдущей точки. Важно лишь следить за тем, чтобы каждый новый кадр перекрывал примерно 60–70% экспозиции предыдущего. Фон, на котором расположен предмет, тоже не играет существенной роли: лучше, если он как раз будет неоднородным, чтобы программе было легче «привязаться к местности». Тогда она сможет определить расположение различных участков предмета относительно друг друга и окружающего пространства. Очень важно, чтобы фон отличался по цвету от цвета самой модели.

Чем больше будет исходных снимков для обработки, тем лучше, поэтому их стоит делать с запасом. Удалить лишние кадры никогда не поздно, а вот нащелкать новые — уже проблематично, особенно если ты убрал фотографируемый объект с подставки: в этом случае установить его обратно в точности так же, как он стоял до этого, миллиметр в миллиметр, будет уже невозможно. Не применяй к исходным снимкам фильтры: это увеличит «цифровой шум» картинки, но никак не улучшит ее с точки зрения ПО.

Программное обеспечение

Самая известная программа для преобразования фотографий в 3D-модель называется Zephyr Free, ее можно скачать с сайта разработчиков. Бесплатная версия Zephyr имеет ограничение: в нее можно загрузить только 50 фотографий для одного проекта, но даже с таким небольшим количеством кадров приложение позволяет получить вполне приличный результат.

После установки и запуска приложения Zephyr Free открой меню Workflow и выбери в нем пункт New Project. Затем перетащи в окно программы все сделанные фотографии объекта либо импортируй их вручную, нажав на кнопку + и открыв папку, где хранятся файлы.

Выбрав фотографии, дважды щелкни мышью на кнопке Next. Теперь в меню Category нужно выбрать один из четырех вариантов позиционирования камеры и снимаемого объекта: Aerial — для снимков с воздуха, например с коптера, Close Range — для небольших предметов, снятых вблизи, Human Body — снимки человеческого тела и, наконец, Urban — для съемок городских объектов и архитектурных сооружений. В нашем случае лучше всего подходит второй вариант, Close Range.

Ниже располагается меню Presets, где предлагаются три возможные настройки приложения: Fast (быстрое построение модели), Default (по умолчанию) и Deep (глубокий анализ). Для более высокого качества полученной модели лучше всего выбрать вариант Deep. Снова нажимаем Next а затем кнопку Run в верхней части окна, чтобы запустить процесс преобразования фотографий в трехмерную модель.

На первом этапе Zephyr Free проанализирует все загруженные тобой снимки, найдет отличия между ними и покажет список фотографий, на которых ей точно удалось определить местоположение камеры и снимаемого объекта. Пригодные для работы снимки будут помечены в списке словом Yes, неудачные — красной надписью No.

Результат анализа фотографий программой Zephyr Free

Результат анализа фотографий программой Zephyr Free

Если для построения трехмерной модели подошло слишком мало картинок, съемку и все последующие процедуры придется повторить. Лично у меня нормально отснять объект получилось примерно с восьмого раза. Если результат тебя устраивает, щелкни мышью на кнопке Finish, чтобы просмотреть на экране облако точек, которое построила программа на основании загруженных фотографий.

Так выглядит созданное Zephyr Free облако точек
Так выглядит созданное Zephyr Free облако точек

Чтобы создать более плотное облако точек, щелкни мышью на кнопке Dense Point Cloud Generation и нажми на клавишу Next. В следующем окне нам также нужно будет выбрать в верхнем меню режим Close Range, а в нижнем — High Details. Опять нажмем Next, а затем — Run.

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

Лучше удалить посторонние объекты сразу, до того как они будут импортированы вместе с моделью в 3D-редактор. Для этого, прокручивая колесо мыши, нужно максимально отдалить облако точек, открыть вкладку Editing в правой части окна и нажать на кнопку By Hand. Затем, выделяя мышью области «лишних» точек и нажимая на клавишу Del, следует аккуратно убрать все посторонние объекты вокруг модели.

С помощью инструмента Poly («лассо») можно убрать лишние точки с поверхности самой модели, поворачивая ее при помощи мыши.

С помощью инструмента «лассо» можно убрать лишние точки
С помощью инструмента «лассо» можно убрать лишние точки

Когда все готово, нажимаем на кнопку Mesh Extraction. В открывшемся окне выбираем настройки, идентичные предыдущим, нажимаем кнопку Next, а затем — Run. Следующий этап — сделать из полученного объекта модель с текстурами. Для этого воспользуемся кнопкой Textured Mesh Generation. В открывшемся окне можно оставить все предложенные настройки по умолчанию. Снова нажимаем Next и Run. Через несколько минут модель будет готова.

Итог

Теперь нам осталось только экспортировать полученную объемную модель в формат, пригодный для обработки в редакторе Meshmixer или MeshLab. Для этого воспользуемся кнопкой Export Textured Mesh. В окне экспорта выбираем формат OBJ, после чего нажимаем на кнопку Export. Сохраненный таким образом файл можно импортировать в Meshmixer для последующей конвертации модели в формат STL, пригодный для печати на 3D-принтере.

Поделиться: