ASCII by Biased Potts Markov field
Abstract
Cómo hacer emerger una imagen desde el ruido: Potts-Markov en tiempo real mediante un muestreo de Gibbs en local.
Laboratorio
#*++*****+++++++*+=
+********##*####*********+*+**#*+++**
++****#*###********#######*#****++++*****+*****+
++=++*+*##****#%%%###%%##%#*#####*###*#****++****#%*+
+*+*+***##*###*#%%@@%#%#****#**++++++***++*****+***+*#*+
*+=++++***#**########%%%%%#%############*++++++++***+++##*=-
++++++*+****#**#**###%%#%#*****###*##****##*+**++++#*+#**+*##+=
+++****+*##*##**%##****######***%%####*###***+***++++***+***+***=
+++****####**#######*#%%*#%%%***#%%#******+*******#***+****+*+*+*++
+++*****####**##**+**##**#**+**###%**++*##*++++*******++*#++++++*++== *#%##*+*
++** +++****#***++**######%##%**##*+++*#%#%*++*++***#**#*++*#%#+=##*++*++=+#%%##%#***==
=+++++*+=+*+=++*###*####*+*****#*=*#*+=+###***+==++====-=#%#%@%%%#+==+**+=++*##*++==#%***=++++*%%%###*#*+=-
+**+*+++**+++******+***##%%***+**##***++**#+---+***#%##*+=++*#%%%@@%#%##**##***+=++======****+=+**+*#%%#***+***+:+#*
=+++=+=-===:..:-=-=+=+++**#***##%**##*+=+#==****+:--+++++++=+####%@@%%#***#*#*###*%#%%##***#*****==*+==+@%%##***+==**#*
=+++===-=---::::::::.:::::--:-=+**%####%%#*++=*--==*###*=-:::=#%####*##%%###*#*#**#####**+*+**+++++*+++++=+**#%##**###*++#*-
===++++++=---::::::::::::..........::-=+++*#%%%*+==+-==::--==+==+#####**##%%%#%%###############*=----++*++++++=-=:*%%%%#***+==*+-
======++++=---::::::::::..:.................:::-==+**%#=-::::-=-:::=**#***####%####%%%########*####*#*#+==++=---::--+=:*%%%%#**++=#*+
==-:-=++=====--:::::::::::........................::-===+##%**=-:-+**##*##***#####%#%%%#%######*****#***#****+*+=+++++++-*##*****+=***
:--=++==+==---:::::.:::::::.:...........................---=-=*###**++********##*+#####***##********#++**#***#*****++==+=-*#*++******+
--++==+=-:--:::::::::...:................................:::-=*****++++*+****##*****#***++*****++*+***++**+=+***+++=====-+*#********
-+=====:---:::::::::...:.:................................:::-===+++=++=+++*#+*+**+***+****++=+*+==++*++++=+++***++===++++=*#*****+
:-=====--:-:::::::::::............................:..::...:...-====++=+*+=++**+*+=++==++++++-=+++**++=++*+++=+=++++=+=+++=++*##*****
---==--:::-::::::::.:.:::.:.....................:::-::::::::.::-===+*++**+==+++*+=========***++++=++====+++++===++==--=++++++*#++*+*+=
----::--:---::::::::...::::::::..::::::::.....:::::--=------------+=-++=--==----------=====+**+*++=======++******+=====-===++++#++++++***
------===-::::::::::.::::..::.::-=--:==----::::::-------===-==++++++====---:---===----:::==-=++***++==-:-===++++++++====--====++###*::=+***##
---:--:.:-.:..:::.::::::.::-::::::-:-+++-====-:---=======+====++***++=--:-:.::-+*#**-..:..:=--+**#+++=..--===++*+==+++===-:=++=+*-::...:+++#**=
:::::::::.::..:::...::...::...:.::::---=+++++==+===+======+++==++****+=+=-:...:::.... ......:=++*#*++++=. .-======---:=-=+-.:.....:=+***#*
:.::::::.:......:....:.....:::::---=+==+=:=+++=+++++=+++==+++++++*****+=+++=-:... .-=++**%*+====-:. :++---+--=-::+=..:......-***#+*
::::::...:::-:.......:::-:::-:---===+=-=++=:-=++++==+*++++*++=+++******++==++++*+=::.....:-=*#**+=***++==++**++++-:-===-:======--:-+:..:......-=*+**
.::.::..::::::::.::...::::::---=-====+=-=====-.:+++=***+=+++=+++++***+++*++=-=+**##*+=-----=*#%###+==*%+===*****#**+**+++++*+++==--==++=.......:=+*++
......:=-.::::::::::..:--:::--=-===-+++--+=+-==:::-++*+=**+=+++++*+***+++++=---=+****##%%@%%%%%##**+=+#%+++++**#%#%###***+++++++=::=++*-:........-==+*=
..........:::::.:::::----::::-+--==--=+=--==+=+-==-:::-=+*++**+=++++*****++++=-::-=-++**#####%%%%#***+++*%*++=*****##***+*=-=+=+===--=+**==+++==...-+++++-
.....:.....:::..::----::::--==---=---=-=-:======+=++=:..---+*+=+*+++******++++=-:::----=+=**##%#%#***#***%@*+++++******++++***+++++---+***+**=+*+-..:-+**++=
..............::--:::::::::=---=---=====+-======+-==++=::::----+**++******++=-=-:::::.::-++=**#*##***##***#%#+-+**++****+*+++++++++==--+**#*++==*+-..-++**++=
:.:......::::::::::-:-::::-::----:===-=====+=======+++==+=:.:.:--==+****#*+++:.=-::::.:-.:--++**#*++++-==-----=+====++++++**+*++++++====+**++---=*=:..:=++++++
.......::::-:-::-::::::------::-==+=-==--====+====++===**=-::..::::--=++===:..=-::::..:::::=++++**++---.:::-=++=-:=+++=+=+++++++*++==--=+++-:.-+=-..:-====+=
.......:::::::-----=---==----==+--=--===+===+==++*+*=+++*+*+-:+=:::....:=---=+-::::..::::.-=+++++*#*:-...:-=++=-=+-++*==+++++**++++====++-::=+++...:-=****+=
....::::::-==-:-=-::-=---:-=+=----=-========++++**+++*+************=:...-====+=-:.....::-==++=+**###**-...--=::-===+*+****+*##*++++====+==-=**=....-==++*++=
=:::::---==--==---===----==---------=-===+==+=+**+++**#*****##*+***#+:...+===+=-:...::---==+****++***#%#-::...::-=++*********#***+=+=++*+=+=*=....-+**++***=
::::::::-=====++===--==----=-----=+=--=+-==+**+*+++**+*************-:.:..:**+=-:....::-==+==+++++++---=---:-=--=++****+********++++++++=--+=....-++###*+++=
...:-====+***++++======------=+==-=--====+===+++++****+**#**#*+**+:::.......:-:....:::-===+=+++=::::::::--::.::--==+++*******++++++++==++-...:-++##*#**+*****
--:---=+#%*+++=++++++++==--++=--======-=-----==-+++++**+*+***+===:---.....::.--...::::-=--+++*+****#%###++--::-=+=+**++****++++++++-........-+***+*+***+#%#%@
+*-- -=++******++==+======+=====-=--: -===+++*+**++--:-+=-+::...==:-::.....:-=--===++**+==+++++++===++*+*###***+++++*+++=.........-**+*#++++**+##+#
@@%%##=+++==+=====+=====-::: -===-=++- --=+++=--::=+--::.....:----==+++++==--------====+*********+*+++++++-........:===*-##*++=+***+=
=+***=-: ***+=- +*=::-===*+=---::...-----===++**#*+*##****#**+*##*********++**+*+.......-==+=++-+*+*-+++=+**
*++==-=-:---:::..:::----+=+=+***####*#**+************+++++++++-....:..==:=-:=.+*#+++====++
. :......::::--=++++##***++=====+++++**+***++*++*++=....::::--=++==*#*+=-=+==
.:-.....:::::-====-=+==+======++*+++++++++++*+*++= ..:=+++-:-++=+++=--=*++
=---:.....:::::-----==+++=+++++++***==+++++++++== ==+ ..:-=+=::=-=
:--: :....:::::-::-====+==++===+++++++++*+++== ::-===
...::-::::---===+++======++++++++==-- =
.:-::-:-----========+++++==-:
:---------======-----
-
.:::::::::--:::.-=
-::::.:.. :. .::::::::::-::.:--:::
-::::. .. ...::::. .. ....::-:-::::::-:::.::
-:=-:::: ..:... . . .. . . . .:.::::::. :=
::-::::.... .. . .:::...:-:-:-:..:::::::::::::. :-
::=--:::.. .... . ... . . . .. .:-===----:..::: .=+
=:::::::::::.:: :. .. ...:::. .. :... .::::--- :: ::-: .-=
--::::.:: . .. ...... . .:.. . .. ::::::::--:.::-::.::.:=
-=::::: ..:. . . ... .... .:....:-:.:.....::::::::::-:-.:-
-=-::.:. .....:-:. .:: .:::. . .::::. :---::..::.:::: :--::::-:== . :::
-::: -:-:::. ...:-:: . .. .:-::: . .-=:::::. .. .--: -= :--::-=- . .. :::=+
=----::-=-:-=-:. :. ::.::.. :=. :==- ...::===::====+= . . -==:::-=:::..::-== ..:=::::: . :.::=*
:::-:::::::--::..:::::.. ...::: .:::-=:..:*+*=::. ..-=-:. . . . ... :..-=--====+=.:::-=-:.-:. ..:::::::=*: :
+---+-=+=+=%%%**=++==---::..... .: .:=: +=..:.=***====:=-=: .. . .:. . .. .. .:. ::..:==:-==: . ::::==:. .
==--==++++***#%##%%%%%###*****=:.. . .:-==:+*==.. :=****=. .. : .. .. : ... . .:-:::::-:=:::=---==:: .. :-- :*
+===----==+**############%%%%%%%%%%%#*=---: .. :-==-+==#%*+==-==-. .. . . . . .. .=++*+::.:-=---=*=*.. . ..::==.:*
+==+==::--=+******##*##%%%%%%%%%%%%%%%%%%%%%##**+=-:: =*#*%#*=+%##=:: ... .. .. . .. .. .. . ....-===-=++****+-=%: . .:::-= :-
+=**+=-======+*#***#######%%%%%%%%%%%%%%%%%%%%%%%%%#*+==:. .:=*#+-:: : ..:. .. .. . . ::.:: ... .:::::-==-::-:-*. .:::::=:::
#**=--==:=++****###%%###%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*++=+=.. .:::::...:... :: . ...: ....:::. --:...:..:..::--==-=*: .:-.::::.:
*+=-==-=*****#*###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#+=:::::-:-:::::... .:.:. ..:::::::::-:::.:-::::=::::::-=====*::..:::.:::
+===+==*****#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%#%%*+==-:-==:=:::: ::-::-:.::::::-===::===-::::-=:-::::-====---==:..::::-
#*====++*****#####%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%*====--=-:-=--::::-=--==-:=---+=-:-:::-==-::::=-=--:==-=-===-:: :::::
++*+=*******%######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#***######%%##*=++-:-:::-==-:::==========::::--:=-:====-::--===--==*+=====--..:-:-::=
*++*#*******#######%%%%%#%%%%##%%###%##%%%%%%%%%##***+******+*++++==*--=**+=***++****+==+==::.:.-========-:::::::-==++=+===---: ---=-::..
******==+*########%%%%%#%%%#%%#**+***+=+***#*#%%#****+++===++=------==+=**+***+==+*+**#%#==*+-:::::-==+**===-----:--====+*=====: :*%+:.:: .
**+#+*#%**%%%%%#%%%%%%#%%%#*#****#**+::-+====****+=+==+==-====-=::::-=++***%%%*-. .:*%%%%%*+**-:: :--=%@*+===-:.:===--=+=**+--=-:*#*%%%#:-- .:=
#%###*#%%%##%%%%%%%%%%%%%%%%%%#%##%***+==-:--+=-===-========-==-::.::-===*#%%%###%%%@@@%@@%@#=-=. ::---=%@@@@@@@@@%*===+==++*#+*=-*%#%%%@@#=-....:
#%###*#%%#%%%%%%#%%%%%%%%%%%####*+*=-=+-=*=-:==-:::-===-==--=--::::::.:=--:=+#%%@@@@@@@@@@@@%*=--:. ::====*#%@@@@@@@@*==+**-+*=+%#-=%%#%@@%%%+:.: ::
%*##*#%%%%%**#%%%%%%%%%***#**#*++===-=+=--=#*=--::==-:---::-===-:::::.:--===---:-=*#%%@%%#*=: :::=:..:-==-:::----+**===**======**#*-*%%#@@@@@%+=::::
%#%%#%%%##%#%##%%%%%%%#%####**+++====-=+====+*%*====:::-=--==--==::::::::===*=::: .-=*****=: :==: -===:.:.. .::::::---:---==+*==-=+@%%%@@@#=-::-
%%%%%%#=*%*####%#%%#%%***#%#**=+===*=:-*+-=-+==%%#*-:::=:::=---:-:::.:::::-=*++=-:::: . . .. ..:=-. :----.. .::=-:-=--+**=--:+#%%%%@@%%*+=-:=
%%%%%%%%%%#####%%#%#*******##+=+*==++===+*=+==-+==*###*=::--:::=-::::::::::--=*#**=+=::. .. . . ::::==. ::-=::.......:-:=+=-=-===**=:::==:-===%%%*-----*
%%%%%%%%%%%#%%%%##**++####**==+*+=+++=+=+#========--=#%%*++-::=:::::::.:::::=-+*%***+*+=:+:. . :...::: .---::::..::::::::::-=:=+*+-::::::=:.-*@%#*-:.:-=
@@%%%%%%%%%%%%%#*+*#*####%#=+**=+**==++==++======*==--=*###***+=:::::::.::::=*=**##%%%%%*--=:: ...::. .:: . -+:.::-::::::-=-::-:=-=+*+::. :--==:-*%%*-:.:--=
#%%%%%%%%###%%%###**#*###**#*+++**+==*+=======+=====:=====#%%%%**=+-:::: :::=*%=**#%%%%*%***:::. ::::-+==***+*=-====-=--::::::--:--:==+=-:::-+**=:=#%%#=---::=
%@%%%%%%###********#***+**+*****====*+=++====-====-===+::=*##%%#*%#**==:===*%%=*####%%%%%%*=----::-:+**%%#**=--=**=---====-----:::===++=--=*%%*:=+%%#*==+===
@%%%%%%%%#*##*******=***+++**++=-**=**==========--:-:=-::::::**-=%%%%%%%*=***=-+#%%#%%%##%%*=-:-=-: :#*%@%#*==-=*=-+:::==:--:::::---=+==-=*%%=::=%@%#+=:::::=
%%%%%%###**==+**++**+=*+*#*=-=**+++++========---:::=::::::....:::.:=#%@%*====-=*#%%%%%%#*==--==::. .:.+%@%*+=***+++-.::::.:: ::--=====-==+=::=%@%%*==-:::-=
=*###****+=+*+=+*+==++*+*==+**+****+=+=+=-==-=-::::=:: ..:.. :::.. =#%@%-++===+#%%%%#***==-.:::--::. +%%%%%##*+:-::::::..:.:::-=-==-::=-=.=%@@%*-.::::::=
###**##**=====--===+++=+**++***++=:=**==+==::::::-:.:::::.:..::....*#%%@%#:::=+%%%%%#**==-==-----::++*+*****=++==-::.::::::::::-------:+*+-=%%@%*:- ::--+
%%%**====-::::=--======***++*====++*+==+===+=:-:-::::.::. .. .::.-*##%@%%%@@#+#%%%%%#**===-==:=+*#%####***#%%##*++=-:-::::.::-:::-::-===-+@@%%+-- .. .::::.:.
*****+=: .--:==----=-===++--=++===+==*=+++**==+=::-:::::::::===+***+%@%%%%#%**%%%###*++**-==::.::: :=+****====..:::::::-:::--:*%%%%@@%%*-::.::-..:-
::++ +=-=:..:::-===:+========+==*+*** +===--::::::=+***-=+-*%%%%==#*##%%%%%**=**===::.:-==---:::-===--:-. .:.::-=-:---=%@%%@@@%%*:::: ::-:::- .:
. .=-:-========-=+===+*#* *==+*=--* ++=---=+**%=-**##%%%%%**+++==--=--==***++++*==+=::::::::..::--::---*%%%%@@@%*===:+ ..--=::..:=
+-:.:=** :::==* -:=%%*===:==+**%%%%%*+*++===-::: .-: ....:..:-: ::::::.::::::-:-%@@%%%%*+=-=-=+-:::*::-=-:.
:--+=+=**++*#%%%%%##***+-=-==.:: . ::::.:..::.::.:::::::::-*%@%%%%%==*=**=%-: :--====--
% *%%%%%%%#*#**=:--: :.:-======-=-::.:::::--:--.:-=@@@%#*%#**=-===: .:=*=-==
%%*%%%%%%#*#**====+==+=-======--:::-=--::---:::-== @%#+-=-+#+--=:--=**+:=-
+*+*#%%%%%%###*****+==-::=---:-:::::==--:---:--== =-- @%**=-=#*=+=
#*+* %%%%%#%#*#***+====-==::===----:--:::---== %#+===
%%%%#*#*****+=====-===+==-==:---===++ =
%#*##***+++*+=======:-:-===**
********+*======+++**
*
Ajusta los parámetros en tiempo real para ver cómo emerge la figura.
La animación de este ASCII de Hypnos está calculada en tiempo real con JS, aplicando la propiedad de Markov local sesgada sobre ruido totalmente aleatorio.
Modificando algunos parámetros ponderantes podemos alterar y moldear el comportamiento del ruido, alterando la velocidad y la forma del mismo.
- Coherencia ()
- Fidelidad ()
- Decaimiento ()
- Velocidad (incremento de )
- Presupuesto (fracción de actualizaciones por paso)
- Ruido
Planteamiento del espacio ASCII
Para operar en un espacio ruidoso, podemos entender una imagen ASCII como una matriz bidimensional discreta:
Donde celda representa una posición de carácter y puede tomar un valor de un alfabeto finito ordenado de menor a mayor densidad:
Por ejemplo:
A = [" ", ".", ":", "-", "=", "+", "*", "#", …]
En base a esta densidad, podemos transformar la imagen en un espacio escalar continuo:
donde 0 correspondería a la ausencia de caracteres " " y 1 sería lo más cercano a una celda en negro “@”.
Campos aleatorios de Markov (MRF)
Teniendo un conjunto de variables aleatorias
asociadas a la matriz bidimensional, donde cada toma valores en el alfabeto , una imagen ASCII completa no es más que una asignación:
Para formalizar esto junto las dependencias espaciales (vecinos de las celdas), definimos un grafo no dirigido:
donde:
- son los nodos (las celdas),
- conecta celdas vecinas en la rejilla.
Asumimos vecindad de 4, por lo que el vecindario de una celda es:
Es decir, el conjunto de todas las celdas directamente adyacentes a la celda (arriba, abajo, izquierda y derecha).
Ejemplos de vecindad en una matriz :
[i] x o o x o x o o x [i] x o o o o x o
Propiedad de Markov local
Habiendo ya definido el espacio donde estas variables aleatorias, este ruido, operará y se transformará en una imagen, debemos definir cómo se comportará cada celda con sus vecinos
La hipótesis fundamental del MRF antes descrito es la propiedad de Markov local, que exige:
Esto significa que la probabilidad de que la celda tome el carácter de densidad , es idéntica a su probabilidad condicionada al estado de sus vecindario inmediato. Es decir, el valor final de una celda solo dependerá de sus vecinos (por ahora).
Para el modelo, nos basamos meramente en interacciones locales.
Distribución de Gibbs
Para que el MRF sea totalmente usable recurrimos a la distribución de Gibbs, que asigna una probabilidad a cada configuración global (a nivel imagen completa) :
Donde:
- [Energía] es una función que asigna un “coste” a una configuración completa,
- es la constante de normalización o constante de partición:
El número total de configuraciones posibles es , por lo que es intratable para matrices donde la imagen sea mínimamente distinguible.
Para comprobarlo, solo tenemos que calcular el número total de configuraciones a evaluar por :
Partiendo de que podemos evaluar configuraciones por segundo, pongamos de forma muy optimista y con un alfabeto de solo 10 caracteres, en una celda tenemos configuraciones; lo que nos llevaría aproximadamente unos 3.17 años.
Puesto que al final solo tratamos probabilidades condicionales locales, se cancela fácilmente.
Formalmente, la probabilidad condicional de un valor concreto en una celda se escribe como:
Si estás familiarizado con las redes neuronales habrás notado que esto es similar a un Softmax!
Energía
Definimos la función de la energía como la suma de dos términos: un término de interacción (Potts) y un término de sesgo externo inducido por la imagen objetivo :
1) Potts (Coherencia Espacial)
Utilizamos el modelo de Potts, pues favorece que celdas vecinas compartan el mismo carácter (misma densidad), generando coherencia espacial y evitando ruido “sal y pimienta”. Para cada par de vecinos :
El parámetro controla la fuerza de la coherencia espacial: cuanto mayor es , mayor es la tendencia a formar grandes masas homogéneas de densidad.
En la actualización local (Gibbs), este término aporta un “voto” de los vecinos; cuantos más vecinos tengan el carácter candidato , mayor será su probabilidad.
2) Sesgo hacia Objetivo
A partir del campo escalar , se define un carácter preferido por celda. Sea
el índice del carácter en la escala de caracteres ordenada por densidad, y definimos:
Decaimiento α
Para que el sesgo sea suave, y con ello la transición del ruido hacia el objetivo, se introduce una distancia adicional:
y el término unario se define como:
Donde:
- controla la fidelidad al objetivo ,
- regula el decaimiento con la distancia en la rampa (cuánto penalizamos en la función desviarse del carácter preferido).
En la demo, la fidelidad no es constante: se incrementa linealmente desde hasta y se recorta al llegar al máximo. El control de Velocidad fija el incremento por frame, mientras que Fidelidad ajusta (con fijo en 0.03).
Formulación final de la probabilidad local
Combinando ambos términos de la energía y sustituyendo en la fórmula de Gibbs, la probabilidad condicional de asignar el carácter a la celda quedaría como:
Es decir, calculamos la probabilidad de la densidad teniendo:
- el término de interacción, que premia la coincidencia con los vecinos (regularización),
- el término de sesgo, que premia la proximidad al carácter objetivo inducido por (datos),
- el denominador Z que simplemente normaliza la distribución hacia una probabilidad.
En la implementación interactiva, además tenemos la opción de controlar el presupuesto, este entendido como la fracción de celdas actualizadas en cada frame. A mayor presupuesto, más actualizaciones por paso y mayor coste computacional.
También se expone el ruido, la amplitud del término estocástico local. Subirlo aumenta la exploración y reduce necesariamente la coherencia global.