Моделирование эффектов

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 11.07.2016
Размер файла 7,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Пример: ноды RGB Curves, Defocus,' и Vector Blur.

3. Ноды вывода - эти ноды принимают то, что подается им на вход, производя при этом результат соответствующего типа.

Пример: ноды Composite (определяет конечный результат), Viewer (показывает промежуточный результат) и File Output.

Основная идея нодов заключается в том, чтобы создать некий комплекс, сеть, нодов, соединяя выходы одного или нескольких нодов со входами других нодов. Затем, вы можете установить интересующие вас параметры для каждого из нодов.

Эта сеть называется "цепью", и она показывает, каким образом информация должна обрабатываться, чтобы получился желаемый результат.

6.3 Базовый алгоритм

В качестве базового был разработан следующий алгоритм.

Исходные данные:

· фотография сцены с объектом (одна)

· фотография сцены без объекта (одна)

· серия фотографий объекта, чтобы построить модель.

Алгоритм:

· Строим трехмерную модель в Autodesk 123dcatch на основе фотографий объекта;

· Импортируем ее в Blender;

· Выставляем источники света;

· "Ставим" объект на какую-либо плоскость;

· Работаем с тенями;

· Полученный объект вставляем в фотографию с помощью Cycle Render метода рендеринга изображения по слоям.

Более подробно остановимся на композиции изображения. Для рендеринга используется два слоя:

1 слой: синтетический объект;

2 слой: плоскость.

Элементы освещения принадлежат обоим слоям. Для начала работы с композицией необходимо создать следующие слои рендеринга:

1. Main objects:

Рисунок 31

Рисунок 32

2. Shadows

Рисунок 33

Рисунок 34

3. ShadowsClean

Рисунок 35

Рисунок 36

Алгоритм композиции представлен на рисунке ниже:

Рисунок 37

Описание использованных типов нодов:

· Render layers - нод типа input, подает указанный слой рендеринга на вход;

· Invert - нод типа color, создает негатив поданного на вход изображения;

· Substract - представляет бинарную операцию вычитания, пиксели вычитаются друг из друга, относится к типу нода смешивания;

· Image - нод типа input, подает указанное изображение на вход;

· RGB Curves - для каждого цветового компонента (RGB) или смешанного (C), этот нод позволяет определить кривую Безье, которая изменяет вход (через низ, или x-ось), производя выходную величину (y-ось);

· Multiply - представляет бинарную операцию умножения, возвращает более темный результат, чем любой пиксель в большинстве случаев (кроме случаев, когда один из них равен белому=1), полностью белые слои не изменяют фон совсем, полностью черные слои дают черный результат, относится к типу нода смешивания;

· Alpha Over - нод типа color, позволяет наложить изображения друг на друга;

· Composite - нод типа output, выполняет объединение визуальных элементов из разных источников в единое изображение.

Результат работы такого подхода представлен на рисунке ниже (слева направо: настоящая фотография, смоделированная сцена без эффектов освещения, смоделированная сцена с эффектами освещения):

Рисунок 38

На данном рисунке видно, какую большую роль играет задача моделирования теней для достижения реалистичности изображения.

Данный алгоритм имеет следующие недостатки:

· Требует ручной обработки;

· Невозможно выставить базовую плоскость вручную достаточно точно;

· Инструмент Autodesk 123dcatch не во всех случаях дает качественную модель.

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

6.4 Полуавтоматический метод

На данном этапе было принято решение сменить инструмент для создания трехмерной модели объекта. В качестве такого инструмента был выбран itSeez3D. iPad-приложение Itseez3D, использующее технологии компьютерного зрения, может превратить картинку, полученную с помощью камеры iOS-устройства, в 3D-объект. Чтобы программа выполнила свою задачу, к iPad нужно прикрепить структурный сенсор -- устройство Structure Sensor. Устройство надевается на планшет, после чего нужно сделать несколько снимков нужного объекта. Сфотографировать объект нужно с разных сторон. После этого фотографии передаются в приложение Itseez3D, которое обрабатывает их и создает трехмерную их модель.

