Pregunta

Estoy buscando una manera de recrear programáticamente el siguiente efecto:

Dar una imagen de entrada:
entrada http://www.shiny.co.il/shooshx/ConeCarv/q_input .png

Quiero aplicar iterativamente el " trazo " efecto.
El primer paso se ve así:
paso 1 http://www.shiny.co.il/shooshx/ConeCarv/ q_step1.png

El segundo paso como este:
texto alternativo http://www.shiny.co.il/shooshx/ConeCarv/ q_step2.png

Y así sucesivamente.

Supongo que esto implicará algún tipo de detección de bordes y luego rastrear el borde de alguna manera.
¿Existe algún algoritmo conocido para hacer esto de manera eficiente y robusta?

¿Fue útil?

Solución

Básicamente, un algoritmo personalizado sería, de acuerdo con esto hilo :

  

Tome el vecindario de 3x3 alrededor de un píxel, ponga un umbral al canal alfa, y luego vea si alguno de los 8 píxeles alrededor del píxel tiene un valor alfa diferente. Si es así pinta un   Círculo de un radio dado con centro en el píxel. Para hacer adentro / afuera, module por el canal alfa con umbral (negar para hacer el otro lado). Tendrás que umbralizar un vecindario más grande si el radio del círculo es más grande que un píxel (lo que probablemente sea).


  

Esto se implementa utilizando operaciones morfológicas en escala de grises. Esta es también la misma técnica utilizada para expandir / contraer selecciones. Básicamente, para trazar el centro de una selección (o un canal alfa), lo que uno haría es hacer primero dos copias separadas de la selección. La primera selección se expandiría por el radio del trazo, mientras que la segunda se contraería. La opacidad del golpe se obtendría restando la segunda selección de la primera.

     

Para realizar trazos internos y externos, se contraería / expandiría dos veces el radio y restaría las partes que se intersecan con la selección original.

     

Debe notarse que el algoritmo morfológico más general requiere operaciones O (m * n), donde m es el número de píxeles de la imagen yn es el número de elementos en el elemento estructurante " ;. Sin embargo, para ciertos casos especiales, esto se puede optimizar para operaciones de O (m) (por ejemplo, si el elemento de estructuración es un rectángulo o un diamante).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top