====== Подготовка фотограмметрической модели к печати ====== Одной из важных задач в большинстве прикладных задач является визуализация. Возможность предоставить результат заказчику в лучшем виде. Трехмерные модели отлично отображают изучаемый объект, однако не всегда имеется возможность их предоставить (отсутствие интернета или программы для просмотра, недостаточные мощности компьютера/телефона и т.д.). В таких случаях можно заменить модель ее физическим аналогом. Физическая модель имеет ряд недостатков и преимуществ, но сегодня мы будем говорить о методике ее создания. Не стоит сразу пытаться напечатать полученную в ходе фотограмметрической обработки модель, она имеет множество недочетов, которые в лучшем случае приведут к потраченным времени и расходным материалам. Рассмотрим данную ситуацию на примере обычного малоэтажного здания, расположенного в черте города. Объект отсняли используя комбинированный фотограмметрический метод с использованием наземной и аэросъемки. В ходе обработки была получена вот такая модель: {{ открытый_доступ:аэросъёмка_3dгород:image002.jpg |Рис.1. Фотограмметрическая модель}} По данной модели были получены обмерные чертежи, переданные заказчику, проект был завершен. Однако это совсем не говорит о том, что модель можно взять и распечатать. Первый крупный недочет, который необходимо устранить на этапе фотограмметрической обработки – это сторонние объекты. Чаще всего это бывают деревья и другая растительность, реже - могут быть люди, автомобили и т.п. Работая в программе //Agisoft Photoscan// лучше всего производить фильтрацию по плотному облаку, для этого необходимо перейти в режим просмотра плотного облака. Фильтрацию можно производить в автоматическом (по цветам и углам уклонов) и ручном режиме (выделяя точки или рисуя маски). Первым этапом фильтрации производится классификация точек на три категории – земля, шум и неклассифицированные точки (деревья, дома, машины и т.д.). Для выполнения классификации необходимо зайти в панель **Инструменты** -> **Плотное облако** -> **Классифицировать точки рельефа…**. {{ открытый_доступ:аэросъёмка_3dгород:image004.jpg |Рис.2. Классификация точек рельефа}} В появившемся окне необходимо задать **исходный** класс (если до этого классификация не производилась – необходимо выбрать **Любой класс**). **Максимальный угол (°)**, **Максимальное расстояние(м)**, **Размер ячейки(м)**: {{ открытый_доступ:аэросъёмка_3dгород:image006.jpg |Рис.3. Параметры классификации точек рельефа}} После автоматической классификации точек, часть точек примут новый класс (земля или шум). Открыв отображение классификации точек рельефа {{открытый_доступ:аэросъёмка_3dгород:image008.jpg?nolink&20|}} , можно увидеть, насколько корректно произведена классификация. {{ открытый_доступ:аэросъёмка_3dгород:image010.jpg |Рис.4. Результаты классификации}} Важно заметить, что правильная классификация возможна только в случае наличия достаточно точной привязки (в примере используются координаты центров проекций камеры, полученные из одночастотного **GPS** типа **UBLOX-Neo6**), так как классификация производится по углам отклонения от горизонта. Далее необходимо отделить здания от растительности. Сделать это можно изменяя параметры классификации, добиваясь того, чтобы выделились только дома, создав для них отдельный класс, а потом производя выделение растительности. Можно это сделать и вручную. Для этого на облаке выделяются интересующие объекты, используя наиболее подходящие типы выделения – прямоугольное, овальное или произвольное. При этом для объединения выделений используется клавиша **Ctrl**, а для удаления выделения – **Shift**. {{ открытый_доступ:аэросъёмка_3dгород:image012.jpg |Рис.5. Виды выделений}} После выделения необходимых точек им можно присвоить определенный класс используя панель **Инструменты** -> **Плотное облако** -> **Назначить класс…**(или комбинацией клавиш **Ctrl**+**Shift**+**C**). {{ открытый_доступ:аэросъёмка_3dгород:image014.jpg |Рис.6. Ручная классификация}} Некоторым массивам или отдельным точкам нет необходимости назначать определенный класс, а можно их сразу удалить. К таким точкам можно отнести шумы: {{ открытый_доступ:аэросъёмка_3dгород:image016.jpg |Рис.7. Удаление шумов}} После удаления всех лишних точек, необходимо создать отфильтрованную модель. В случае с созданием модели рельефа – необходимо использовать только точки, классифицированные как //«Земля»//, а в случае с созданием трехмерных моделей зданий – имеет смысл удалить все шумы и деревья. Модели не должны иметь отверстий, поэтому при построении необходимо включить интерполяцию. Полученный результат необходимо экспортировать для дальнейшей обработки. Для этого необходимо зайти в панель **Файл** -> **Экспорт модели…**. Желательно использовать формат **obj**. На этом работа в //Agisoft Photoscan// закончена, можно сохранить проект и закрыть программу. Полученный результат открываем в ПО //Meshmixer//. {{:аэросъёмка_3dгород:image018.jpg?nolink&20|}} Открывшаяся модель может отображаться некорректно (развернута, отмасштабирована). {{ открытый_доступ:аэросъёмка_3dгород:image_020.jpg |Рис.8. Отфильтрованная модель в Agisoft Photoscan}} Первым делом модель необходимо развернуть и опустить на поверхность рабочего стола. Для этого на левой панели необходимо выбрать группу **Edit**, внутри которой использовать инструмент **Transform** (или быстрая клавиша T). Спроецировать модель на стол можно также при помощи инструмента **Align**. После успешной трансформации можно перейти к созданию основания для печати. {{ открытый_доступ:аэросъёмка_3dгород:image_022.jpg |Рис.9. Трансформация модели}} Открыв панель **Select** выделяем целиком всю модель. Это можно сделать при помощи выделения-лассо или двойным кликом. Выделив весь объект, необходимо использовать инструмент **Edit/Extrude**. В появившемся окне поставить **EndType Flat**, а затем флажком **Offset** выставить высоту подстилающей платформы. {{ открытый_доступ:аэросъёмка_3dгород:image024.jpg |Рис.10. Создание подложки}} {{ открытый_доступ:аэросъёмка_3dгород:image026.jpg |Рис.11. Параметры создания подложки}} Полученный результат можно сохранить в формате **STL**. Далее эту модель стоит открыть в программе //NetFabb//, для исправления основных ошибок модели. При открытие лучше сразу установить флажок над пунктом исправление частей. {{ открытый_доступ:аэросъёмка_3dгород:image028.jpg |Рис.12. Импорт модели в NetFabb}} Первым этапом стоит вылечить модель, удалив все лишние поверхности, замкнув все отверстия, поправив полигоны. Большинство из этих задач решаются автоматически. Для удаления всех лишних поверхностей необходимо использовать инструмент **Repair** {{:аэросъёмка_3dгород:image030.jpg?nolink|}} и зайти во вкладку **Shells**. Чаще всего необходимо удалить все поверхности кроме одной (самой большой по площади). Выбрав все поверхности удаляем их нажатием клавиши **Del**. {{ открытый_доступ:аэросъёмка_3dгород:image032.jpg |Рис.13. Удаление лишних поверхностей}} После необходимо подтвердить удаления нажав на кнопку **Apply Repair**. Старую версию модели можно не сохранять (выбрать **Remove old Part**). После лечения модели, ее уже можно отправить на печать, но лучше поправить ее края, обрезав все лишнее. Для этого выберите удобный угол обзора (сверху или сбоку, в зависимости от плоскости реза), после чего нажмите на панели отсечения плоскостей (**Clip planes**) на центр одного из направлений, создав соответствующую плоскость реза. Плоскость можно переместить при помощи ползунка или задав положение в мм. {{ открытый_доступ:аэросъёмка_3dгород:image034.jpg |Рис.14.Создание плоскостей для отсечения}} Для обрезки необходимо нажать на кнопку {{:аэросъёмка_3dгород:image036.jpg?nolink&20|}} . В появившемся окне можно убрать галочку на создание новой группы и поставить галочку для удаления исходной модели. После чего нажать на кнопку **Cut**. {{ открытый_доступ:аэросъёмка_3dгород:image038.jpg |Рис.15. Отсечение плоскостью}} Обрезанную деталь можно удалить. Обрезание следует произвести для всех трех направлений XYZ. {{ открытый_доступ:аэросъёмка_3dгород:image040.jpg |Рис.16. Удаление отрезанных поверхностей}} В итоге должна получиться аккуратно обрезанная модель, с подложкой и без несопряженных поверхностей: {{ открытый_доступ:аэросъёмка_3dгород:image042.jpg |Рис.17. Отредактированная модель}} {{ открытый_доступ:аэросъёмка_3dгород:image044.jpg |Рис.18. Отредактированная модель}} Результат сохраняется в формате **STL** и может быть открыт в программах для подготовки печатного G-кода. {{ открытый_доступ:аэросъёмка_3dгород:image046.jpg |Рис.19. Экспорт модели}} {{ открытый_доступ:аэросъёмка_3dгород:image048.jpg |Рис.20. Импорт модели в Polygon 2.0.}} В случае, если в качестве исходных данных используется карта высот, то для создания модели можно использовать программы, способные преобразовывать градации цвета в координаты. Одной из таких программ является //Cura//, предназначенная для работы с принтером //Ultimaker//. Однако подобные программы работают только с подготовленными 8-битными изображениями (чаще формата **jpg**). //Agisoft Photoscan// на выходе дает изображение 32бит с плавающей запятой в формате **tiff** (**Geotiff**). Для перевода в требуемый формат можно использовать различные геоинформационные системы, или графические редакторы. Мы будем рассматривать вариант с преобразованием карты высот в программе //Adobe Photoshop//. Открыв файл карты высот в Photoshop мы увидим белое пятно на черном фоне, что связано с битностью изображения. Для приведения изображения в 8 бит в панели **Изображение** -> **Режим** -> **8 бит** -> **канал…**. {{ открытый_доступ:аэросъёмка_3dгород:image050.jpg |Рис.21.Изменение битности изображения в Adobe Photoshop}} В появившемся окне параметров указываем **Способ: Выровнять гистограмму**, после чего видим, как изображение приняло нормальный вид. {{ открытый_доступ:аэросъёмка_3dгород:image052.jpg |Рис.22. Выбор способа преобразования изображения в 8 бит}} {{ открытый_доступ:аэросъёмка_3dгород:image054.jpg |Рис.23. Полученное изображение 8 бит/канал}} Если использовать подобное изображение, то модель будет создана и на участок, где карты высот нет, поэтому перед сохранением изображения его надо обрезать, оставив только рабочую область: **Изображение** -> **Размер холста…**(или сочетание клавиш **Alt**+**Ctrl**+**C**). {{ открытый_доступ:аэросъёмка_3dгород:image056.jpg |Рис.24. Обрезка изображения}} {{ открытый_доступ:аэросъёмка_3dгород:image058.jpg |Рис.25. Параметры обрезки изображения}} На полученном изображении могут оставаться участки, не имеющие информации (черные). Чтобы они не испортили напечатанную модель, эти участки можно замазать при помощи инструмента **Штамп**: {{ открытый_доступ:аэросъёмка_3dгород:image060.jpg |Рис.26. Инструмент “Штамп”}} {{ открытый_доступ:аэросъёмка_3dгород:image062.jpg |Рис.28. Параметры импорта изображений в Cura Ultimaker}} Полученное изображение сохраняется в формате **Jpeg**. Модель для печати мы будем подготавливать в программе для подготовки заданий для печати //Cura Ultimaker// (https://ultimaker.com/en/products/cura-software). После импорта изображения появится меню основных настроек создаваемой трехмерной модели: **Высота**, **Высота основания**, **Ширина**, **Глубина**, **Какой цвет выше**, **Размытие**. {{ открытый_доступ:аэросъёмка_3dгород:image064.jpg |Рис.28. Параметры импорта изображений в Cura Ultimaker}} {{ открытый_доступ:аэросъёмка_3dгород:image_066.jpg |.29. Модель, полученная по карте высот}} Полученную модель можно сохранить в формате **STL** и использовать для печати или работе на фрезере.