Как получить 3D-модель из множества 2D-фотографий?
Я аспирант-физик и хочу создать несколько 3D-моделей для своих образцов кристаллов. У нас в лаборатории есть рентгеновский дифрактометр. Он поставляется с гониометром внутри, так что в принципе я могу сделать столько фотографий, сколько потребуется, с любых ракурсов. (Я включил анимацию gif, сделанную из 10 фотографий, сделанных машиной, в качестве примера ниже)
Моя проблема в том, что, учитывая эти 2D-фотографии, могу ли я построить 3D-модели для своих кристаллов в AutoCAD или аналогичном программном обеспечении, чтобы более точно определять углы, длину ребер и объем.
Я новичок в разделе 3D - печати. Я просто подумал, может быть, кто-то здесь сталкивался с подобной проблемой. Было бы очень полезно, если бы кто-нибудь мог сообщить мне какие-либо коды Github, скрипты MATLAB, скрипты Mathematica или программное обеспечение, которые могут выполнить такого рода работу. Я могу попытаться разобраться в этом сам.
@Mr. Octopus, 👍4
3 ответа
ДА, можно сделать модель из нескольких снимков, если знать угол поворота между снимками.
большинство программ САПР позволяют вставить изображение, например, в качестве фона или проследить его. Мы заинтересованы в дальнейшем использовании:
Мы вставляем изображение, прослеживаем его в слое изображения, затем вставляем следующее изображение, повернутое вокруг оси вращения изображения, и прослеживаем это. Это мы повторяем снова и снова. Получившееся облако очертаний в значительной степени приближается к сфотографированному телу.
Однако есть большая оговорка: все фотографии должны быть в одинаковом масштабе и на одинаковом расстоянии, вращение объекта должно быть вокруг одной оси самого элемента (без колебаний), а вращение между изображениями должно быть известно достаточно точно. Кстати, этот принцип в значительной степени используется при растровом сканировании.
При очень сильном контрасте между кристаллом и фоном программное обеспечение может автоматизировать процесс трассировки (например, используйте белый фон и черный кристалл и убедитесь, что на камеру не попадает отражение).
Пример использования Fusion360
Давайте предположим, что у меня есть идеальный кристалл, подобный этому октаэдру, с двумя срезанными концами
Чтобы смоделировать это, нам нужна, по крайней мере, фотография формы XZ и YZ (то есть поворот друг к другу на 90°), которые выглядят следующим образом:
Но эта форма также соответствовала бы двойному конусу! Поэтому нам понадобятся некоторые промежуточные фотографии, в данном случае снимок под углом 45°, который лежит в плоскости (XY-диагональ)плоскости Z
Как вы видите, чем больше у вас контуров, тем более детализированным становится псевдо-тело - это всего лишь набор вершин и линий, хотя! Но мы можем взять 3 точки и создать на них строительную область, а затем нарисовать грань, чтобы объединить все точки на этих гранях...
Теперь мы превращаем эти конструктивные грани в моделирующие грани, затем создаем слишком большой объект и вырезаем все это...
Весь рабочий процесс выглядел так для 4 фотографий (0°, 45°, 90°, 135°)
Фактический файл дизайна f3D находится здесь.
Вдохновленный ответом @Trish и следующим видео на YouTube, я, наконец, разработал способ реконструкции 3D-модели кристалла в AutoCAD.
Импортируйте 6 изображений в AutoCAD. Фотографии сделаны с 6 разных ракурсов с разделением 30 градусов.
Нарисуйте 6 линий длиной 100 вдоль оси Y в плоскости XY.
Используйте команду ALINE, чтобы выровнять ось вращения на фотографиях по добавленным вертикальным линиям.
Используйте команду МАСШТАБИРОВАНИЯ, чтобы изменить масштаб всех 6 фотографий до однородного размера.
Используйте команду ПОЛИЛИНИИ для трассировки поперечных сечений по 6 растровым изображениям.
Используйте команду 3DROTATE для поворота 6 изображений и соответствующих осей вращения и прорисованных поперечных сечений вдоль оси Y. Первое изображение было повернуто на 75 градусов по часовой стрелке при просмотре вдоль оси +Y, второе-на 45 градусов, третье-на 15 градусов, четвертое-на 15 градусов... (Советы: Вращающаяся штуковина будет отображаться только в 3D-режиме. Если вы не видели штуковину, перетащите куб вида справа вверху, чтобы изменить точку обзора, и повторите попытку.) (вид с оси Y) (вид с оси Z)
Используйте команду 3DMOVE для перемещения 6 изображений так, чтобы ось вращения каждого изображения была выровнена по одному кругу в плоскости YZ. (Вам потребуется немного вычислений, чтобы завершить этот шаг) (вид с оси Y) (вид с оси Z)
Используйте команду "ВЫДАВЛИВАНИЕ", чтобы выдавливать 6 поперечных сечений в 6 цилиндров, высота каждого цилиндра должна быть достаточной, чтобы 6 цилиндров пересекались.
Используйте команду INTERSECT, чтобы получить пересекающуюся деталь из 6 цилиндров, это будет нужная модель кристалла.
чем больше изображений вы используете, тем лучше будут результаты, но это хороший рабочий процесс, если он работает для вас, @Trish
Да, но вам также понадобится больше времени. Для меня модель, основанная на 6 фотографиях, - это хороший баланс между качеством и временем. Я очень благодарен вам за ответ, хотя в конце концов я не использовал Fusion360. Ваш ответ очень вдохновил меня., @Mr. Octopus
Возможно, вам захочется выполнить поиск по "фотограмметрии". Это программное обеспечение, которое использует множество фотографий для создания 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 очень хорошо работал для меня.
Я надеюсь, что это поможет вам начать.
Спасибо тебе, УрКван3! Вы только что предложили так много программного обеспечения с открытым исходным кодом. Я протестирую их и опубликую другие учебные заметки, если найду какое-либо программное обеспечение полезным., @Mr. Octopus
- Эмпирическое правило для мелкого шрифта
- Можно ли использовать 2D-фотографию для получения модели 3D-печати?
- Какие виды зазоров/допусков следует использовать при проектировании деталей, которые подходят друг к другу?
- Инструмент для измерения в STL-файлах
- Каков самый простой способ изменить/изменить размер объекта внутри STL-файла?
- Экспорт STL как ASCII или двоичный?
- Будут ли 3D напечатные игральные кости честными?
- Как сделать стены толще с помощью meshmixer или meshlab
Привет, Триш, спасибо тебе за совет! Я загрузил 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