Algoritmos para Geração de Autoestereogramas em Texto ASCII

Os autoestereogramas de imagem única (SIRDS) utilizam a paralaxe binocular para criar a ilusão de profundidade tridimensional a partir de uma superfície bidimensional. Quando adaptados para ambientes de terminal ou interfaces de texto puro, essa técnica é conhecida como estereograma ASCII. Em vez de manipular pixels coloridos, o algoritmo desloca caracteres tipográficos com base em um mapa de profundidade matemático.

O princípio fundamental baseia-se na repetição de um padrão de texto com variações sutis de espaçamento horizontal. O cérebro humano funde essas repetições quando os olhos convergem ou divergem além do plano focal do monitor. A distância entre caracteres idênticos determina a profundidade percebida: deslocamentos menores fazem o objeto parecer mais próximo do observader, enquanto deslocamentos maiores o empurram para o plano de fundo.

Implementação do Algoritmo de Deslocamento

Para construir um estereograma em texto programaticamente, é necessário um mapa de profundidade (uma matriz bidimensional onde valores mais altos representam objetos mais próximos) e um conjunto de carcateres para o padrão de ruído. O algoritmo itera sobre cada linha, mantendo um buffer de referência. Para cada coluna, o caractere é copiado de uma posição anterior na mesma linha, ajustada dinamicamente pelo valer de profundidade.

import random
import string

def renderizar_autoestereograma(matriz_profundidade, alfabeto, largura_bloco=14):
    total_linhas = len(matriz_profundidade)
    total_colunas = len(matriz_profundidade[0])
    malha_visual = []

    for y in range(total_linhas):
        linha_buffer = []
        semente_aleatoria = [random.choice(alfabeto) for _ in range(largura_bloco)]
        
        for x in range(total_colunas):
            nivel_z = matriz_profundidade[y][x]
            fator_deslocamento = max(1, int(nivel_z * 0.75))
            indice_referencia = x - largura_bloco + fator_deslocamento
            
            if indice_referencia < 0:
                caractere_atual = semente_aleatoria[x % largura_bloco]
            else:
                caractere_atual = linha_buffer[indice_referencia]
                
            linha_buffer.append(caractere_atual)
            
        malha_visual.append("".join(linha_buffer))
        
    return malha_visual

# Exemplo de uso com mapa de profundidade simples
mapa_z = [[0]*50 for _ in range(20)]
for i in range(5, 15):
    for j in range(15, 35):
        mapa_z[i][j] = 5  # Região elevada (mais próxima)

padrao_chars = string.ascii_uppercase + string.digits
resultado = renderizar_autoestereograma(mapa_z, padrao_chars)
for linha in resultado:
    print(linha)

Padrões de Interferência e Renderização de Malha

A saída gerada pelo script resulta em blocos de texto que, à primeira vista, parecem ruído aleatório. Abaixo estão exemplos de como a manipulação de espaçamento de caracteres e a utilização de matrizes de pontos podem formar volumes ocultos. O primeiro bloco demonstra o deslocamento de texto contínuo, enquanto o segundo utiliza uma malha de pontos para projetar uma superfície esférica.


A8S2D5F9G3H6J1K4L7P0O3I8U5Y8T2R6E9W3Q7A4S1D8F5G2H3J6K9L2Z5X8
3B5N8V1C6X9ZW4E7R2T9Y5U1A8S2D5F9G3H6J1K4L7P0O3I8U5Y8T2R6E9W3
Q7A4S1D8F5G2H3J6K9L2Z5X8C1V4B7N0M3Q6X7K9P2M4Q8R1W4E7R2T9Y5U1
W4E7R2T9Y5U1A8S2D5F9G3H6J1K4L7P0O3I8U5Y8T2R6E9W3Q7A4S1D8F5G2
H3J6K9L2Z5X8C1V4B7N0M3Q6X7K9P2M4Q8R13B5N8V1C6X9ZW4E7R2T9Y5U1
C1V4B7N0M3Q6X7K9P2M4Q8R1W4E7R2T9Y5U1A8S2D5F9G3H6J1K4L7P0O3I8
X7K9P2M4Q8R13B5N8V1C6X9ZW4E7R2T9Y5U1A8S2D5F9G3H6J1K4L7P0O3I8
U5Y8T2R6E9W3Q7A4S1D8F5G2H3J6K9L2Z5X8C1V4B7N0M3Q6X7K9P2M4Q8R1
J1K4L7P0O3I8U5Y8T2R6E9W3Q7A4S1D8F5G2H3J6K9L2Z5X8C1V4B7N0M3Q6


.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
   .    .    .    .    .    .    .    .    .    .    .    .    .
     .     .     .     .     .     .     .     .     .     .
        .      .      .      .      .      .      .      .
            .       .       .       .       .       .
                 .        .        .        .
|          |          |          |          |          |          |
|          |          |          |          |          |          |
|          |          |          |          |          |          |
|          |          |          |          |          |          |
                 .        .        .        .
            .       .       .       .       .       .
        .      .      .      .      .      .      .      .
     .     .     .     .     .     .     .     .     .     .
   .    .    .    .    .    .    .    .    .    .    .    .    .
 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .

Tags: ascii-art Algoritmos Python visão-computacional estereoscopia

Publicado em 7-26 09:52