Как реализован фильтр вырезов в фотошопе? - PullRequest
8 голосов
/ 26 октября 2008

В Photoshop есть много классных художественных фильтров , и я бы хотел понять основные алгоритмы.

Один алгоритм, который особенно интересен, это фильтр Cutout (номер 2 по ссылке выше).

Имеет три настраиваемых параметра: количество уровней, простота кромки и точность кромки. Кажется, что количество уровней определяет простой алгоритм постеризации, но то, что делают другие слайдеры, технически ускользает от меня.

Я бы подумал, что они делают что-то, связанное с диаграммами Vornoi или разделением k-средних, но просмотр википедии не привел к чему-то, что явно соответствует тому, что делает Photoshop, особенно с учетом того, насколько быстро фильтр сам себя отображает .

Есть ли источник технических описаний фильтров Photoshop? Кроме того, у вас есть какие-либо мысли о том, как этот конкретный фильтр может быть реализован?

Ответы [ 8 ]

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

Обнаружение краев обычно представляет собой фильтр Собеля или Канни, после чего края соединяются вместе с помощью кода цепи.
Посмотрите что-то вроде OpenCV библиотеки для деталей

3 голосов
/ 04 марта 2009

Вы видели это сообщение . Он объясняет, как получить тот же результат, используя ImageMagic , а IM - opensource .

3 голосов
/ 26 ноября 2008

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

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

0 голосов
/ 20 сентября 2009

Из возни с этим я узнал, что:

  • это детерминировано
  • для достижения конечного эффекта он не выполняет какую-либо пиксельную постеризацию
  • он, вероятно, не использует детектирование границ на основе пикселей, скорее, он работает с областями, а не с границами.
  • вычисляет формы замкнутых многоугольников для рисования (некоторые ребра многоугольника могут перекрываться с краями изображения).
  • когда края многоугольников известны, тогда цвет каждой области, заключенной в края (необязательно принадлежащий одному многоугольнику), окрашивается средним цветом пикселей исходного изображения, которое охватывает эта область.
  • край многоугольника может пересекаться с самим собой. Особенно заметно для простоты высокого края.
  • с уменьшением «простоты линии» число ребер многоугольника увеличивается, но также увеличивается число многоугольников.
  • верность ребра влияет на количество ребер многоугольника линии, но не влияет на число многоугольников
  • высокая точность воспроизведения ребер (= 3) приводит к тому, что у одного полигона очень длинные и очень короткие ребра одновременно, низкая точность воспроизведения (= 1) приводит к тому, что у одного полигона все ребра имеют примерно одинаковую длину
  • Простота высокого края и точность воспроизведения нижнего края, кажется, предпочитают многоугольники, закрепленные на краях изображения, даже за счет здравого смысла.

В целом это выглядит как упрощенная версия алгоритма Live Trace от Adobe Illustrator, в которой вместо кривых используются многоугольники.

... а может и нет.

0 голосов
/ 03 марта 2009

Я предполагаю, что это, вероятно, какое-то определение порога, обнаружение краев (Собел / Кэнни / Робертс / что угодно) и постеризация.

0 голосов
/ 03 марта 2009

Получил простое решение, которое теоретически привело бы к чему-то похожему на этот фильтр. Чем-то похоже на то, что предложил Исмаэль С.

Edge Простота управляет размером окна. Может быть, окно должно быть взвешено.

Но, в отличие от обычных оконных фильтров, в этом случае из этого окна отбирается только часть случайных пикселей фиксированного размера. Размер порции контролируется параметром Fidelity .

Установите цвет пикселя на медиану образца.

Учитывая, что у нас есть некоторый алгоритм постеризации, он применяется впоследствии.

Вот и мы!

Пожалуйста, сообщите результаты, если вы реализуете его.

PS. Я действительно сомневаюсь, что сегментация используется вообще.

0 голосов
/ 28 октября 2008

Количество уровней похоже на то, как выполняется затенение ячеек, и именно так я реализую эту часть в этом случае: вы просто берете эту гистограмму изображения и делите ее на количество «Количество уровней». разделов затем рассчитать среднее значение для каждого раздела. Каждый цвет в гистограмме будет использовать это среднее вместо исходного цвета.

Другие два параметра требуют некоторого размышления, но «Простая кромка», похоже, детонирует количество сегментов, из которых строятся фигуры. Или, скорее: количество улучшений, примененных к некоторым грубым алгоритмам сегментации изображения. Ползунок верности, кажется, делает нечто подобное; он, вероятно, контролирует некоторый порог, когда должны проводиться уточнения.

Это может помочь

0 голосов
/ 26 октября 2008

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

...