Фотоконструктор — набор для творчества, который позволяет своими руками по фотографии собрать картину в стиле «пин-арт», формируя изображение на полотне с помощью пинов разного диаметра. Пин — это тонкий заостренный с одной стороны металлический стержень с круглой шляпкой на другой стороне. Конструктор позволяет создавать аватары, персонализированные подарки или открытки из дорогих сердцу фотографий для дорогих сердцу людей.
Задача программистов состояла в создании веб-инструмента визуализации поделки и схемы сборки на основе входного изображения. Деморисунок нужен, чтобы пользователь смог оценить, как будет выглядеть готовое изделие после сборки. Схема сборки предназначена для пошаговой сборки мозаики.
Подготовка изображения
Начнем по порядку. Когда пользователь загружает изображение в фото-конструктор, первое, что нужно проверить, — подходит ли оно для преобразования. Сначала проводятся стандартные валидации: размер (ширина и высота), квадратная ли форма, тип изображения, объем файла. Изображения объемом в гигабайт не подходят! Если проверка пройдена, переходим к следующему шагу — изменению размера изображения под общий стандарт в 600×600 пикселей, чтобы потом основному алгоритму можно было работать с картинкой.
Следом идет предварительная обработка изображения, чтобы в пинах поделка получились более качественной. Пользователю предлагается два варианта предобработки.
- Адаптивное изменение резкости. Резкость становится более интенсивной на краях и менее интенсивной в центре изображения. Для этой цели применяется функция PHP
Imagick::adaptiveSharpenImage. - Выравнивание гистограммы изображения. Для автоматического выравнивания яркости изображения используется функция PHP
Imagick::equalizeImage.
Тестирование предобработки показало, что выходная визуализация и схема сборки получаются более качественным именно в тех случаях, когда применяются оба преобразования. Коснемся алгоритмов улучшения изображения более подробно.
Адаптивное улучшение резкости
Алгоритм адаптивного улучшения резкости (adaptive sharpening) предназначен для изменения четкости и детализации изображения. Основная идея в том, чтобы добавить резкость только там, где это необходимо, избегая усиления шума и артефактов в менее важных и однородных областях. Ниже сформулированы основные шаги и принципы работы алгоритма.