Pull to refresh

Comments 19

inline, inline, везде инлайн. С формулами что-то не то.
Заменил все формулы на svg-картинки, надеюсь это решит проблему.
Всегда привлекала ASCII-графика. В этом есть какая-то романтика, какая-то магия: ожидаешь увидеть в консоли сухой текст, и тут предстаёт красивая картинка!
Как тест моноширинного шрифта :)
image

Цвет ещё не помешал бы, для цветной матричной печати.

Я когда-то игрался с таким, и обнаружил, что просто вычитание даёт достойный результат. Т.е. из блока изображения вычитал буковку, затем абсолютные значения всех пикселей разности складывал, и искал буковку, где результат наименьший.
У меня, к сожалению, нет под рукой тех картинок, но я не вижу качественного скачка в статье.

Наверное таким образом сделать и более умный перебор. То есть если символ совсем не подошел, отбрасывать все имеющие схожие элементы и наоборот если подошёл процентов на 50, пробовать символы имеющие похожие части. Но тут нужен хороший предварительный анализ всех символов

А если последнюю картинку с лицом инвертировать что получится?

Несмотря на матан, результирующие картинки выглядят, мягко говоря, не очень.
А причина простая: отсутствие хинтинга.

Можете развернуть свою мысль для тех, кто не в теме?

Так известный же термин — проще загуглить, что это такое.
Плюс ещё идеи из пиксель-арта: лучше рисовать то, что приятно глазу, а не то, что максимально точно соотвествует оригиналу.
https://habr.com/ru/post/241764/
https://habr.com/ru/post/247333/

Не очень понятно, как термин из пиксель-арта применим к ascii.

Потому что принципы рисования линий похожие.

Я делал проще: 1. Автоконтраст исходного, пока по чёрному/белому не будет по 3% гистограммы; 2. Усреднение Y в матрице 57, определение его попадания в 1 из 16 бинов; 3. Подстановка вместо блока 57 символа с визуальной плотностью, в среднем соответствующей бину. Таблицу плотностей символов рассчитал заранее и хранил в массиве

Когда-то давным-давно эту же задачу решал aa-project. Фишки своей библиотеки они продемонстрировали в очень крутой демке «bb», которую, правда, достаточно проблематично запустить со звуком в современных люнексах. А так нынче есть ещё libcaca. К слову, через обе библиотеки можно даже выводить видео, например, так:

mplayer -vo caca -framedrop -quiet tv://
mplayer -vo aa -framedrop -quiet tv://


Если у вас нет веб-камеры или она заклеена, вместо «tv://» подставьте какой-нибудь видеофайл. Особенно эффектно смотрится в голой консоли. Ну или можно просто запустить так:

DISPLAY="" mplayer -vo caca -framedrop -quiet tv://

Если вдруг кому лень пробовать…
image
ИМХО вы перемудрили немного с матричным разложением. Набросал на коленке вариант в котором мы выбираем символ просто исходя из количества совпавших пикселей и средней яркости. Результат выглядит не хуже, хотя никакой линейной алгебры в данном случае не нужно

image

Собственно код который вычисляет похожесть участка изображения и пикселя в моем случае.


def sim(pixels1, pixels2):
    b1 = pixels1.mean()
    b2 = pixels2.mean()
    return np.equal(pixels1, pixels2).mean() - abs(b1 - b2)

В pixels1 — бирнаризованный участок изображения в виде еденичек/ноликов. в pixels-2 бинаризованное представление символа

Не понимаю, к чему весь этот матан. ASCII art можно делать, используя два подхода:
— Статистический. Плотность краски имитируется разными символвами, а само изображение надо рассматривать издалека. Для этого подхода матан не нужен: берем пиксель, в зависимости от его плотности (черноты) выбираем символ из соответствующей таблички, выводим.
— А-ля пиксель-арт: тут каждый символ важен, т.к. именно форма символа «рисует» картинку. Сами картинки, как правило, небольшие и нарисованы вручную.