При этом созданная трехмерная модель в точности передаст цвет, структуру объекта, преобразуя данные в весьма реалистичную модель. Единственное требование - при съемке объекта камера должна находиться в максимально неподвижном состоянии Приложение Itseez3D создаст трехмерное «селфи» // 3d-expo.ru URL: 3d-expo Источник: http://3d-expo.ru/ru/prilozhenie-itseez3d-sozdast-trehmernoe-selfi (дата обращения: 02.05.2015)..

Данное приложение подаст на вход алгоритму следующие данные:

· model_mesh.ply - финальная трехмерная модель объекта в системе координат rgb-камеры;

· model_texture.jpg - финальная текстура объекта;

· planeCoeffs.yml - уравнение плоскости стола в системе координат rgb-камеры;

· intrinsics_ios.yml - внутренние параметры rgb-камеры;

· ios_image_00000.jpg - изображение стола без объекта;

· ios_image_00001.jpg - изображения стола с объектом (будет использоваться для сравнения).

Для создания полуавтоматического метода была использована возможность Blender работать со скриптами, написанными на языке Python. Python - это интерпретируемый, интерактивный, объектно-ориентированный язык программирования. Он включает модули, исключения, динамическую типизацию, очень высокоуровневые динамические типы данных и классы. Python комбинирует потрясающую мощность с очень ясным синтаксисом.

Скрипты на Python - сильный и универсальный способ расширения функциональных возможностей Blender'а. Большинство областей Blender'а может быть заскриптовано, включая: анимацию, визуализацию, импорт и экспорт, создание объектов и автоматизация повторяющихся задач.

Алгоритм:

· Строим модель в itSeez3D, получаем данные, описанные выше;

· Создаем сцену в Blender без объекта;

· С помощью автоматического скрипта на Python:

o Создаем плоскость на основе полученного уравнения;

o Выставляем камеру согласно параметрам;

o Вставляем объект, текстурируем его;

o Выставляем источники освещения;

o Запускаем рендеринг с помощью Cycle Render метода рендеринга изображения по слоям.

Отдельно следует остановиться на возникшей задаче конвертации параметров камеры, которые использует Itseez3D и Blender. Программное обеспечение Itseez3D использует модель "pinhole camera model" библиотеки алгоритмов компьютерного зрения OpenCV. В данной модели вид сцены формируется с помощью проекции трехмерных точек на плоскость изображения, используя трансформацию:

Или

, где

- координаты трехмерной точки;

- координаты проекции точки в пикселях;

- матрица камеры (внутренних параметров);

- принципиальная точка (обычно центр изображения);

- фокусное расстояние, выраженное в пикселях.

Камера в Blender имеет следующие параметры:

Lens -- характеризует размер линзы, в миллиметрах;

resolution_x/resolution_y - характеризует разрешение итогового изображения;

angle_x/angle_y - позволяет задать фокусное расстояние;

sensor_width/sensor_height - позволяет задать соотношение сторон (например, 4:3).

Для конвертации была написана следующая функция:

def getCameraParameters(K_list):

K = np.reshape(np.array(K_list), (3,3))

resolution_x = round(2 * K[0, 2] + 1)

resolution_y = round(2 * K[1, 2] + 1)

fx = K[0, 0]

fy = K[1, 1]

angle_x = 2 * math.atan(resolution_x/(2 * fx))

angle_y = 2 * math.atan(resolution_y/(2 * fy)) return CameraBlender(resolution_x, resolution_y, angle_x, angle_y)

Для выставления параметров камеры в Blender была написана следующая функция:

def setCameraParameters(camera_blender):

bpy.context.scene.objects.active=bpy.data.objects['Camera']

bpy.context.scene.camera = bpy.data.objects['Camera']

scene = bpy.data.scenes["Scene"]

scene.render.resolution_x = camera_blender.resolution_x

scene.render.resolution_y = camera_blender.resolution_y

scene.render.resolution_percentage = 100

bpy.data.cameras[0].sensor_width = 25.4 * 4

bpy.data.cameras[0].sensor_height = 25.4 * 3

bpy.data.cameras[0].lens_unit == 'FOV'

bpy.data.cameras[0].angle_x = camera_blender.angle_x

bpy.data.cameras[0].angle_y = camera_blender.angle_y

