usar una silueta recorte recortar máscara mascara imagen cómo crea como algorithm language-agnostic image-processing reverse-engineering photoshop

algorithm - una - mascara de recorte photoshop 2018



¿Cómo se implementa el filtro de recorte de photoshop? (8)

Tal vez no sea exactamente lo que está buscando, pero si le gusta 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.

Photoshop tiene muchos filtros artísticos geniales, y me encantaría comprender los algoritmos subyacentes.

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 la partición de k-means, pero hurgar en wikipedia no ha resultado en nada que se corresponda obviamente con lo que Photoshop está haciendo, especialmente teniendo en cuenta qué tan rápido se renderiza el filtro.

¿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?


El número de niveles parece asemejarse a cómo se realiza el sombreado de células y así es como implementaría esa parte en este caso: simplemente tome 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 más reflexión, pero la ''simplicidad del borde'' parece detonar la cantidad 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.

Esto podría ayudar


No estoy seguro de que pueda tratarse de algún tipo de sombreado celular, pero también parece un filtro mediano con un tamaño de kernel 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) en función de la diferencia de color con el píxel actual.



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


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 ocurre 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 algunos algoritmos de posterización, se aplica después.

¡Aquí vamos!

Informe los resultados si lo implementa.

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


De retocar con eso, descubrí que:

  • es determinista
  • no hace ningún tipo de posterización basada en píxeles para lograr el efecto final
  • probablemente no utiliza ningún 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 superponerse 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.
  • el borde del polígono puede cruzarse consigo mismo. Especialmente visible para la simplicidad de alto borde.
  • a medida que disminuye la "simplicidad de línea", aumenta el número de bordes de polígono, pero también aumenta el número de polígonos.
  • la fidelidad del borde influye en el recuento de bordes del polígono de línea, pero no influye en el recuento de polígonos
  • la alta fidelidad de borde (= 3) hace que un solo polígono tenga bordes muy largos y muy cortos al mismo tiempo, la baja fidelidad (= 1) hace que un solo polígono tenga todos los bordes aproximadamente de la misma longitud
  • la simplicidad de los bordes altos 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.


La detección de bordes suele ser un filtro Sobel o Canny, luego los bordes se unen con un código de cadena.
Mira algo como la biblioteca OpenCV para más detalles