Matt Zucker ha desarrollado un algoritmo llamado NoteShrink, con una excelente página explicativa sobre su funcionamiento, para limpiar y mejorar las imágenes escaneadas de apuntes escritos a mano. Además de eso, el resultado pasado por la compresión es mucho menor que el de las imágenes originales.
Los ejemplos que aporta son bastante impresionantes: las típicas zonas grises de sombras de los escaneados desaparecen, también la transparencia de las notas tomadas en la parte de atrás de las hojas. Sin embargo si hay «líneas guía», como las de las hojas a rayas o cuadros, las guías se mantienen aunque con el contraste conveniente para garantizar la legibilidad.
Cómo funciona el algoritmo NoteShrink
Una página de apuntes escritos a mano escaneada a 300 ppp puede tener unos 7 MB (en PNG/TIFF); convertida a JPEG calidad 85 se queda en unos 800 KB. El algoritmo de Zucker produce un fichero resultante de alrededor de 100 KB. Otra ventaja es que además separa correctamente la letra escrita en varios colores: negro, rojo azul… y mantiene el fondo del papel si es relevante.
El algoritmo comienza calculando cuál es el color de fondo y luego los colores de escritura; esto consiste en reducir los bits de la profundidad de color (de 8 por canal a 4) seleccionando luego solo los que deben corresponderse a la «escritura» (que suele ser un 3% del total).
Luego se agrupan los colores similares, como por ejemplo el gris claro del texto que «transparenta» y el fondo blanco, ambos muy cerca en la paleta de color. Y se hace prevalecer la mayoría, (lo cual equivaldría a dar por sentado que la gente utiliza colores que contrastan mucho para escribir, una suposición generalmente correcta). Como el 80-90% de los colores de los píxeles de fondo suelen ser blancos, al reemplazar todos los grises claros por blanco esa escritura transparente que no es válida simplemente desaparece.
La imagen original tiene 24 bits por pixel de color, pero una vez simplificada se puede elegir un conjunto de colores representativos, por ejemplo rojo, azul, negro (y quizá el rosa de las rayas de fondo) por métodos estadísticos y de agrupación. El resultado es una paleta indexada de tan solo 8 colores que reproduce fielmente el original. (Todo esto se puede hacer variando algunos parámetros, pero para un mismo tipo de apuntes los valores por defecto parecen captar bien la idea.)
Finalmente se puede encapsular toda la imagen, que sale en JPEG, dentro de un archivo PDF estándar, lo cual apenas añade unos pocos bytes. Y listo: el archivo documental en formato abierto queda listo para la posteridad.
El código, escrito en Python, es software libre y tiene una licencia MIT. Quienes quieran utilizarlo, examinarlo o combinarlo con otros proyectos pueden descargarlo de Github: NoteShrink. Estaría genial verlo como filtro de Gimp, Photoshop y otras herramientas para manejar imágenes o PDFs. Entran ganas de sacar viejos cuadernos de notas y empezar a escanear…