scene.camera.data.angle_x = camera_blender.angle_x

scene.camera.data.angle_y = camera_blender.angle_y

# Set camera rotation in euler angles

scene.camera.rotation_mode = 'XYZ'

scene.camera.rotation_euler[0] = math.radians(180)

scene.camera.rotation_euler[1] = 0

scene.camera.rotation_euler[2] = 0

# Set camera translation

scene.camera.location.x = 0

scene.camera.location.y = 0

scene.camera.location.z = 0

Автоматический скрипт выставляет объект и плоскость под ним, камеру, а также создает необходимые материалы для объекта. Листинг представлен в Приложении 1. Результат работы скрипта представлен на рисунке ниже.

Рисунок 39

Рисунок 40

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

Рисунок 41

Результат работы алгоритма с эффектами освещения представлен на рисунке ниже:

Рисунок 42

Было выявлено, что данный способ имеет ряд преимуществ:

1. Качество полученной модели существенно выше;

2. Доступна дополнительная информация о сцене, позволяющая точно вставить объект, задать параметры камеры;

3. Существенная часть работы автоматизирована;

4. Автоматизация дает возможность дальнейшего поиска наилучшего способа смоделировать тени для достижения максимальной реалистичности.

7. Полуавтоматический метод с моделированием материалов

Следующий этап улучшения алгоритма - работа со способами моделирования освещения. Характер теней существенно зависит от материалов объекта и плоскости.

Моделирование плоскости, на которой стоит объект, состоит из следующих этапов:

1. Текстурирование. С помощью добавления текстуры задается её цвет. Текстура может быть получена с помощью исходного изображения сцены.

2. Свойства материала. С помощью моделирования материала можно задать физические свойства, влияющие на способность отражать свет.

Схема материала представлена на рисунке ниже.

Рисунок 43

С помощью нода Image Texture задается изображение текстуры. В данном случае было взято фоновое изображение.

С помощью нода Glossy BSDF задается способность материала отражать свет.

Освещение задается также с помощью материала плоскости:

Рисунок 44

С помощью нода типа Emission задается свечение поверхности и ее цвет. компьютерный графика полуавтоматический освещение

На рисунках ниже представлены результаты работы данного алгоритма.

Рисунок 45

Рисунок 46

8. RSOLP based алгоритм

В теоретической части был рассмотрен алгоритм RSOLP. Были выявлены следующие его недостати:

- скорость рендеринга изображений, необходимых для работы в RSOLP Compositor превышает предельно допустимые (более недели 168 часов на одно изображение);

- моделирование полной геометрии в виде куба может быть испорчено при любой неточности расчетов. Например, мелкие детали могут сместиться, и изображение полностью будет испорчено;

- время рендеринга очень большое (кроме того, оно удваивается из-за необходимости рендерить изображение два раза: с объектом и без него);

- в связи использованием инструмента LuxRender, возникает дополнительная задача конвертации материалов нового объекта.

На данном этапе было принято решение воспользоваться сильными сторонами алгоритма RSOLP и устранить его недостатки.

В результате работы в RSOLP Annotator может быть получена плоскость, на которой мы хотим поставить объект, а также плоскости, представляющие источники света.

Рисунок 47

В результате рендеринга было получено следующее изображение.

Рисунок 48

Результат работы RSOLP Compositor с полученным в рендеринге изображением представлен ниже.

Рисунок 49

Освещение создано с помощью следующего материала.

Рисунок 50

9. Сравнение

Для сравнения полученных изображений были выбраны следующие метрики:

1. Скорость рендеринга;

2. Субъективная (экспертная) оценка с использованием эталона;

3. Объективная (математическая) оценка с использованием метрики "индекс структурного сходства".

9.1 Скорость рендеринга

Сравним результаты по метрике скорости рендеринга, полученные с помощью RSOLP based алгоритма и с помощью обычного RSOLP. Вставка объекта производилась в изображение ниже.

Рисунок 51

Оба алгоритма работали в одинаковых условиях.

Таблица 2

Разрешение изображения

804х603

Версия Blender

2.74

Версия LuxRender

1.4 x64 OpenCL

Процессор

