Анимация Фотографий. Открытие Рта



Описание проблемы В настоящее время существуют программы, позволяющие анимировать статичные фотографии.

Прежде всего, речь идет о лицевой анимации и создании определенных выражений лица.

Теоретически проблема решается довольно просто.

Берем 3D модель черепа и добавляем к ней основные мышцы лица.

Фотография обрабатывается как текстура, мы размещаем текстуру на 3D-модели и проводим эксперименты с сокращениями определенных групп мышц.

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

Одним из основных является изменение текстуры при сокращении данной мышцы.

Известны также успешные решения этой проблемы, реализованные в приложениях, ссылки на которые можно найти в Интернете.

При этом существенно используются нейронные сети или выполняется анимация по определенным шаблонам.

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

Ссылка на видео, где реализована данная схема, размещена в конце статьи.



Тигр открывает рот

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

Оригинал показан на рис.

1.

Анимация фотографий.
</p><p>
 Открытие рта

Рис.

1 Голова тигра с отмеченными точками Преобразования основаны на выборе 6 точек: трёх точек, определяющих положение верхней челюсти (точки r0,r1,r2) и трёх точек, определяющих положение нижней челюсти (u0,u1,u2).

На рисунке все точки отмечены крестиками.

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

Точки r0, r2 расположены в углах рта.

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

2.

Анимация фотографий.
</p><p>
 Открытие рта

Рис.

2 Взаимное расположение точек в задаче моделирования открывания рта Кривые на рис.

2 построены с использованием квадратичной аппроксимации.

Каждая точка r имеет координаты Y,X в виде r[0] и r[1].

Например, кривая, построенная из точек r0,r1,r2, задается с помощью фрагмента кода

   

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')

Функция F1(Y) вычисляет, используя номер Y столбца матрицы, значение координаты X (номер строки), в которой находится точка кривой.

Функция F2 строится аналогично для второй кривой, но теперь List=[r0,u0,u1,u2,r2].

С помощью этих двух функций строится новый список, состоящий из всех интервалов матрицы типа А, Б, расположенных между верхней и нижней челюстями (см.

Рис.

2.).



Анимация фотографий.
</p><p>
 Открытие рта

Рис.

3 Построение открытого рта Используя эти конструкции, процедура открытия рта теперь выглядит так:

  • Верхняя губа, определенная списком [r0,r1,r2], остаётся неподвижной.

  • Нижняя губа определяется списком [r0,r1',r2] путем перемещения точки r1 вниз на величину сдвига до позиции r1'.

  • По списку [r0,r1',r2] строится функция F3(Y)
  • Каждый интервал A,B в столбце матрицы изображения с номером Y смещается вниз на величину F3(Y)-F1(Y) и занимает позицию A',B' (см.

    рис.

    3).

Добавив к полученному изображению зубы и язык, получим результат:

Анимация фотографий.
</p><p>
 Открытие рта

Рис.

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

Теги: #анимация #Компьютерная анимация #фотография #лицо

Вместе с данным постом часто просматривают: