Как создать эффект обводки Photoshop? - PullRequest
2 голосов
/ 31 октября 2008

Я ищу способ программно воссоздать следующий эффект:

Дайте входное изображение:
вход http://www.shiny.co.il/shooshx/ConeCarv/q_input.png

Я хочу итеративно применить эффект "инсульта".
Первый шаг выглядит так:
шаг 1 http://www.shiny.co.il/shooshx/ConeCarv/q_step1.png

Второй шаг, подобный следующему:
альтернативный текст http://www.shiny.co.il/shooshx/ConeCarv/q_step2.png

и т. Д.

Я предполагаю, что это будет связано с определенным определением края, а затем каким-то образом прослеживать его.
Существует ли известный алгоритм, позволяющий сделать это эффективным и надежным способом?

1 Ответ

6 голосов
/ 31 октября 2008

По сути, пользовательский алгоритм будет, согласно этой теме :

Возьмите окрестность 3x3 вокруг пикселя, пороговое значение альфа-канала и посмотрите, не имеет ли какой-либо из 8 пикселей вокруг пикселя значение альфа-канала, отличное от него. Если это так, нарисуйте круг заданного радиуса с центром в пикселе. Чтобы сделать внутри / снаружи, модулируйте пороговым альфа-каналом (не используйте другую сторону). Вам придется портировать большую окрестность, если радиус круга больше пикселя (что, вероятно, и есть).


Это реализовано с использованием морфологических операций в оттенках серого. Это также тот же метод, который используется для расширения / сокращения выбора. По сути, для перемещения по центру выделения (или альфа-каналу) сначала нужно сделать две отдельные копии выделения. Первый выбор будет расширен на радиус штриха, а второй будет сокращен. Затем непрозрачность обводки будет получена путем вычитания второго выделения из первого.

Для выполнения внутренних и внешних обводок вы должны сжиматься / расширяться вдвое по радиусу и вычитать части, которые пересекаются с исходным выделением.

Следует отметить, что наиболее общий морфологический алгоритм требует O (m * n) операций, где m - количество пикселей изображения, а n - количество элементов в «структурирующем элементе». Однако для определенных особых случаев это можно оптимизировать для операций O (m) (например, если структурирующий элемент представляет собой прямоугольник или ромб).

...