Intel Core i5-4460 CPU @ 3.20GHx

RAM

8 GB

GPU

Intel HD Graphics 4600

Результат RSOLP based алгоритма представлен на рисунке ниже.

Рисунок 52

Результаты обычного RSOLP алгоритма представлены на рисунке ниже.

Рисунок 53

Сравнение скорости рендеринга представлено на графике ниже.

Рисунок 54

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

9.2 Сравнение с эталоном

Фотореалистичность являетя субъективным критерием, поэтому применим метод сравнения полученного изображения с эталоном. За эталон будем брать реальную фотографию с настоящим объектом.

На рисунке ниже представлено сравнение изображения, полученного базовым алгоритмом (справа), с изображением эталоном (слева).

Рисунок 55

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

На рисунках ниже представлено сравнение изображений, полученных полуавтоматическим методом (справа), с изображениями эталонами (слева).

Рисунок 56

Рисунок 57

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

На рисунках ниже представлено сравнение изображения, полученного полуавтоматическим методом с материалами (справа), с изображением эталоном (слева).

Рисунок 58

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

9.3 Метрика "индекс структурного сходства"

Исторически объективные методы оценки качества изображений основывались на простых математических выражениях, таких как среднеквадратичная ошибка или дисперсия (СКО, англ. название MSE) и пиковое отношение сигнал/шум (ОСШ, англ. название PSNR). Это объясняется сравнительно малой изученностью вопроса о работе зрительной системы человека. Также широкая распространенность данных алгоритмов объясняется простотой их программной реализации и высокой скоростью вычисления. Относительно недавно был предложен более сложный в вычислительном плане алгоритм -- индекс структурного сходства, который показывает хорошую согласованность с экспертными оценками Сидоров, Д.В. Алгоритмы и программные средства для вейвлет-сжатия и оценки качества изображений: дис. канд. тех. наук: 05.13.01. Томск, 2011..

Индекс структурного сходства (SSIM от англ. structure similarity) является одним из методов измерения схожести между двумя изображениями. SSIM-индекс это метод полного сопоставления, другими словами, он проводит измерение качества на основе исходного изображения (не сжатого или без искажений). Отличительной особенностью метода, помимо упомянутых ранее (MSE и PSNR), является то, что метод учитывает "восприятие ошибки" благодаря учёту структурного изменения информации. Идея заключается в том, что пиксели имеют сильную взаимосвязь, особенно когда они близки пространственно. Данные зависимости несут важную информацию о структуре объектов и о сцене в целом SSIM // Википедия. [2015--2015]. Дата обновления: 18.02.2015. URL: http://ru.wikipedia.org/?oldid=68667318 (дата обращения: 18.02.2015)..

SSIM метрика рассчитана на различные размеры окна. Разница между двумя окнами x и y, имеющими одинаковый размер NxN:

где

· - среднее x;

· - среднее y;

· - дисперсия x;

· - дисперсия y;

· - ковариация x и y;

-

переменные:

o L - динамический диапазон пикселей (обычно )

o - константы.

Приведённая формула применима только для яркости изображения, по которой и происходит оценка качества. Полученный SSIM-индекс лежит в пределах от ?1 до +1. Значение +1 достигается только при полной аутентичности образцов Wang Z. et al. Image quality assessment: from error visibility to structural similarity //Image Processing, IEEE Transactions on. - 2004. - Т. 13. - №. 4. - С. 600-612..

Для расчета данной метрики будем использовать два изображения: настоящую фотографию и смоделированное фотореалистичное изображение. Метрика была расчитана для каждого из предложенных методов, а также для алгоритма RSOLP. Результаты представлены на рисунке ниже.

Рисунок 59

Данный график показывает:

· Базовый алгортм дает плохие результаты, но это объясняется недостатками, выявленными в работе выше;

· Полуавтоматический алгоритм дает результат лучше базового на 30,2 %;

· Полуавтоматический алгоритм с материалами дает небольное улучшение по сравнению с полуавтоматическим алгоритмом, однако это зависит от правильного подбора материалов;

· RSOLP-based дает лучший результат, однако требует больше ручной работы.

Выводы

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

Рисунок 60

Рисунок 61

Рисунок 62

