Как работают алгоритмы преобразования художественных изображений ASCII?[закрыто]

StackOverflow https://stackoverflow.com/questions/394882

  •  23-08-2019
  •  | 
  •  

Вопрос

Есть несколько хороших бесплатных сайтов для конвертации изображений в ASCII-арт, например этот: ASCII-art.org

Как работает такой алгоритм преобразования изображений?

                         ,                     
                     .   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@@@@@@@@@@:

Это было полезно?

Решение

Общая концепция проста:

  1. Каждому печатаемому символу можно присвоить приблизительное значение шкалы серого;знак "at" @ очевидно, визуально темнее, чем знак «плюс» +, например.Эффект будет варьироваться в зависимости от фактически используемого шрифта и интервала.

  2. В зависимости от пропорций выбранного шрифта сгруппируйте входное изображение в прямоугольные блоки пикселей с постоянной шириной и высотой (например,прямоугольник шириной 4 пикселя и высотой 5 пикселей).Каждый такой блок станет одним символом на выходе.(Используя только что упомянутые пиксельные блоки, изображение размером 240x320h превратится в 64 строки по 60 символов.)

  3. Вычислите среднее значение шкалы серого каждого блока пикселей.

  4. Для каждого блока пикселей выберите символ, значение шкалы серого которого (из шага 1) является хорошим приближением среднего значения блока пикселей (из шага 3).

Это самая простая форма упражнения.Более сложная версия также будет использовать фактическую формы символов во внимание при разрыве связей между кандидатами на пиксельный блок.Например, «косая черта» (/) будет лучшим выбором, чем «обратная косая черта» (\) для пиксельного блока, который имеет функцию контраста между нижним левым и верхним правым.

Другие советы

аалиб (последний выпуск в 2001 году) — это художественная библиотека ASCII с открытым исходным кодом, которая используется в таких приложениях, как mplayer.Возможно, вы захотите проверить исходный код, чтобы увидеть, как он это делает.Кроме этого, эта страница более подробно описывается, как работают такие алгоритмы.

Также вы можете посмотреть libcaca (последний выпуск 2014 г.), который, согласно их веб-сайту, имеет следующие улучшения по сравнению с aalib:

  • Поддержка Юникод
  • 2048 доступных цветов (некоторые устройства поддерживают только 16)
  • сглаживание цветных изображений
  • расширенные операции с текстовым полотном (перетекание, повороты)

я нашел это Статья CodeProject, написанная Дэниелом Фишером содержащий простой реализация на С# алгоритм преобразования изображения в формат ASCII.

Вот шаги, которые выполняет программа/библиотека:

  1. Загрузите поток изображений в растровый объект.
  2. Оттенить растровое изображение в оттенках серого с помощью объекта Graphics
  3. Перебираем пиксели изображения (поскольку нам не нужен один символ ASCII на пиксель, мы берем один на 10 x 5)
  4. Чтобы позволить каждому пикселю влиять на результирующий символ ASCII, мы зацикливаем их и вычисляем яркость текущего блока 10 x 5.
  5. Наконец, добавьте к рассчитанной сумме разные символы ASCII для текущего блока.

Довольно легко, не так ли?

КСТАТИ:В комментариях к статье я нашел вот это крутая реализация AJAX: Генератор изображений Gaia Ajax ASCII:

...] Я чувствовал себя вынужденным продемонстрировать, что это можно легко сделать в стандартизированном наборе веб -технологий.Я решил посмотреть, смогу ли я найти некоторые библиотеки для использования, и я нашел статью Sau Fan Lee Codeproject о его библиотеке Ascii Fying .net.

P.S.:Лукас (см. комментарии) нашел другого Статья о кодпроекте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top