Question

Je cherche un moyen de recréer par programme l'effet suivant:

Donner une image d'entrée:
entrée http://www.shiny.co.il/shooshx/ConeCarv/q_input .png

Je souhaite appliquer de façon itérative le "trait". effet.
La première étape ressemble à ceci:
étape 1 http://www.shiny.co.il/shooshx/ConeCarv/ q_step1.png

La deuxième étape ressemble à ceci:
texte alt http://www.shiny.co.il/shooshx/ConeCarv/ q_step2.png

Et ainsi de suite.

Je suppose que cela implique une sorte de détection de bord, puis de tracer le bord d’une manière ou d’une autre.
Existe-t-il un algorithme connu pour le faire de manière efficace et robuste?

Était-ce utile?

La solution

Fondamentalement, un algorithme personnalisé serait, selon ceci fil :

  

Prenez le voisinage 3x3 autour d'un pixel, limitez le canal alpha et ensuite voyez si l'un des 8 pixels autour du pixel a une valeur alpha différente de celle-ci. Si oui peindre un   cercle d'un rayon donné avec le centre au pixel. Pour faire à l'intérieur / à l'extérieur, modulez par le canal alpha seuillé (nier pour faire de l'autre côté). Vous devrez définir un voisinage plus grand si le rayon du cercle est supérieur à un pixel (ce qui est probablement le cas).

  

Ceci est implémenté en utilisant des opérations morphologiques en niveaux de gris. C'est également la même technique que celle utilisée pour développer / contracter des sélections. Fondamentalement, pour tracer le centre d'une sélection (ou d'un canal alpha), vous feriez tout d'abord de faire deux copies distinctes de la sélection. La première sélection serait élargie du rayon du trait, tandis que la seconde serait contractée. L’opacité du trait serait alors obtenue en soustrayant la deuxième sélection de la première.

     

Pour effectuer des traits intérieurs et extérieurs, vous contractez / développez deux fois le rayon et soustrayez les parties qui se croisent avec la sélection d'origine.

     

Il convient de noter que l'algorithme morphologique le plus général nécessite des opérations O (m * n), où m est le nombre de pixels de l'image et n le nombre d'éléments de "l'élément structurant". Toutefois, dans certains cas particuliers, cela peut être optimisé pour des opérations O (m) (par exemple, si l'élément structurant est un rectangle ou un losange).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top