Как получить 3D-модель из множества 2D-фотографий?

Я аспирант-физик и хочу создать несколько 3D-моделей для своих образцов кристаллов. У нас в лаборатории есть рентгеновский дифрактометр. Он поставляется с гониометром внутри, так что в принципе я могу сделать столько фотографий, сколько потребуется, с любых ракурсов. (Я включил анимацию gif, сделанную из 10 фотографий, сделанных машиной, в качестве примера ниже)

a gif animation made of ten photos taken by the machine

Моя проблема в том, что, учитывая эти 2D-фотографии, могу ли я построить 3D-модели для своих кристаллов в AutoCAD или аналогичном программном обеспечении, чтобы более точно определять углы, длину ребер и объем.

Я новичок в разделе 3D - печати. Я просто подумал, может быть, кто-то здесь сталкивался с подобной проблемой. Было бы очень полезно, если бы кто-нибудь мог сообщить мне какие-либо коды Github, скрипты MATLAB, скрипты Mathematica или программное обеспечение, которые могут выполнить такого рода работу. Я могу попытаться разобраться в этом сам.

, 👍4


3 ответа


3

ДА, можно сделать модель из нескольких снимков, если знать угол поворота между снимками.

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

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

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

При очень сильном контрасте между кристаллом и фоном программное обеспечение может автоматизировать процесс трассировки (например, используйте белый фон и черный кристалл и убедитесь, что на камеру не попадает отражение).

Пример использования Fusion360

Давайте предположим, что у меня есть идеальный кристалл, подобный этому октаэдру, с двумя срезанными концами Octahedron with upper and lower tip cut

Чтобы смоделировать это, нам нужна, по крайней мере, фотография формы XZ и YZ (то есть поворот друг к другу на 90°), которые выглядят следующим образом:

The outlines traced

Но эта форма также соответствовала бы двойному конусу! Поэтому нам понадобятся некоторые промежуточные фотографии, в данном случае снимок под углом 45°, который лежит в плоскости (XY-диагональ)плоскости Z

The traced outlines

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

construction layers

Теперь мы превращаем эти конструктивные грани в моделирующие грани, затем создаем слишком большой объект и вырезаем все это...

Making the modeling faces Creating the cutout Resulting model

Весь рабочий процесс выглядел так для 4 фотографий (0°, 45°, 90°, 135°)

Workflow

Фактический файл дизайна f3D находится здесь.


,

Привет, Триш, спасибо тебе за совет! Я загрузил Auto CAD и 3ds max (3ds max, кажется, идеально соответствует моей цели, когда я просматривал страницу продукта Autodesk), и в настоящее время я работаю над этим. Я обновлю эту страницу, когда разберусь в этом., @Mr. Octopus

Я нашел очень полезный учебник https://www.youtube.com/watch?v=GmIkOJmBv_c. В этом руководстве две фотографии вилки были импортированы в AutoCAD. Сначала по растровым изображениям были прослежены поперечные сечения в двух ортогональных направлениях. Затем разделите поперечное сечение на две колонки. Наконец, пересеките две колонки, чтобы получилась красивая 3D-вилка (14:30 в видео). Мой случай похож, но более сложный. Мне, наверное, нужно около 6 фотографий. Я должен выровнять фотографии по оси вращения и создать 6 столбцов с их поперечными сечениями, прорисованными по фотографиям. Затем я, наконец, пересекаю их. я прав?, @Mr. Octopus

в значительной степени - чем больше фотографий вы делаете, тем больше недостатков вы получаете. программное обеспечение для автоматического растрирования использует несколько 100 фотографий, @Trish

@Mr. Octopus Я добавил простой пример с использованием Fusion 360, но большинство программ должны позволять следовать аналогичному рабочему процессу, @Trish


3

Вдохновленный ответом @Trish и следующим видео на YouTube, я, наконец, разработал способ реконструкции 3D-модели кристалла в AutoCAD.

  1. Импортируйте 6 изображений в AutoCAD. Фотографии сделаны с 6 разных ракурсов с разделением 30 градусов.

  2. Нарисуйте 6 линий длиной 100 вдоль оси Y в плоскости XY.

  3. Используйте команду ALINE, чтобы выровнять ось вращения на фотографиях по добавленным вертикальным линиям.

  4. Используйте команду МАСШТАБИРОВАНИЯ, чтобы изменить масштаб всех 6 фотографий до однородного размера.

  5. Используйте команду ПОЛИЛИНИИ для трассировки поперечных сечений по 6 растровым изображениям.

  6. Используйте команду 3DROTATE для поворота 6 изображений и соответствующих осей вращения и прорисованных поперечных сечений вдоль оси Y. Первое изображение было повернуто на 75 градусов по часовой стрелке при просмотре вдоль оси +Y, второе-на 45 градусов, третье-на 15 градусов, четвертое-на 15 градусов... (Советы: Вращающаяся штуковина будет отображаться только в 3D-режиме. Если вы не видели штуковину, перетащите куб вида справа вверху, чтобы изменить точку обзора, и повторите попытку.) (вид с оси Y) (вид с оси Z)

  7. Используйте команду 3DMOVE для перемещения 6 изображений так, чтобы ось вращения каждого изображения была выровнена по одному кругу в плоскости YZ. (Вам потребуется немного вычислений, чтобы завершить этот шаг) (вид с оси Y) (вид с оси Z)

  8. Используйте команду "ВЫДАВЛИВАНИЕ", чтобы выдавливать 6 поперечных сечений в 6 цилиндров, высота каждого цилиндра должна быть достаточной, чтобы 6 цилиндров пересекались.

  9. Используйте команду INTERSECT, чтобы получить пересекающуюся деталь из 6 цилиндров, это будет нужная модель кристалла.

,

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

Да, но вам также понадобится больше времени. Для меня модель, основанная на 6 фотографиях, - это хороший баланс между качеством и временем. Я очень благодарен вам за ответ, хотя в конце концов я не использовал Fusion360. Ваш ответ очень вдохновил меня., @Mr. Octopus


1

Возможно, вам захочется выполнить поиск по "фотограмметрии". Это программное обеспечение, которое использует множество фотографий для создания 3D-модели. Доктор Фолкингем сделал хороший обзор свободного программного обеспечения в своем блоге:

https://peterfalkingham.com/2016/09/14/trying-all-the-free-photogrammetry/ https://peterfalkingham.com/2017/12/17/free-photogrammetry-software-review-2017/

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

https://colmap.github.io/ https://github.com/cdcseacave/openMVS/wiki/Usage

Я не использовал много коммерческих пакетов, но Pix4D очень хорошо работал для меня.

https://www.pix4d.com/

Я надеюсь, что это поможет вам начать.

,

Спасибо тебе, УрКван3! Вы только что предложили так много программного обеспечения с открытым исходным кодом. Я протестирую их и опубликую другие учебные заметки, если найду какое-либо программное обеспечение полезным., @Mr. Octopus