В будущем разработанные алгоритмы могут быть усовершенствованы путем добавления автоматического определния положения источника света по целевой фотографии фона Hara K. et al. Light source position and reflectance estimation from a single view without the distant illumination assumption //Pattern Analysis and Machine Intelligence, IEEE Transactions on. - 2005. - Т. 27. - №. 4. - С. 493-505.. Кроме того, полученный метод может быть интегрирован с облачными решениями инструментов для создания трехмерных моделей, такими как Itseez3d.

Заключение

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

Список литературы

1. Criminisi A., Reid I., Zisserman A. Single view metrology //International Journal of Computer Vision. - 2000. - Т. 40. - №. 2. - С. 123-148.

2. Debevec P. Rendering synthetic objects into real scenes: Bridging traditional and image-based graphics with global illumination and high dynamic range photography //ACM SIGGRAPH 2008 classes. - ACM, 2008. - С. 32.

3. Hara K. et al. Light source position and reflectance estimation from a single view without the distant illumination assumption //Pattern Analysis and Machine Intelligence, IEEE Transactions on. - 2005. - Т. 27. - №. 4. - С. 493-505.

4. Karsch K. et al. Rendering synthetic objects into legacy photographs //ACM Transactions on Graphics (TOG). - ACM, 2011. - Т. 30. - №. 6. - С. 157.

5. Lalonde J. F. et al. Photo clip art //ACM Transactions on Graphics (TOG). - ACM, 2007. - Т. 26. - №. 3. - С. 3.

6. Land E. H., McCann J. Lightness and retinex theory //JOSA. - 1971. - Т. 61. - №. 1. - С. 1-11.

7. Liebowitz D., Criminisi A., Zisserman A. Creating architectural models from images //Computer Graphics Forum. - Blackwell Publishers Ltd, 1999. - Т. 18. - №. 3. - С. 39-50.

8. Radiosity (computer graphics)// Wikipedia contributors. [2015--2015]. Дата обновления: 07.05.2015. URL: http://en.wikipedia.org/w/index.php?title=Radiosity_(computer_graphics)&oldid=660948411 (дата обращения: 07.05.2015).

9. RSOLP Annotator // http://kevinkarsch.com URL: http://kevinkarsch.com/?page_id=445 (дата обращения: 01.05.2015).

10. Saxena A., Sun M., Ng A. Y. Make3D: Depth Perception from a Single Still Image //AAAI. - 2008. - С. 1571-1576.

11. SSIM // Википедия. [2015--2015]. Дата обновления: 18.02.2015. URL: http://ru.wikipedia.org/?oldid=68667318 (дата обращения: 18.02.2015).

12. Wang Z. et al. Image quality assessment: from error visibility to structural similarity //Image Processing, IEEE Transactions on. - 2004. - Т. 13. - №. 4. - С. 600-612.

13. Баяковский Ю. М., Галактионов В. А. О некоторых фундаментальных проблемах компьютерной (машинной) графики //Информационные технологии и вычислительные системы. - 2004. - №. 4. - С. 3-24.

14. Ландсберг Г.С. Оптика. - М.: Наука, 1976. - 928 с.

15. Никулин А. Компьютерная геометрия и алгоритмы машинной графики. - БХВ-Петербург, 2005.

16. Никулин Е. А. КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ ОПТИЧЕСКИХ ЭФФЕКТОВ. - 2011.

17. Отражение (физика) // Википедия. [2015--2015]. Дата обновления: 01.05.2015. URL: http://ru.wikipedia.org/?oldid=70525837 (дата обращения: 01.05.2015).

18. Плоскость (геометрия) // Википедия. [2014--2014]. Дата обновления: 19.09.2014. URL: http://ru.wikipedia.org/?oldid=65643247 (дата обращения: 01.05.2015).

19. Преломление // Википедия. [2015--2015]. Дата обновления: 07.03.2015. URL: http://ru.wikipedia.org/?oldid=69070555 (дата обращения: 07.03.2015).

20. Приложение Itseez3D создаст трехмерное "селфи" // 3d-expo.ru URL: 3d-expo Источник: http://3d-expo.ru/ru/prilozhenie-itseez3d-sozdast-trehmernoe-selfi (дата обращения: 02.05.2015).

