Как сделать лицо из еды

Приложение Megabite от Аарона Рэнделла использует фотографию еды, анализирует каждую отдельную составляющую вашего блюда, затем меняет всё местами, чтобы получить забавную мордочку на тарелке. Под катом — видео и описание алгоритма.

image

Подготовка изображения


Пользователь снимает еду с помощью приложения, размер фото меняется до 1000×1000 пикселей, а затем обрезается по контуру тарелки.

image

Обнаружение контуров


На следующем шаге приложение ищет отдельные предметы, определяя их контуры. Приложение применяет ооператор обнаружения границ изображения Кэнни (2), и получает три изображения для последующей работы (3, 4, 5). Затем в ход идёт функция OpenCV findContours для обнаружения контуров каждой детали. Контуры на изображении ниже отмечены красным цветом. Затем алгоритм отфильтровывает «дочерние» контуры — например, желток в яичнице.

image

Выделение контуров из изображения


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

image

image

Размещение деталей на шаблоне


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

image

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

image

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

image

Результат


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

image

© Geektimes