Comment fonctionnent les algorithmes de conversion D'image ASCII art? [fermé]

Il y a quelques sites de conversion "image to ASCII art" gratuits comme celui - ci: ASCII-art.org

Comment fonctionne un tel algorithme de conversion d'image?

                         ,                     
                     .   W    ,                
                     W   W    @                
                     W  ,W    W                
                  ,  W, :W*  .W  .             
                  #  WW @WW  WW  #             
                  W  WW.WWW  WW: W             
                  W. WW*WWW# WW@ W             
               * :WW.WWWWWWW@WWW@W  #          
              +* #WW#WWWWWWWWWWWWW# W          
              W# @WWWWWWWWWWWWWWWWW W          
              WW WWWWWWWWWWWWWWWWWW W          
              WW WWWWWWWWWWWWWWWWWW@W#         
             ,WW.WWWWWWWWWWWWWWWWWWWWW         
              WW@WWWWWWWWWWWWWWWWWWWWW         
            : WWWWWWWWWWWWWWWWWWWWWWWW :       
            @ WWWWWWWW@WWWWWWW@@WWWWWW.        
            W*WWWWWW::::@WWW:::::#WWWWW        
            WWWWWW@::   :+*:.   ::@WWWW        
            WWWWW@:*:.::     .,.:.:WWWW        
            @WWWW#:.:::.     .:: #:@WWW        
            :WWW@:#. ::     :WWWW:@WWWW        
             WWW#*:W@*@W     .   W:#WWW        
            #WWWW:@      ::   ::  *WWWW        
            W@WW*W  .::,.::::,:+  @@WW#,       
            WWWW## ,,.: .:::.: .  .WWW:,       
            @WWW@:   W..::::: #.  :WWWW        
             WWWW::  *..:.  ::.,. :WWWW        
             WWWW:: :.:.:   :  :: ,@WW@        
             WWWW:  .:,  :  ,,     :WW,        
             .: #         :  ,     : *         
              W +    .,  :::  .,   : @         
              W ::                .: W         
           @,,,W:.  ,, ::*@*:,  . :@W.,,@      
         +.....*: : : .#WWWWW:  : .#:....+,    
        @...:::*:,, : :WWWWWWW, ,  *::::..,#   
      :...::::::W:,   @W::::*W.   :W:::::...#  
     @@@@@@@@@@@W@@@@@W@@@@@@W@@@@@W@@@@@@@@@@:

54
demandé sur Ali Afshar 2008-12-27 13:43:43

4 réponses

Le concept de niveau global est simple:

  1. Chaque caractère imprimable peut se voir attribuer une valeur approximative d'échelle de gris; le signe" at "@ est évidemment visuellement plus sombre que le signe" plus " +, par exemple. L'effet varie en fonction de la police et de l'espacement réellement utilisés.

  2. En fonction des proportions de la police choisie, groupez l'image d'entrée en blocs de pixels rectangulaires avec une largeur et une hauteur constantes (par exemple un rectangle de 4 pixels de large et de 5 pixels haut). Chaque bloc deviendra un caractère dans la sortie. (En utilisant les blocs de pixels mentionnés ci-dessus, une image 240w-x-320h deviendrait 64 lignes de 60 caractères.)

  3. Calculez la valeur moyenne de l'échelle de gris de chaque bloc de pixels.

  4. Pour chaque bloc de pixels, sélectionnez un caractère dont la valeur d'échelle de gris (à partir de l'étape 1) est une bonne approximation de la moyenne du bloc de pixels (à partir de l'étape 3).

C'est la forme la plus simple de l'exercice. Une solution plus sophistiquée version prendra également en compte les formes réelles des caractères lors de la rupture des liens entre les candidats pour un bloc de pixels. Par exemple, une "barre oblique" (/) serait un meilleur choix qu'une "barre oblique arrière" (\) pour un bloc de pixels qui semble avoir une fonction de contraste de bas en haut à droite.

89
répondu joel.neely 2008-12-27 16:04:00

Aalib (dernière version en 2001) est une bibliothèque d'art ASCII open source utilisée dans des applications comme mplayer. Vous pouvez consulter son code source pour voir comment il le fait. En dehors de cela, cette page décrit plus en détail le fonctionnement de tels algorithmes.

15
répondu codelogic 2017-11-16 13:09:58

Vous pouvez également jeter un oeil à libcaca (dernière version 2014), qui selon leur site Web a les améliorations suivantes par rapport à aalib:

  • support Unicode
  • 2048 couleurs disponibles (certains appareils peuvent seulement manier 16)
  • tramage des images en couleur
  • opérations de canevas de texte avancées (blitting, rotations)
12
répondu daniels 2017-11-16 13:11:57

J'ai trouvé cet article CodeProject écrit par Daniel Fisher contenant une simple implémentation C # d'un algorithme de conversion d'image en art ASCII.

Voici les étapes que le programme/bibliothèque effectue:

  1. charge le flux D'images dans un objet bitmap
  2. niveaux de gris le bitmap utilisant un objet graphique
  3. boucle à travers les pixels de l'image (parce que nous ne voulons pas un caractère ASCII par pixel, nous prenons un par 10 x 5)
  4. pour laisser chaque pixel influencer le char ASCII résultant, nous les bouclons et calculons la luminosité de la quantité du bloc 10 x 5 actuel.
  5. enfin, ajoutez différents caractères ASCII basés pour le bloc courant sur le montant calculé.

Assez facile, n'est-ce pas?

BTW: dans les commentaires à l'article, j'ai trouvé cette implémentation AJAX cool: Gaia Ajax Ascii Art Generator :

[...] Je me suis senti obligé de manifester il pourrait facilement être fait dans un ensemble normalisé de technologies web. Je suis parti pour voir si je pouvais en trouver bibliothèques à utiliser, et j'ai trouvé Sau Fan L'article de Lee codeproject sur son ASCII fying bibliothèque. net.

P.S.: Lucas (voir Commentaires) a trouvé un autre article CodeProject .

7
répondu splattne 2009-03-15 15:43:56