8

Photoshop tiene un montón de genial artistic filters, y me encantaría entender los algoritmos subyacentes.¿Cómo se implementa el filtro de recorte de photoshop?

Un algoritmo que es particularmente interesante es el filtro de recorte (número 2 en el enlace de arriba).

Tiene tres parámetros ajustables, Número de niveles, Edge Simplicity y Edge Fidelity. El número de niveles parece conducir un algoritmo directo de posterización, pero lo que los otros controles deslizantes técnicamente me eluden.

Creo que están haciendo algo relacionado con los diagramas de Vornoi o partición k-medias, pero hurgar en wikipedia no ha resultado en nada que se corresponda con lo que Photoshop está haciendo, especialmente considerando qué tan rápido se renderiza el filtro sí mismo.

¿Hay alguna fuente para descripciones técnicas de los filtros de Photoshop? De forma alternativa, ¿tiene alguna idea sobre cómo se podría implementar este filtro en particular?

+0

Guau, esos son geniales. Aprecio mucho más el procesamiento de imágenes estos días después de trabajar en un proyecto que involucró a algunos (aunque mis tareas eran menos complejas que las demás). –

Respuesta

0

Tal vez no sea exactamente lo que está buscando, pero si desea saber cómo funcionan los filtros, puede consultar el código fuente de GIMP. No puedo decir si GIMP tiene un filtro recortable equivalente al que mencionaste, pero vale la pena echarle un vistazo si realmente estás interesado en este campo.

+1

Este fue un buen punto de partida para googlear más, pero desafortunadamente GIMP no tiene un análogo cercano incorporado. Encontré un plugin genial de GIMP llamado [pspi] (http://www.gimp.org/~ tml/gimp/win32/pspi.html), que puede cargar complementos de Photoshop, pero Cutout es uno que no está implementado de esta manera :( – fastcall

6

La detección de bordes suele ser un filtro Sobel o Canny y los bordes se unen con un código de cadena.
mirada en algo así como la biblioteca OpenCV para más detalles

0

El número de niveles parece asemejarse cómo se realiza cell-shading y así es como me gustaría implementar esa parte en este caso: sólo tiene que tomar este histograma de la imagen y divídalo en la cantidad de secciones "N º de niveles", luego calcule un promedio para cada sección. Cada color en el histograma usará ese promedio en lugar de su color original.

Los otros dos parámetros requieren un poco más de reflexión, pero la 'simplicidad del borde' parece detonar el número de segmentos en los que se construyen las formas. O más bien: la cantidad de refinamientos aplicados a algunos algoritmos crudos de segmentación de imágenes. El control deslizante de fidelidad parece hacer algo similar; probablemente controla algún tipo de umbral para cuando los refinamientos deberían tener lugar.

This might help

3

no estoy seguro de que podría haber algún tipo de sombreado de celda, sino que también se ve como un filtro de mediana con un tamaño del grano muy grande o que se aplicó varias veces.

La simplicidad/fidelidad del borde pueden ser opciones que ayuden a decidir si se tiene en cuenta o no un píxel adyacente (o uno que se encuentre dentro del kernel) según la diferencia de color con el píxel actual.

+0

Creo que tienes razón con el filtro mediano. – flodin

0

Obtuve una solución simple, que teóricamente produciría algo similar a ese filtro. De alguna manera similar a lo que sugirió Ismael C.

Edge Simplicity controla el tamaño de la ventana. Tal vez la ventana debe ser ponderada.

Pero, a diferencia de lo que sucede con los filtros de ventana normales, este solo tomaría una porción de píxeles aleatorios de esta ventana. El tamaño de la porción se controla con el parámetro Fidelity.

Establezca el color del píxel en la mediana de la muestra.

Dado que tenemos algún algoritmo de posterización, se aplica después.

Aquí vamos!

Informe los resultados si lo implementa.

PS. Realmente dudo que se use la segmentación en absoluto.

0

Imagino que es probable que haya algunos umbrales, detección de bordes (Sobel/Canny/Roberts/lo que sea) y posterización.

0

De juguetear con ella he descubierto que:

  • es determinista
  • no hace ningún tipo de posterización basado píxeles para lograr efecto final
  • es probable que no utiliza cualquier tipo de detección de bordes basada en píxeles, parece funcionar más bien con áreas que con bordes.
  • calcula las formas de polígonos cerrados para dibujar (algunos de los bordes del polígono pueden solaparse con los bordes de la imagen).
  • Cuando se conocen los bordes de los polígonos, el color de cada área encerrada en los bordes (que no pertenece necesariamente a un polígono) se colorea con el color promedio de los píxeles de la imagen original que cubre el área.
  • borde del polígono puede cruzarse consigo mismo. Especialmente visible para la simplicidad de alto borde.
  • como gotas de "simplicidad de línea", el número de bordes de polígono aumenta, pero también aumenta el número de polígonos.
  • influencias fidelidad borde recuento de línea de borde polígono pero no influye en número de polígonos
  • alta fidelidad de borde (= 3) hace que solo polígono para tener bordes muy largas y muy cortos, al mismo tiempo, baja fidelidad (= 1) hace que solo polígono para tener todos los bordes aproximadamente de la misma longitud
  • La simplicidad de alto borde y la baja fidelidad de los bordes parecen preferir los polígonos anclados en los bordes de la imagen, incluso a costa de la cordura.

En conjunto, parece una versión simplificada del algoritmo de Live Trace de Adobe Illustrator que usa polígonos en lugar de curvas.

... o tal vez no.