21. Сигмоида // Википедия. [2015--2015]. Дата обновления: 07.05.2015. URL: http://ru.wikipedia.org/?oldid=70649670 (дата обращения: 07.05.2015).

22. Сидоров, Д.В. Алгоритмы и программные средства для вейвлет-сжатия и оценки качества изображений: дис. канд. тех. наук: 05.13.01. Томск, 2011.

23. Создание фотореалистичного изображения мебели и интерьера // Издательство SM URL: http://3dsmax.sdelaimebel.com/ (дата обращения: 01.06.2015).

24. Фото-реалистичные изображения // Центр инженерных услуг "Модельер" URL: http://www.model-r.ru/fotorealistichnye-izobrazheniya-render (дата обращения: 01.06.2015).

Приложение

Листинг скрипта для Blender на языке Python.

import numpy as np

import yaml

import math

import os

import imp

#To run from console

#filename = "C:\\Documents and Settings\\Home\git\\blenderprojects\\cow\\test.py"

#exec(compile(open(filename).read(), filename, 'exec'))

#meshFile = os.path.join(os.path.dirname(bpy.data.filepath), "model_mesh.ply")

baseDir = "C:\\Documents and Settings\\Home\git\\blenderprojects\\cow\\"

planeFile = baseDir + "planeCoeffs.yml"

cameraFile = baseDir + "intrinsics_ios.yml"

meshName = "model_mesh"

meshFile = baseDir + meshName + ".obj"

texName = "model_texture.jpg"

texFile = baseDir + texName

converter_file = "converter.py"

def readPlaneMat():

f = open(planeFile)

planeMap = yaml.safe_load(f)

f.close()

return planeMap['planeCoeffs']['data']

def calcZ(planeMap, x, y):

return (- planeMap[0] * x - planeMap[1] * y - planeMap[3])/planeMap[2]

def findPointsOnPlane(planeMap):

points = []

#[(0,0,z1),(0,5,z2),(5,5,z3),(5,0,z4)]

x1 = 1

y1 = 1

z1 = calcZ(planeMap, x1,y1)

points.append((x1, y1, z1))

x2 = 1

y2 = -1

z2 = calcZ(planeMap, x2,y2)

points.append((x2, y2, z2))

x3 = -1

y3 = -1

z3 = calcZ(planeMap, x3,y3)

points.append((x3, y3, z3))

x4 = -1

y4 = 1

z4 = calcZ(planeMap, x4,y4)

points.append((x4, y4, z4))

return points

def readCameraMat():

f = open(cameraFile)

dataMap = yaml.safe_load(f)

f.close()

K = dataMap['camera']['K']['data']

#D = dataMap['camera']['D']['data']

#print "D: ", D

width = dataMap['camera']['width']

height = dataMap['camera']['height']

camera = CameraCV(K, width, height)

return camera

def getCameraParameters(K_list):

K = np.reshape(np.array(K_list), (3,3))

resolution_x = round(2 * K[0, 2] + 1) #K[2]

resolution_y = round(2 * K[1, 2] + 1) #K[5]

fx = K[0, 0] #K[0]

angle_x = 2 * math.atan(resolution_x/(2 * fx))

fy = K[1, 1] #K[4]

angle_y = 2 * math.atan(resolution_y/(2 * fy))

return CameraBlender(resolution_x, resolution_y, angle_x, angle_y)

def setCameraParameters(camera_blender):

bpy.context.scene.objects.active = bpy.data.objects['Camera']

bpy.context.scene.camera = bpy.data.objects['Camera']

scene = bpy.data.scenes["Scene"]

scene.render.resolution_x = camera_blender.resolution_x

scene.render.resolution_y = camera_blender.resolution_y

scene.render.resolution_percentage = 100

bpy.data.cameras[0].sensor_width = 25.4 * 4

bpy.data.cameras[0].sensor_height = 25.4 * 3

bpy.data.cameras[0].lens_unit == 'FOV'

bpy.data.cameras[0].angle_x = camera_blender.angle_x

#bpy.data.cameras[0].angle_y = camera_blender.angle_y

