Описание проблемы В настоящее время существуют программы, позволяющие анимировать статичные фотографии.
Прежде всего, речь идет о лицевой анимации и создании определенных выражений лица.
Теоретически проблема решается довольно просто.
Берем 3D модель черепа и добавляем к ней основные мышцы лица.
Фотография обрабатывается как текстура, мы размещаем текстуру на 3D-модели и проводим эксперименты с сокращениями определенных групп мышц.
При реализации данной схемы возникает большое количество проблем.
Одним из основных является изменение текстуры при сокращении данной мышцы.
Известны также успешные решения этой проблемы, реализованные в приложениях, ссылки на которые можно найти в Интернете.
При этом существенно используются нейронные сети или выполняется анимация по определенным шаблонам.
В данной статье рассмотрен простейший случай, когда на фотографии, сделанной спереди, нужно открыть рот. Оказывается, в этой ситуации достаточно обычной квадратичной интерполяции.
Ссылка на видео, где реализована данная схема, размещена в конце статьи.
Тигр открывает рот
Все используемые приемы мы проиллюстрируем фотографией головы тигра, которая должна открыть пасть.Оригинал показан на рис.
1.
Рис.
1 Голова тигра с отмеченными точками Преобразования основаны на выборе 6 точек: трёх точек, определяющих положение верхней челюсти (точки r0,r1,r2) и трёх точек, определяющих положение нижней челюсти (u0,u1,u2).
На рисунке все точки отмечены крестиками.
Следует сразу отметить, что мы работаем с растровым изображением, представленным матрицей, и все рассматриваемые точки имеют целочисленные координаты, совпадающие с номерами строк и столбцов матрицы.
Точки r0, r2 расположены в углах рта.
Схема точек представлена на рис.
2.
Рис.
2 Взаимное расположение точек в задаче моделирования открывания рта Кривые на рис.
2 построены с использованием квадратичной аппроксимации.
Каждая точка r имеет координаты Y,X в виде r[0] и r[1].
Например, кривая, построенная из точек r0,r1,r2, задается с помощью фрагмента кода
Функция F1(Y) вычисляет, используя номер Y столбца матрицы, значение координаты X (номер строки), в которой находится точка кривой.from scipy.interpolate import interp1d List = [r0,r1,r2] Args = [Pr[0] for Pr in List] Values = [Pr[1] for Pr in List] F1 = interp1d(Args,Values,kind='quadratic')
Функция F2 строится аналогично для второй кривой, но теперь List=[r0,u0,u1,u2,r2].
С помощью этих двух функций строится новый список, состоящий из всех интервалов матрицы типа А, Б, расположенных между верхней и нижней челюстями (см.
Рис.
2.).
Рис.
3 Построение открытого рта Используя эти конструкции, процедура открытия рта теперь выглядит так:
- Верхняя губа, определенная списком [r0,r1,r2], остаётся неподвижной.
- Нижняя губа определяется списком [r0,r1',r2] путем перемещения точки r1 вниз на величину сдвига до позиции r1'.
- По списку [r0,r1',r2] строится функция F3(Y)
- Каждый интервал A,B в столбце матрицы изображения с номером Y смещается вниз на величину F3(Y)-F1(Y) и занимает позицию A',B' (см.
рис.
3).
Рис.
4 Голова тигра с открытой пастью Очевидно, что эта процедура распространяется на анимацию других объектов, открывающих рот. Посмотреть алгоритм в действии можно здесь Пример анимации .
Теги: #анимация #Компьютерная анимация #фотография #лицо
-
Ароматичность
19 Oct, 24 -
Продвигайте Свой Сайт Через Каталоги Статей
19 Oct, 24 -
Со Ссылкой На Источники «Комильфо»
19 Oct, 24 -
Гугл-Метр
19 Oct, 24 -
Киберпанк Игра
19 Oct, 24