Вопрос

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

Введите изображение:
вход 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

И так далее.

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

Это было полезно?

Решение

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

  

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

<Ч>
  

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

     

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

     

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top