scene.camera.data.angle_x = camera_blender.angle_x

#scene.camera.data.angle_y = camera_blender.angle_y

print(scene.camera.data.angle_x)

print(scene.camera.data.angle_y)

# Set camera rotation in euler angles

scene.camera.rotation_mode = 'XYZ'

scene.camera.rotation_euler[0] = math.radians(180)

scene.camera.rotation_euler[1] = 0

scene.camera.rotation_euler[2] = 0

# Set camera translation

scene.camera.location.x = 0

scene.camera.location.y = 0

scene.camera.location.z = 0

def createPlane(points, name):

#scn = bpy.data.scenes.active # link object to current scene

#Define vertices and faces

verts = points

faces = [(0,1,2,3)]

# Define mesh and object variables

planeMesh = bpy.data.meshes.new(name)

planeObj = bpy.data.objects.new(name, planeMesh)

#Set location and scene of object

planeObj.location = (0,0,0)

bpy.context.scene.objects.link(planeObj)

#Create mesh

planeMesh.from_pydata(verts,[],faces)

planeMesh.update(calc_edges=True)

# Create material

white = makeMaterial('White', (1,1,1), (1,1,1), 1)

setMaterial(bpy.data.objects[name], white)

#make the new mesh active

bpy.context.scene.objects.active = bpy.data.objects[name]

#set mesh to 2nd layer

bpy.ops.object.move_to_layer(layers=[(i == 10) for i in range(20)])

def makeMaterial(name, diffuse, specular, alpha):

mat = bpy.data.materials.new(name)

mat.diffuse_color = diffuse

mat.diffuse_shader = 'LAMBERT'

mat.diffuse_intensity = 1.0

mat.specular_color = specular

mat.specular_shader = 'COOKTORR'

mat.specular_intensity = 0.5

mat.alpha = alpha

mat.ambient = 1

return mat

def makeImageMaterial(name):

#make the new mesh active

bpy.context.scene.objects.active = bpy.data.objects[meshName]

#set edit mode

bpy.ops.object.mode_set(mode='EDIT')

bpy.ops.uv.smart_project()

#make material

mat = bpy.data.materials.new(name)

mat.alpha = 1

mat.use_nodes = True

mtex = mat.texture_slots.add()

nodes = mat.node_tree.nodes

material_output = nodes.get("Material Output")

#check if image has been loaded previously

i_index = bpy.data.images.find(texName)

if (i_index == -1):

image = bpy.data.images.load(texFile)

else:

image = bpy.data.images[i]

node_texture = nodes.new(type='ShaderNodeTexImage')

node_texture.image = image

links = mat.node_tree.links

link = links.new(node_texture.outputs[0], nodes.get("Diffuse BSDF").inputs[0])

#add texture to material

bpy.data.objects[meshName].data.materials.append(mat)

bpy.ops.object.mode_set(mode='OBJECT')

return mat

def setMaterial(ob, mat):

me = ob.data

me.materials.append(mat)

def import_mesh():

bpy.ops.import_mesh.ply(filepath = meshFile)

bpy.context.scene.objects.active = bpy.data.objects[meshName]

#set mesh to 1st layer

bpy.ops.object.move_to_layer(layers=[(i == 0) for i in range(20)])

makeImageMaterial('MeshMaterial')

bpy.data.cameras['Camera'].dof_object=bpy.context.scene.objects[meshName]

def import_obj():

#bpy.ops.import_scene.obj(filepath="", axis_forward='-Z', axis_up='Y', filter_glob="*.obj;*.mtl", use_edges=True, use_smooth_groups=True, use_split_objects=True, use_split_groups=True, use_groups_as_vgroups=False, use_image_search=True, split_mode='ON', global_clamp_size=0)

bpy.ops.import_scene.obj(filepath = meshFile, axis_forward='Y', axis_up='Z')

converter = imp.load_source('converter', baseDir + converter_file)

converter.AutoNode()

bpy.context.scene.objects.active = bpy.data.objects[meshName]

bpy.data.objects[meshName].location = (0,0,0)

bpy.data.objects[meshName].rotation_mode = 'XYZ'

bpy.data.objects[meshName].rotation_euler[0] = math.radians(180)

