предисловие
Пиксельный ветер впервые появился в 8-битных видеоиграх.Из-за размера компьютерной памяти и одного цвета дисплея для представления контента можно использовать лишь небольшое количество пикселей, но многие классические пиксельные игры были созданы. С увеличением объема памяти и разрешения экрана ограничение памяти и средств отображения больше не является проблемой, и пиксельный ветер постепенно превратился в уникальный творческий стиль.
Общий процесс рисования пиксельной раскраски включает рисование линий, раскрашивание и т. д., а рисование пиксель за пикселем занимает много времени. Некоторые популярные художественные методы, такие как рисование линий и рисование, постепенно превратились в методы автоматической или полуавтоматической генерации. Эта статья будет реализована с нуляSLIC
[1] и реализовать инструмент для создания рисунков пикселей.
Что такое алгоритм SLIC
Причина, по которой отрисовка пикселей не является простой, заключается в том, что прямое понижение дискретизации не может точно захватить ключевые пиксели, и легко потерять информацию о границах, а сгенерированная окраска пикселей часто неудовлетворительна. Ручное подключение и раскрашивание — все, чтобы выбрать соответствующие пиксели. Отсюда наша проблема заключается в том, как выбрать подходящие пиксели для окраски.
Во-первых, введем понятие — суперпиксель. Суперпиксель — это технология сегментации изображения, предложенная и разработанная Сяофэном Реном в 2003 году, которая относится к блокам пикселей неправильной формы с определенной визуальной значимостью, состоящим из соседних пикселей со сходной текстурой, цветом, яркостью и другими характеристиками [1].
Разделив изображение на суперпиксели, можно получить похожие кластеры пикселей, и подобные пиксели будут заполнены одним и тем же цветом, и результирующая покраска пикселей будет более разумной.
Методы сегментации суперпикселей включают извлечение контуров, кластеризацию, градиентное восхождение и так далее. бумага[1]
ПредложенныйSLIC
Алгоритм сегментации суперпикселей (простая линейная итеративная кластеризация,simple linear iterative clustering
) является одним из них, основанным наK-means
Алгоритм кластеризации в соответствии с характеристиками цвета и расстояния пикселей для достижения хороших результатов сегментации по сравнению с несколькими алгоритмами сегментации суперпикселей,SLIC
Он имеет преимущества простого и гибкого, хорошего эффекта и высокой скорости обработки.
Как реализовать алгоритм SLIC
SLIC
Основной процесс выглядит следующим образом:
-
Предварительная обработка изображения.
преобразовать изображение из
RGB
Преобразование цветового пространства вCIE-Lab
цветовое пространство,Lab
Цветовое пространство больше соответствует зрительному восприятию цвета человеком. Расстояние в этом пространстве может отражать разницу в цвете, ощущаемую людьми, и соответствующий расчет будет более точным.Lab
Цветовое пространство также имеет три канала, которыеl
,a
,b
,вl
Представляет яркость, диапазон значений[0,100]
,a
представляет компоненты от зеленого до красного в диапазоне[-128,127]
,b
Представляет компоненты от синего до желтого в диапазоне[-128,127]
.RGB
иLAB
Не существует формулы прямого преобразования междуRGB
Преобразовать вXYZ
Преобразование цветового пространства вLAB
, см. полный код в конце текста. -
Инициализировать кластерные центры.
Количество суперпикселей определяется по параметрам, то есть на сколько областей нужно разделить. Предположим, что изображение имеет
N
пикселей, которые, как ожидается, будут разделены наK
суперпикселей, каждый размеромN/K
, расстояние между соседними центрами равноS=Sqr(N/K)
,получитьK
координаты кластера. -
Оптимизируйте начальные центры кластеров. в центре кластера
3*3
По соседству пиксель с наименьшим градиентом выбирается в качестве нового центра кластера.Изображение рассматривается как двумерная дискретная функция, а градиент является производным от этой функции.При изменении значений соседних пикселей будет градиент, причем градиент пикселей на краю самый большой. Перемещение центра кластера в место с наименьшим градиентом может предотвратить его попадание на контур края и повлиять на эффект кластеризации.
Вычисление градиента дискретных градиентов здесь подробно не выводится.Поскольку он содержит несколько квадратов и квадратных корней, объем вычислений велик, и он обычно упрощается до операции аппроксимации квадратного и квадратного корня с абсолютными значениями. Упрощенные расчетные координаты
(i,j)
Формула градиента точки пикселя:в
(i+1,j)
и(i,j+1)
координаты точки справа от пикселя и точки под пикселем.l(a,b)
за(a,b)
значение канала яркости пикселя в координатахl
. -
Вычислите расстояние между точкой пикселя и центром кластера.
В районе центра скопления расстояние S
2S*2S
Вычислите расстояние между точкой пикселя и центром каждого кластера в окрестности .Расстояние здесь евклидово расстояние, общее расстояние
D
Зависит отdc
цветовое расстояние иds
Космическая дистанция состоит из двух частей. Формула выглядит следующим образом:Если напрямую
l
,a
,b
,x
,y
Объединение в вектор для расчета расстояния при изменении размера суперпикселя,x
,y
Значение может быть очень большим, например, если график1000*1000
, пространственное расстояние может достигать1000*Sqr(2)
, а цветовое расстояние не более10*Sqr(2)
, в результате чего получается окончательное вычисленное значение расстояния, пространственное расстояниеds
Вес слишком большой.Поэтому его нужно нормализовать и разделить на максимальное значение, то есть начальную ширину точки суперпикселя.
S
, который сопоставляет значение с[0,1]
.И расстояние цветового пространства также даст фиксированное значение
m
настроить вес влияния цветового расстояния и пространственного расстояния,m
Диапазон значений[1,40]
.Формула расстояния становится
когда
m
Чем больше цветовое пространство разделено наm
Чем меньше значение, тем больше вес пространственного расстояния, тем более правильными будут сгенерированные пиксели.m
Чем он меньше, тем больше вес цветового расстояния, тем компактнее будет суперпиксель по краям и тем более неправильная форма и размер. -
Классификация пикселей.
Категория каждого пикселя помечается как категория с наименьшим расстоянием от центра его кластера.
-
Пересчитать центры кластеров.
Вычислите среднее векторное значение всех пикселей, принадлежащих одному и тому же кластеру, и снова получите центр кластера.
-
повторять
4~6
процесс.Пока расстояние между старым центром кластера и новым центром кластера не станет меньше определенного порога или не достигнет определенного числа итераций, вообще говоря, когда число итераций достигнет
10
, алгоритм может достичь сходимости. -
Кластерная оптимизация.
В конце итерации могут быть изолированные пиксели, не принадлежащие к тому же связанному домену, что и центр кластера, и алгоритм связности можно использовать для их присвоения ближайшей метке кластера.
Конкретный алгоритм реализации в статье не приводится. Сценарий применения этой статьи заключается в создании пиксельных рисунков, при этом пиксели будут подвергаться субдискретизации и не будут уточняться для каждого пикселя, поэтому в этой статье не проводится оптимизация кластеризации.
Подводя итог, процесс алгоритма SLIC примерно такой же, какK-means
Согласован, итеративно вычисляет кластер с наименьшим расстоянием, разница в том, что только для центра кластераS
Вычисление выполняется в пикселях на расстоянии, что сокращает количество вычислений.
Создание пиксельной графики
на основеSLIC
алгоритм, мы уже можем разделить граф наN
суперпиксели. Пиксели в каждом суперпикселе похожи. То есть каждый пиксель классифицируется как суперпиксель с центром кластера. Затем назначьте цвет пикселя цвету его центра кластера, чтобы получить желаемый эффект.
Установите определенный размер шагаstride
,использоватьCanvas
, каждыйstride
Каждому пикселю присваивается цвет его центра кластера, то есть получается окончательный результат пикселизации.
И все субъективные ощущения от рисования пикселей непостоянны, чтобы предоставить пользователям больше выбора и получить удовлетворительные результаты. Могут быть раскрыты дополнительные параметры ручного вмешательства, такие как отмена условия завершения оптимизации кластеризации и установка количества итераций пользователем, а также размер шага конечного значения пикселя. Параметры, устанавливаемые вручную, включают
- Супер размер пикселя
blocksize
;blocksize
Чем меньше значение, тем тоньше сегментация суперпикселя. - количество итераций
iters
;iters
Чем больше значение, тем точнее результат сегментации и больше время расчета. - веса цветового пространства
weight
;weight
Чем больше значение, тем больше влияние цвета на результат сегментации. - Возьмите размер шага в пикселях
stride
;stride
Чем меньше значение, тем ближе сгенерированное растровое изображение к суперпикселю и тем оно тоньше.
Реализовать пользовательский интерфейс
Как инструмент, он, естественно, нуждается в пользовательском интерфейсе, а внешний интерфейс основан наHTML/Javascript/CSS
построить, использоватьCanvas API
рисует содержимое изображения, пока панель взаимодействия с пользователем выбираетdat.gui
[3] Библиотеки.dat.gui
Это легкая библиотека графического интерфейса, которая очень удобна для изменения параметров и часто используется в качестве демонстрации визуального демо. Поддерживаемые типы параметров включаютNumber
,String
,Boolean
, пользовательские функции и т. д. Соответствующие ответные события могут быть привязаны к различным свойствам, и события автоматически запускаются при изменении значения свойства.
Добавьте следующие свойства и события для инструмента «Создать пикселизацию»:
- когда
iters、stride、blockSize、weight
(вес цветового пространства m) повторить при изменении параметраSLIC
Алгоритм расчета и перерисовка результата расчета; - Добавить к
Upload image
иExport image
кнопка, которая позволяет пользователям загружать изображения и загружать пиксельные изображения;
рисование изображенияCanvas
наложение слоя на слой холстаCanvas
Холст, чтобы визуализировать результаты алгоритма, добавляя следующие функции
-
grid
Переключатель определяет, следует ли рисовать пиксельную сетку; -
Centers
Переключатель управляет отображением центра кластера; -
Contours
Переключатель управляет отображением контура края кластера;
где центральная точка кластераCenters
Розыгрыш напрямую используетctx.fillRect
Просто введите координаты центральной точки.
контур суперпикселяContours
Для рисования необходимо сначала рассчитать точки контура.
может сравнить каждый пиксель с окружающим8
Если количество пикселей с разными центрами кластеров больше, чем2
, значит вокруг данного пикселя более двух точек разных категорий, то эта точка является контуром. Эффект следующий:
Наконец, вы получаете простой инструмент для создания пиксельной графики.
Адрес кода полной версии (версия JS)
использованная литература
[1] Ачанта Р., Шаджи А., Смит К., Луччи А., Фуа П., Сусстранк С. Суперпиксели SLIC, Технический отчет, IVRG CVLAB, 2010.
[2] Gerstner T , Decarlo D , Alexa M , et al. Pixelated image abstraction with integrated user constraints[J]. Computers & graphics, 2013.