Вот простенький алгоритмик, по которому можно получить текстовую картинку первым способом:
— грузим картинку в память.
— ресайзим ее, слегка сплющивая по вертикали, до нужной ширины — например, 80 пикселей. Сплющивать надо, т.к. символы текста не квадратные, а прямоугольные.
— Переводим в черно-белое изображение и выводим на экран, заменяя пиксели на символы в зависимости от черноты (я использовал списочек «на глаз» — "#WMH@OTI*+;:-,. ").
Что получилось:
./ascii_art /mnt/seagate80/vault-boy.jpg
                                             .-,
                                           -@#MWWT,
                                         ,@#T,  :@W+
                      ..        .,:,,,,-*MW;      +W@:.
                   ,*HH,      :@#HO@M####H,        .*H#M@I:
                 .TWWW,     ,@WT,    ,*T+.            .;IH#H,
                ,M@,MW,   .+MT.                           :MH
                HM. :M#HO@WO-                              ,HI
               -#+    :+*;,                                 ,W:
               :#-             -+;.       -I@T-              :W*.
               ,#:          .*MOIOWT, .;TM#####I              ;MW+
                HT         ;MO-   .IMMWM@*;;*@##O.             .T#T
               T#W,      .OM;        ..       ,T#@.              I#I
              ;#@+H;.  -IWT.                    ;W@,.-;I@HM@I,    @#;
              @W, ,TWWMH*,                       :T@OT+;;;*H##+   ,WW.
              MM  .HW: -IH-                                 O##,   I#O
              TW..HM-.TT+:,                :O*              .##+   ,##,
              ,#IHW,                       ;O#O.            ,##:    H#+
               *#W-                          :HO           :MW;     O#*
               O#:     .                      .O:        *HWI.      @#*
              *#*    -MW-                      ..        IW*        W#:
             -#H     H##T       O+       ..             :I-T@,     -##.
             @#:    .W##+     .O@     ,@WW#WO-          .IW:;M-    T#H
            :#@      O#O     ,HM.      ,;OW##W-         ,.;M;:M,  .W#+
            O#;       .     ;WH,          .IW#I         +M+-M:+H  I#M.
           .WW.           .T#H,             ,O-          -HO-H,H:-##+
           :#@           ;M#O.                         .@;.@O;T*T@#@
           I#T           O##-                           :HT.H*OTW#W,
           T#*           .W#@                          :-.O*,W;W##;
           H#*            :##I                         -M+ * ;H##I
           H#*    ,.       ,-.        -,                :I  ,O##T
           @#O   *W.                  -M;                    O#W,
           T#H  O#WHT;,             -;T##@,                   M#@
           +##. ;#T.,;IOOOI*++ITOHH@O*;;@#W;                  I#W.
           -##+  O@TO:    ,-:::-,      -O##*                  H#H
            M#H  ., -OMI-         .:I@MI-TW.                 *##:
            *##;      ,IMWM@TTTT@MW@*-   I+                -@##;
             M#M.        -*T@@OI+-       .            +OTOM##O-
             :##O       ;I***:                      .T##@II;,
              I##*       ;OHH*                     -H#W+
               T##I                               IW#O.
                *##T.                           +M#W;
         ;IIITTTTH##M:                       .*M##OMH*,
         ;******+++H##T.                   :OW#M#T  -IMH*,
         I@HHHHHHI MM*@WT-                -I+:,@M.     ;##@;.
         O#######+;#:  ,*#H*,                ,@H,      +#*;HMI,
         O#######:IW     I###MT+:-..       -TWO.      .MW,+;-IW@:
         O#######-IW.     I####HOTI+,  .:IH#H:        O#I-##MI-*WH;
         O#######;+#:      -O###M@OOOHM##MT-         T#H,H####WI-*WH;
         *OOOOOOO*.O*        .;IOOOOOOI;,           +OT.;OOOOOOOT:.*O*.



