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

image



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


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

image

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


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

image

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


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

image

image

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


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

image

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

image

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

image

Результат


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

image

Комментарии (11)


  1. Namynnuz
    05.02.2016 20:49

    А теперь нужно прогнать результат через гугловскую нейросеть.


  1. gris_stav
    05.02.2016 20:49

    Удивительна мотивация автора приложения, который зачем-то использовал такие сложные алгоритмы для шуточного приложения.