Фотомозаики с ближайшими соседями машинное обучение для цифрового искусства

Машинное обучение для создания фотомозаик с ближайшими соседями новое революционное направление в цифровом искусстве

Вот пример!

Анимация увеличения масштаба, рекомендуется просмотр в полноэкранном режиме. (Видео от автора)

Технологический прогресс развивается с головокружительной скоростью и сделал цифровое хранение информации чрезвычайно дешевым и доступным. Кроме того, у большинства людей теперь есть телефоны с камерами, способными снимать изображения высокого качества. Большинство сделанных фотографий просматриваются несколько раз, а затем отправляются на жесткий диск или в облачное хранилище. В результате у людей накапливаются большие фотоархивы. Я не исключение, и так как у меня было немного свободного времени во время карантинных мер COVID-19, мне пришла в голову идея создать программное обеспечение, которое даст вторую жизнь фотографиям в библиотеках людей. Это программное обеспечение создает фотомозаики.

Фотомозаика – это изображение или фото, созданное путем соединения множества маленьких изображений. На гифке и видео выше легко увидеть, сколько маленьких квадратных изображений используется для создания большого изображения. Существует несколько способов создания таких мозаик, например, меньшие квадратные изображения или плитки могут быть выбраны и размещены на большом изображении на основе цвета или структуры изображения. В этом посте мы сосредоточимся на стратегии соответствия цветов и это особенно интересно для аудитории специалистов по науке о данных или машинному обучению, потому что она использует подход моделирования ближайших соседей (KNN).

Постановка проблемы

Как всегда, хорошей практикой является разбиение проблемы на компоненты, необходимые для достижения цели, и создание функций, связанных с этими компонентами. Сначала нам нужно разделить большое или основное изображение на меньшие подразделы (см. Рисунок 1. ниже). После того, как у нас будут маленькие подразделы, мы сможем найти изображение или плитку, которая соответствует каждому подразделу. Мы используем метод соответствия цветов для создания мозаики, и поэтому мы можем сформулировать проблему следующим образом: для каждого подраздела основного изображения найти изображение или плитку, наиболее близкую по цвету.

Рисунок 1: Здесь мы разделили наше основное изображение на квадратные подразделы, обозначенные белой линией. (Изображение от автора)

Структура цветных изображений

Цифровые цветные изображения состоят из различных каналов цветности пикселей, которые, совмещаясь, создают цветное изображение. Часто используются форматы изображений, основанные на красном, зеленом и синем или RGB, в которых цветное изображение состоит из отдельных каналов красного, зеленого и синего. Изображения обычно сохраняются в 8-битном формате, что означает, что значения пикселей для каждого из цветных каналов изменяются в диапазоне от 0 до 255 (2⁸-1).

Рисунок 2: Здесь мы хотим узнать средние значения RGB для как подраздела (вверху), так и для плитки (внизу). В библиотеке нет точного совпадения для этого подраздела, но оно близкое. (Изображение от автора)

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

С помощью сообразительного динамического программирования и эффективных структур данных этот поиск может быть выполнен достаточно быстро. Однако существует серьезный недостаток в этом подходе, который требует решения. Возможно, ваша библиотека изображений плиток неполна, и не все средние значения пикселей RGB представлены. Поэтому поиск плитки с точно совпадающими значениями пикселей RGB не даст результата, см. Рисунок 2. Решением будет поиск следующей плитки с наиболее близким средним значением пикселей RGB. Было проведено обширное исследование с целью определения “близости” в отношении цветов. Например, хорошо известно, что цвета черный и белый вообще не близки. Однако наше решение – это простое решение, в котором используется машинное обучение.

Ближайший цвет с K-Nearest Neighbors

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

Рисунок 3: Среднее значение RGB для подраздела изображено красным цветом. Плитки с близкими значениями RGB изображены оранжевым цветом. Используя KNN, мы можем найти ближайшее совпадение, показанное желтой «X». (Изображение автора)

Метод KNN может оценить все плитки в библиотеке и моделировать среднее значение цвета пикселя. Затем, при поиске соответствующих плиток для каждого подраздела, модель вернет ближайшего соседа или плитку с наиболее близкими значениями цвета. Этот поиск показан на рисунке 3. Использование KNN более надежно, чем выполнение принудительного поиска точного значения, поскольку существуют случаи, когда точное значение может отсутствовать. Под капотом модели KNN могут быть построены с использованием древовидной структуры, что делает ее относительно эффективной для поиска или обхода. Таким образом, производительность также сравнима с другими решениями, о которых мы упоминали. После того, как для каждого цвета подраздела найдены все плитки, можно использовать простой индексирование массива/матрицы, чтобы скомпоновать все изображения плиток и создать окончательную мозаику обложки.

Заключение

Если вам нужна собственная фотомозаика или помощь в ее создании, не стесняйтесь обращаться. Мы можем переосмыслить ваши старые изображения, которые собирают пыль на каком-то жестком диске, и дать им второй шанс на что-то прекрасное. Эй, может быть, они даже могут стать NFT!

Давайте рассмотрим другой пример фотомозаики с другой анимацией. Все анимации создаются программно и будут подробно рассмотрены в следующих публикациях.

Анимация Disperse, рекомендуется просмотр в полноэкранном режиме. (Видео от автора)

Оригинальная статья размещена здесь. Перепечатано с разрешения.