Смекни!
smekni.com

«бесполезных полигонов» (стр. 2 из 2)

6. Если удалена одна вершина, то строится четырёхугольник, две вершины которого являются вершинными старого треугольника, лежащие перед пороговым значением, а 2 оставшиеся вершины лежат на отрезке, соединяющем удалённую вершину с двумя оставшимися и имеющими Х координату равную граничному значению. Затем этот четырёхугольник по диагонали делится на два новых треугольника, которые и добавляются в новую модель.

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

Т.о. можно добиться практически идеально симметричной и гладкой (с ровными краями) конечной модели.

Результат после данного этапа представлен ниже.

Рис. 4

Рис. 5

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

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

Очистка модели торса

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

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

Это так же обоснованно тем, что после восстановления модели в районе талии обзор существенно меньше, чем в районе груди ли нижней части живота (если в районе груди обор достигает значения в 190-200 градусов, то значение в районе талии обычно колеблется от 160 до 170 градусов).

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

Таким образом, появилась s-образная форма ломанной, которой отсекается неважные части модели.

Угол, под которым подходят друг к другу части ломаной, вынесен в параметры, в связи с разнообразием моделей и невозможностью подобрать единое число для всех фигур. Обычно это число колеблется от 25 до 35 градусов, но в отдельных ситуациях может выходить за эти пределы.

Так же работа была опробована на совместном скане головы и торса.

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

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

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

Рис. 6


Примеры

Ниже приведён пример изначальной модели(автоматически восстановленной с двух фотографий) и результата применения данной программы. Пример приведён для модели головы.

Рис. 7

После последовательного проведения всех описанных выше этапов получен следующий результат:

Рис.8

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

В результате моей работы была реализована программа на языке C#, имеющая пользовательский интерфейс, которая в качестве единственного аргумента принимает имя файла содержащего исходную 3D модель (полученную алгоритмами восстановление из двух фотографий).

В пользовательском интерфейсе задаются следующие параметры

1. Флажок, говорящий работаем ли только с головой или же с торсом или торсом совместно с головой

2. Параметр Angle — задаёт угол поворота модели относительно оси X. Задавать его надо из расчёта, что в итоге плоскость Z = 0 проходит параллельно желаемому первому срезу (срез через голову и плечи в случае торса или же единственный срез в случае головы)

3. Параметры Top и Bottom — задают процент отсечения полигонов сверху и снизу соответственно. Принимают значение от 0 до 100 с шагом 1.

4. Параметр Back — задаёт процент отсечения полигонов сзади. Принимает значение от 0 до 100 с шагом 1. (при отмеченном флажке отсекается плоскостью, иначе — ломанной (шея, спина, ниже талии))

В результате своей работы программа создаёт модель, обработанную согласно описанному алгоритму, которая не имеет перечисленных в постановке задачи краевых дефектов. Модель сохраняется в файл формата .obj (OBJ — это формат файлов описания геометрии, разработанный в Wavefront Technologies для их анимационного пакета Advanced Visualizer. Формат файла является открытым и был принят другими разработчиками приложений 3D графики и может быть экспортирован/импортирован в большинство 3D редакторов), а так же в файл материалов .mtl, которой используется для привязки текстуры. Совместно с текстурой это составляет полноценную 3D модель, которую можно использовать для дальнейшей работы.

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


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

[1] www.code.google.com/p/opencvsharp/

[2] www.emgu.com/wiki/index.php/Main_Page

[3] www.code.google.com/p/opencvdotnet/

[4] www.mono-project.com/Tao

[5] "Компьютерное зрение" - Л.Шапиро, Дж.Стокман

[6] www.isprs.org/proceedings/XXXVIII/3-W8/papers/p65.pdf

[7] april.eecs.umich.edu/pdfs/strom2010.pdf