Cómo Convertir Gráficos Desordenados de Redes Neuronales en Pixel Art Perfecto
Cualquiera que haya intentado generar pixel art a través de Midjourney, Stable Diffusion o ChatGPT casi inmediatamente se encontró con el mismo problema. La red neuronal dibuja honestamente pequeños cuadrados, pero estos cuadrados son irregulares. En algún lugar un píxel tiene 11 puntos de pantalla de ancho, en otro 13, las diagonales se vuelven borrosas y la cuadrícula se rompe sin vergüenza. Simplemente reducir dicha imagen mediante Nearest Neighbor o Bilinear no funcionará: la imagen instantáneamente se convierte en un desastre de artefactos.
El autor de la biblioteca perfectPixel resolvió este problema matemático sin muletas de difusión pesadas, puramente con herramientas clásicas de visión artificial.
Por Qué el Redimensionamiento Estándar No Funciona
Cuando miramos un sprite generado, parece que hay una cuadrícula clara. En realidad, los modelos de difusión no saben nada sobre coordenadas de píxeles discretas. Dibujan una imagen continua que simplemente se parece visualmente a un estilo retro.
Como resultado, obtenemos varios problemas a la vez:
- El tamaño de celda varía en toda el área de la imagen.
- Las proporciones de los píxeles están ligeramente estiradas horizontal o verticalmente.
- Los bordes están borrosos por el anti-aliasing, lo que hace imposible determinar con precisión dónde termina un bloque y comienza otro.
- La resolución original de la cuadrícula no está clara: ¿era 32×32 o 48×48?
La biblioteca perfectPixel toma una imagen de pseudo-píxeles (el autor recomienda generar imágenes fuente entre 512 y 1024 px) y la convierte automáticamente en una matriz de píxeles estricta y uniforme.
Cómo Funciona el Pipeline Bajo el Capó
En lugar de entrenar otra red neuronal encima de una red neuronal, el proyecto utiliza procesamiento clásico de señales y divide el problema en tres pasos claros.
Primero, el algoritmo aplica la Transformada Rápida de Fourier (FFT) a la imagen fuente. Dado que los píxeles se repiten con cierta periodicidad, aparecen picos distintos en el espectro de frecuencias. Usando estos picos, la biblioteca calcula el paso fundamental de la cuadrícula, incluso cuando no conoces el número exacto de bloques en el sprite.
Luego, un operador de Sobel entra en juego para detectar límites físicos de objetos. La cuadrícula encontrada en el primer paso se desplaza ligeramente y se alinea con los bordes reales de transición de color para compensar las distorsiones ópticas de la red neuronal.
En la etapa final, ocurre el muestreo de color dentro de cada celda. Puedes tomar el color del píxel central, la mediana o el tono que ocurre con mayor frecuencia (votación mayoritaria), eliminando el ruido de color parasitario.
Opciones de Instalación y Ejecución
El proyecto está escrito en Python y ofrece dos backends para elegir. Si la velocidad es importante, instala la variante de OpenCV. Si necesitas algo ligero sin bibliotecas C pesadas, hay disponible una implementación pura en NumPy.
La instalación a través de pip se ve estándar:
# Быстрая версия с OpenCV
pip install perfect-pixel[opencv]
# Легковесная версия только на NumPy
pip install perfect-pixel
En código, todo el procesamiento toma literalmente tres líneas:
import cv2
from perfect_pixel import get_perfect_pixel
# Читаем исходный сгенерированный арт
bgr = cv2.imread("images/avatar.png", cv2.IMREAD_COLOR)
rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)
# На выходе получаем ширину, высоту и готовую чистую матрицу
w, h, out = get_perfect_pixel(rgb)
Aquí hay un ejemplo visual del repositorio. A la izquierda está el resultado de generación de un prompt de ChatGPT, a la derecha está el resultado procesado después de pasar por la biblioteca.
![]()
La cuadrícula encajó en su lugar, los píxeles fraccionarios desaparecieron y la imagen ahora puede exportarse como PNG 1x para un motor de juegos o patrones termomosaico.
Ajuste Fino e Integración
Si la automatización obtuvo mal la frecuencia o el arte tiene demasiados detalles pequeños, la función puede ajustarse con argumentos:
w, h, out = get_perfect_pixel(
rgb,
sample_method="majority", # Способ выборки цвета: center, median или majority
grid_size=(32, 32), # Принудительный размер сетки, если автодетект не нужен
refine_intensity=0.2, # Диапазон сдвига линий сетки к краям Собеля
fix_square=True, # Принудительно делать пиксели квадратными
debug=False # Показ графиков работы алгоритма
)
Para quienes construyen pipelines de generación en ComfyUI, el autor creó un nodo personalizado. Esto permite integrar la cuantización de cuadrícula justo al final del grafo de difusión, produciendo activos limpios sin post-procesamiento manual en editores gráficos.
Puedes probar el algoritmo directamente en el navegador antes de instalarlo en la página de demostración web.
A Quién Le Será Útil
El proyecto aborda un punto de dolor específico para desarrolladores indie y artistas que intentan usar arte generativo en juegos 2D. No redibuja el sprite desde cero: corrige cuidadosamente los defectos matemáticos de la difusión, ahorrando horas de edición manual en Aseprite.
Si generas texturas, iconos de inventario o sprites de personajes y estás cansado de limpiar bordes borrosos, perfectPixel definitivamente merece un lugar en tu pipeline de construcción local.
Proyectos relacionados