С полутоновыми изображениями так себе, но тоже можно разглядеть
WW################MHHMMHHHHHHMMMWWWMMMWMWMMHMHHMHMMHMWWWWWWWWWWWWWWWWW#########
################WM@@HMMMWWMMH@HH@HHWMMWW#WWMMHHH@@HHMMMMMMMMMWWWWWWWW##########
###############MHHHMMMMMMMMH@HO@H@@MMHWWMHHMMMMMHHHMMMMMHHMMMMMWW##############
#############M@HMHMMMWM@TTTTTTIIT@HHHHMHOTTTTO@HH@@HMHMMMHMMMMMWW##############
##########WH@@HHHHHMMOITTTOOOOOIIOHH@@@HMMHH@OOOTTOOHHHMMHHHHHMMWW#############
##########HHHHHMMMM@IITO@HHHMMMMOITHMOMWWWWWWM@@@O@HHHHMMMMHMMMMMWW############
#########M@@HMMMMHTIOOTIIIO@@HMMMOTOMHMWWWWM@O@@H@@HHHMMMMMMMMMMMWWW###########
########M@@@HHHMHOTOOOOOTO@HHMHMH@@@MMHMWM@T@MWMMM@O@HHMMMMMMMMMMMWW##########M
######WH@@HHMMMM@OOOOTTTTOOHHMMMM@@MMM@H@OO@@@@OOOO@O@OHMMMMWMMMMWMWMM########W
#####WH@@HHHMMMHTOOO@@HHHHHO@MMMH@@MM@@@OTTTOTTTO@OO@@O@HMMMMMMMMMMMMMHW#######
####WHHHHHHMMMHO@O@MWWMM@MMMH@HMHHHH@HHMHHH@OOOO@HMHHMMMHHHMMMMWWMMMMHHMM######
WW#WHHHHHMMHMHO@@HWWWMMMHHMH@@HMMMHMMMWMMMHHH@@HHHHH@HHMMHHHMMWWWMWMMM@HWM#####
W#WMHHHHMMHH@@OHWWWMHMMMMMM@TOHMHHMHHHHHHHHH@@OOOOO@@@HHHMMMMMWWMWWWWMHH@WWW###
WWWHHMMHHMMHMHHWMMH@@HMMMMM@T@HHHHHOOO@@HHHHH@TIIIO@@@@WWMMMMMMHMMWWWWMMHHM#W##
MMHHMMMHHMMMMHMMMMHHHHMMMMH@O@@H@@OOTO@@HHHHH@O@TTTOOOIHMMWWMMMMHHMWWWWMMHM#WM#
MHHHMMMWMMMMMMMMMH@@HHMMHH@OO@OTIITTI*ITI*+IITOO@TTTOOOO@HMMMWMMMHHMMMMMWMMW#M#
WHHMMWWWWMMMMMMMMM@@HHH@OOTITT*+;;++;++;;;;;+**TTOOIOO@@@@HHMMMWWM@@MMMMMWWW#W#
WH@HMMMMMMMMMMMMWMHH@OTII*++++;::::;:::::::::;+*ITT@I@HHHHH@HMMWMH@@HMMMWWWW#WW
MH@HHMMMMHHHHHMMH@OTI***+;;++::::--::----::::::;*ITT*@HHHHH@@@HMMMH@@MWWWWWMWWW
MO@HHMMMMH@@@@@@OTI****++;;++;:::----:---::::::;+*TIIT@@@HH@@OOHHMHH@HMWWWWMMMW
M@O@HHMHHH@@@@OOTII****+++;;+;;:::-----:::::::;;+*IT*T@@OT@@@OOOO@@@@@HMWWWWMMW
M@@@@HHHHHHH@@OTTIII****+++;+;;::::::::::::::;;;*+ITTTO@TOOO@O@OTOO@HHMMWWWWWWW
HOOO@@HHHHH@@@OOTII****++++;;;:::::::::::::::::;+**TOOO@TTOO@@@@@OOO@HHMMMWWWWW
MOO@@HHHHHH@@@OOTII****+++++;::::::::::::::::::;;**IOOOOTTO@@@@@@@@@@HMMMWWWWWW
M@O@@@@@@@@@@@@OTTIII***+++++;;::::::::;::::;;;;+**ITOOTTTO@@@@H@@@HHMMMMWWMWWW
WH@O@@@@@@@@@@@OTTII***+++;;;;;::::::::;:::::;;;;;+++*IIITOO@@@HH@HHHMMMMMMWWWW
WMMOO@@@@@HH@@OOTTII****++++;;:::;;:;;;;::::;;;;++++++*IITO@@@@@HHHHHHHMMMMWWWW
WWMOT@@HHHH@O@@OTTI****+++;;;::::;;:;:;:::::;;;;++++++**ITOO@@@@HHMMMMMMWMWWWWW
WWMHTO@H@@OOO@@TTIII*+++++++;;;;;;::;;;::;;;;;+++++++*IIITT@@@O@HHMMMMMMMWWWWWW
WWMHOOOOOO@O@HOTTTTTTIII*I*I*+;;;;;;;;+;;;++*ITOOTTTTTTOOO@@@@O@@HHMMMWWWWWWWWW
WWMH@@O@@@@@@@IIOOOOOOOOO@HHH@OII*+++++***ITO@MMMHMHHHH@@HHHH@O@@@HHMWWWWWMMWWW
WWWWMH@@HH@O@@IIO@OTTOOOO@@HHH@@OTI*+++*IO@HMWWWMWW#WMWM@HHHH@OO@HH@HWWWWWMMMWW
WWWWWMH@@H@O@OIITOOO@MM@@W#W@T@@@@O*;;+*THHMHOT+*@WMO*I@@@@@TOOO@HH@HW#MWWWMMMW
WWWWWWMHOOOOOOIITOOO@@T**OH@*:+*ITTI;;;*TO@**I*++*IIII*IIIIIIITO@HHHM#WMHMWWMMM
MWWMMWH@OTTOOOIIIITTI***+*++++++++T*;:;+TTO*++**+;;+++*III****TO@HMMW#WMHWWMMMM
WMMMHMH@TTOTTOI**+***++++++;+++++*I*+::+ITII*++*+++++***I*++**IO@MMMWMMMHWWWMMW
WWMH@OOOTTTTTOI**++++++++;;;+++++*I*;::;IT*+*+**+++;+++*++++**TOHMMWWMW@HWMMMMW
WWWMHHH@@TITOOI***+++++++++;;+;+**I*;::;IT*++++++;;+;;;++++**IT@MMMWWWH@WWMMHM#
WWWWWH@@@OIITTT*****+++;;+;;;;;+**I*;::;*TI++**++++++++****IITOHMMMWMHHW##MMHW#
WWWW#WH@H@O*ITOIIII***+++++;;++*III+;::;*TIII*++++++++**IITTTOHHMMW#MMW#WWMMM##
WWWW##WHHHH@TOOIIIIII**++++;+++*II*+;::;IIIITI*++*+++**IITTTOHHMMW#####WWWWW###
WWWW##WH@@@O@@OTTTTTII*+++++;;;+II*+;::;+*TTTT*+++++**IITOO@@HHMMW####WWWW#####
WW#####M@@@OO@HTTTTTTI*++++++++ITT*+;::;+*OTTOI**++***ITTO@@@HHHH####WWW#######
#######W@@@OOOHOTTOTOTI**+++**ITII*+;::;+IO**TTII*****ITOO@O@HHHM####WWW#######
########MMH@@@H@ITTTTTTI****IT*+*I*+:-:;+*II*IO*ITIIIITTOOO@@HHHW######W#######
#########WMHHMMHTTTTTTTII*IIT*;IIII+;::;+ITOT@MI++ITIITOO@OO@@HM###############
#########WWWMMMMOTTIIITTIITI+;;+@HOT*+**IOHMWW@*+++*TTOOO@O@HHMM###############
############WMMW@OTTIITIIT*++++++@MMH@@@M###MO***I***ITOO@O@HHHW###############
##########WWWMM#WOTTTIIIII*****I*TT@W#####MHTTTITOTTTITTIO@@HHMW############WWW
##########MMMW###MOTIIIIIIIIOOOITTOTO@MMH@TOO@@@@@@@@OTOIO@HMMW#############WWM
##########WWW#####@TTTIIIITO@HOTOOTITOOTOOOTTO@@MWMHHOIOIOHHMMW################
##################MTTTTTIT@H@@@@@O@OOOTIITO@@HMMMH@TOII@OOHMMW#################
###################@TTTTIO@TIII**I***ITTOTOTOOTOTITITII@OO@M###################
###################WOITOITT*IIII**+;;;;;++***TOOOTII*TOH@HMW###################
####################@T*TTIIIIITTTTI******IITOO@@OTTITOMH@MW####################
###################WHOI*TI*IIIITOO@O@@@@@HHHHH@OTIITOHH@MW#####################
###################WH@OTITI*I**IITTT@@@@H@@@@OII*IIIT@@MW######WW##############
###################WHHHH@TI*+**+*****ITTIII*I****I*T@HW########WW##############
####################MHHMWHTI***++++***I********IITTOHW#######WWM###############
####################WHHMW#MOI****III**IIIII**ITIIT@M#######WWMM################
#####################MHMHM##HTTITTOOTTTTTOOTTITOTH########WMMMW################
#####################MHMHHHM##H@OO@@HHHHMH@@OO@MW#######WMMMMW#################
######################HMMH@@H###WWMMWWWW##WWWW#########WWMHHW##################

На Путина похож.
Sign up to leave a comment.

Articles