Una plantilla de pintar por números convierte una fotografía de tono continuo en regiones de color planas con un número que corresponde a una pintura: paleta limitada, áreas pintables y un número legible en todas ellas. Esto es lo que hace realmente la herramienta en cada fase.
K-Means en CIELAB, Inicializado con K-Means++
K-means reparte los píxeles en k grupos; cada uno entra en el clúster cuyo centro le queda más cerca, y ese centro es la media de sus miembros: por eso cada color de la paleta es el promedio de los píxeles que representa. La inicialización usa k-means++ — cada semilla se elige con probabilidad proporcional al cuadrado de su distancia a las ya escogidas — para que dos clústeres no persigan el mismo color mientras un tono se queda sin representar. Todo ocurre en CIELAB, donde la distancia se aproxima a la diferencia percibida.
Mantener los Colores Separados, y lo que Eso Cuesta
K-means por sí solo reparte plazas donde hay píxeles, no donde hay interés: la piel domina un retrato, así que una docena de entradas pueden acabar en marrones mientras el rojo de unos labios no gana ninguna. Por eso la herramienta impone una separación perceptual mínima con el mismo umbral que el control «Fusionar colores similares». En tres rondas busca la pareja de centroides más próxima por debajo de ese umbral, y una casilla de los colores propios de la imagen que quede por encima del umbral respecto de todos los centroides. Si existen ambas, la pareja se funde en su media ponderada por área — el color que saldría al mezclar las dos pinturas en proporción al lienzo que ocupa cada una — y el centroide liberado se resiembra en la casilla candidata con mejor puntuación: área por distancia a su centroide más cercano.
Es un intercambio deliberado, no una mejora universal. En una fotografía que de verdad es de un solo tono, o cuya paleta ya está bien repartida, falta una mitad del trato y los centroides se quedan como los dejó k-means. Cuando sí actúa, ganas un color que antes no estaba y lo pagas en fidelidad de conjunto: medido en tres retratos reales, uno recuperó un azul ausente y un segundo rojo de labios y mejoró en el total, otro mejoró ligeramente, y el tercero consiguió unos labios pintables mientras su error medio de color empeoraba.
De Colores a Regiones Pintables
Cuando cada píxel lleva ya un número de paleta, la imagen se parte en regiones conectadas del mismo número, y dos pasadas las depuran. La primera pregunta si dos vecinas son en realidad un solo color para quien sostiene el pincel: recorre las parejas adyacentes por cercanía en CIELAB, funde las que caen dentro del umbral en su mezcla ponderada por área y repite, porque al fundir cambia el color del superviviente y eso puede acercar a una tercera vecina. Así una cara no se rompe en un mosaico de astillas, y va primero para que todo lo posterior vea menos regiones y menos finas. La segunda absorbe cualquier región sin interior pintable en su vecina más próxima en color.
Contornos: Bordes de Frontera y Luego Curvas
Los contornos no salen de una detección de bordes. Se recoge como borde de frontera cada arista de la rejilla donde las dos regiones adyacentes difieren, y esas aristas se cosen en anillos cerrados: por eso dos vecinas comparten una única línea sin huecos y no dos casi superpuestas. Cada tramo compartido se simplifica una sola vez con el algoritmo de Ramer–Douglas–Peucker, con la tolerancia que fija tu ajuste de «Suavizar bordes», y se comparte literalmente entre las dos regiones que lo bordean. Eso deja aún el zigzag en que una rejilla convierte una curva, así que una última pasada juzga cada vértice por cuánto gira el contorno en una ventana corta a cada lado: más de 30° es una esquina real y se conserva; menos es residuo de la tolerancia sobre un borde suave y se redondea con una curva Bézier cuadrática anclada en los puntos medios de sus aristas vecinas. De ahí que un hombro se lea como un trazo dibujado.
Colocar los Números, y Por Qué Algunos Llevan Línea Guía
Cada número debe quedar claramente dentro de su región, incluso en un área curva o en forma de L cuyo centro geométrico cae fuera. La herramienta calcula una transformada de distancia por región y coloca el número en el «polo de inaccesibilidad», el punto interior más alejado de cualquier borde; esa distancia es el radio inscrito de la región. Que un número quepa solo tiene sentido en relación con el tamaño al que imprimes: un dígito de la altura en milímetros que elijas ocupa (mm ÷ 25,4) × PPP píxeles en la lámina, y dividir por los píxeles de salida de cada píxel de segmentación devuelve esa cifra a las unidades del radio inscrito. Toda región por debajo de la mitad recibe una línea guía: se muestrean dieciséis direcciones desde su punto de etiqueta, gana la que sale antes y el número se sitúa justo detrás, con el trazo de vuelta. Como el requisito está anclado a un milímetro físico, la misma fotografía necesita más líneas guía en A5 que en A3.
Cuando una Foto Da Demasiado Trabajo
Todo esto se ejecuta en tu navegador, y un techo de segmentación protege la pestaña de una ejecución que no acabaría nunca. Las fotografías de mucho detalle — arena, pelaje, hojarasca — llegaban a cruzarlo; la fase de fusión de colores, donde una ejecución así consume casi todo su tiempo, es ahora muchísimo más barata, así que una foto que tardaba más de un minuto en Firefox y se rendía termina en unos segundos. El techo sigue ahí, porque siempre habrá alguna fotografía que dé demasiado trabajo; lo que ha cambiado es que alcanzarlo ahora nombra los dos ajustes que de verdad reducen el trabajo — menos colores y un valor más alto de «Fusionar colores similares» — en vez de dejar un panel vacío.
Herramientas relacionadas con el mismo motor de color
Para ver la paleta exacta que elegiría este generador — en HEX, RGB y HSL, con el porcentaje de cada color en la imagen — pasa antes la foto por el generador de paleta de colores; es útil para igualar pinturas o imprimir una tarjeta de muestras junto al lienzo. Y si lo que quieres es el vector relleno y en color de un logo o una ilustración plana, y no una plantilla numerada, el convertidor de imagen a SVG comparte el trazado de regiones de esta herramienta pero conserva los rellenos.