bpy.data.objects[meshName].rotation_euler[1] = math.radians(180)

bpy.data.objects[meshName].rotation_euler[2] = math.radians(180)

#set mesh to 1st layer

bpy.ops.object.move_to_layer(layers=[(i == 0) for i in range(20)])

class CameraCV:

'Represent OpenCV camera intrinsics'

def __init__(self, K, width, height):

self.K = K

self.width = width

self.height = height

def display(self):

print ("K: ", self.K)

print ("width: ", self.width)

print ("height: ", self.height)

class CameraBlender:

'Represent OpenCV camera intrinsics'

def __init__(self, resolution_x, resolution_y, angle_x, angle_y):

self.resolution_x = resolution_x

self.resolution_y = resolution_y

self.angle_x = angle_x

self.angle_y = angle_y

def display(self):

print ("resolution_x: ", self.resolution_x)

print ("resolution_y: ", self.resolution_y)

print ("angle_x: ", self.angle_x)

print ("angle_y: ", self.angle_y)

def main():

print ("camera_cv:")

camera_cv = readCameraMat()

camera_cv.display()

print ("\ncamera_blender:")

camera_blender = getCameraParameters(camera_cv.K)

camera_blender.display()

setCameraParameters(camera_blender)

#Switch to Cycle Render

bpy.context.scene.render.engine = 'CYCLES'

#Cursor to center

bpy.context.scene.cursor_location = (0.0, 0.0, 0.0)

print ("\nplaneCoeffs:")

planeMap = readPlaneMat()

print (planeMap)

points = findPointsOnPlane(planeMap)

if (len(points) != 0):

createPlane(points, "Plane1")

createPlane(points, "Plane2")

if meshFile.endswith('.obj'):

import_obj()

elif meshFile.endswith('.ply'):

import_mesh()

if __name__ == "__main__":

main()

Размещено на Allbest.ru


Подобные документы

  • Понятие модели - искусственно созданного объекта, дающего упрощенное представление о реальном объекте, процессе или явлении. Этапы компьютерного моделирования, их характеристика. Свойства объекта, присущие ему качества, характеристики и признаки.

    реферат [195,9 K], добавлен 04.04.2015

  • Гносеологическая специфика модели, ее определение и классификация. Основные цели и процесс моделирования как средства экспериментального исследования. Трехмерная графика, назначение и обзор интерфейса программы Gmax. Моделирование простейшего объекта.

    курсовая работа [2,2 M], добавлен 25.06.2014

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

    курсовая работа [1,6 M], добавлен 04.06.2013

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

    реферат [29,0 K], добавлен 03.06.2010

  • Общая характеристика игровых движков, история их создания и совершенствования, современное состояние и перспективы. Сущность и значение шейдерных эффектов, программирование данных программ. Механизм и этапы разработки 3D-приложения, его тестирование.

    дипломная работа [2,2 M], добавлен 16.06.2011

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

    курсовая работа [4,3 M], добавлен 03.06.2014

  • Компьютерная графика как одно из популярных направлений использования компьютера, ее виды и особенности применения. Порядок и способы создания цифровых изображений, средства и обработка. Программы САПР и их использование в инженерной деятельности.

    реферат [19,1 K], добавлен 14.09.2009

  • Сущность понятия "коллаж". Особенности создания эффекта фотоколлажа. Техника мозаики, пазла. Понятие о центровом варианте (центрировании). Использование эффектов фильтра при создании работы. Процесс создания огненного текста "CrossFire" в AdobePhotoshop.

    контрольная работа [6,6 M], добавлен 05.01.2013

  • Понятие системы геометрического моделирования. Рассмотрение особенностей формирования изображения объекта с помощью трехмерного геометрического моделирования. Идея каркасного моделирования. Средства реализации каркасной технологии в Autodesk Inventor.

    курсовая работа [623,9 K], добавлен 14.06.2015

  • Средства и способы создания и обработки графических изображений при помощи компьютерной техники. Растровая, векторная, трёхмерная и фрактальная графика, отличия принципов формирования изображения при отображении на экране монитора. Програмные средства.

    реферат [436,4 K], добавлен 26.03.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.