Showing posts with label limpiar una imagen de texto. Show all posts
Showing posts with label limpiar una imagen de texto. Show all posts

Tuesday, October 21, 2014

Programación lúdica: más sobre el filtro "Máximo"


En el artículo pasado platiqué la idea de hacer un programa que limpiara, de alguna manera, un documento que me interesa, pero que viene como escrito en súper-negritas. Usé el filtro "máximo" (Federico Mena, uno de los que han trabajado en Gimp, si la memoria no me falla), me dijo que usara el filtro "erosión", pero es el mismo que usé. Federico sugirió bajarle el radio de la vecindad. Estaba usando uno de 5x5 (véase la siguiente imagen):


Así que reduje al mínimo la vecindad del filtro y así "erosionar" menos la imagen. Usé el filtro 3x3 (ver siguiente imagen):



Hice una prueba con ambos filtros, con la página 13 del documento y esto fue lo que hallé (presento las tres versiones, un fragmento de la imagen original, la del filtro 5x5 y la del filtro 3x3, de arriba a abajo).



Como puede verse, usando el filtro con su mínima vecindad, hallé que la imagen era más legible aunque de todas maneras, la lectura es complicada de hacer.

En un afán por resolver esto, decidí pasar el archivo a PDF y procesarlo con un reconoceedor de caracteres óptico (OCR) en línea (http://www.onlineocr.net/). El resultado fue éste (se muestra sólo un fragmento):



Como puede verse, el resultado de la conversión es desastroso. Meditando sobre el asunto, probablemente haya que usar diversos filtros para procesar la imagen y uno solo, como este filtro, que "erosiona" la imagen, no es suficiente.

Sin embargo, Vivaldi González (así se llama, es verdad), uno de los mejores estudiantes que he tenido, amén de ser un tipo muy abusado, me esribió por Facebook indicándome lo siguiente, lo cito:

De tu problema con las imágenes en super negrita, imagina una letra "t", la línea vertical y horizontal deberán abarcar 3 pixeles de ancho normalmente (por decir algo). Cuando están remarcadas en negrita estas proporciones se modifican (duplican) por sugerir algo. Lo que yo sugiero que hagas es algo así como: Imprimir 5 veces en un acetato el texto, cada acetato recorrerlo ciertos pixeles, uno en cada dirección uno lo dejas sin mover.  Habrá una especie de intersección en algún punto, aquellos pixeles que no intersectan se volverán blancos. Eso dará una apariencia de adelgazar las letras (creo yo).

¿Cómo ven esta idea? La he meditado pero no me parece funcional. Pongo un fragmento de una de las cuartillas originales (con zoom), para ue vean cómo se ven las palabras de forma original.


Se aceptan sugerencias...

Monday, October 20, 2014

Programación lúdica: Un experimento fallido


Recientemente conseguí una tesis de maestría, de la Universidad de Alberta, en Canadá, la cual habla de un tema que estoy investigando. La tesis se puede descargar directamente en formato PDF del sitio de la mencionada institución. Descubrí que en realidad el PDF es una colección de imágenes, es decir, no es un texto convertido a PDF sino que pareciera que alguien escaneo -quizás página por página- la tesis original y la hace accesible como PDF, aunque investigando un poco más, hallé que no se escaneó, sino que es una imagen microfilmada y pasada a PDF de alguna manera.

La cuestión es que el escaneo de la tesis permite leerla pero, por alguna razón, quedó muy oscura, es decir, cada página muestra las palabras como si estuviesen en “súper-negritas”. Se puede leer, pero cansa, resulta de alguna manera incómodo. Como que el cerebro tiene que esforzarse para entender algunas palabras. Como me empezó a fastidiar esto, pensé que algo se podría hacer, y considerando que de procesamiento de imágenes algo sé, pues he dado este curso por algunos semestres en la Facultad de Ciencias de la UNAM, empecé a buscar qué filtro podría usar para hacer más legible el documento en cuestión.

Se me ocurrió entonces la siguiente idea: tomar cada página del texto, como una imagen JPG y procesarla con un filtro aún por determinar. El primer problema era cómo pasar un archivo PDF a imágenes. Sorpresivamente hallé que más de uno ha tenido esta necesidad y hay algunos programas que funcionan de manera gratuita, en línea, que hacen esta tarea. El que hallé muy conveniente es éste, el cual puede procesar un archivo PDF hasta de 25 megabytes. Suficiente, mi archivo era de 3 megas, aproximadamente.

El convertidor me presenta cada una de las hojas procesadas como imágenes, las cuales puedo descargar una por una, pero el propio sistema en línea me crea un archivo comprimido con todas las imágenes creadas. Así me ahorro el dar unos 102 clics para descargar cada imagen (la tesis en cuestión contiene 102 páginas de principio a fin). Una vez con las páginas convertidas a imágenes JPG, me puse a ver qué filtro podía ser el más adecuado. Hallé que probablemente el filtro “máximo” podría hacer la tarea. Este filtro toma una vecindad de 5 x 5 pixeles y calcula los colores en cada uno de ellos. Se halla el más brillante y ése se coloca en el punto de interés, es decir, en el centro de la vecindad de 5 x 5. Esto es básicamente un filtro llamado de “convolución”, el cual permite hacer filtros como los siguientes: hallar bordes, hacer la imagen más difusa, hacerla más precisa, etcétera.

Como todas las imágenes las tenía en una carpeta, escribí un pequeño programa que lee imagen por imagen (de la carpeta que yo especifico), las procesa y me entrega cada una de las imágenes convertidas. Cuando se tienen todas las imágenes convertidas, entonces se hace el proceso inverso, es decir, se suben a una página todas ellas y un programa en línea las convierte en un archivo PDF (también de forma gratuita).


Hice una prueba usando la imagen que venía en donde leí sobre el filtro máximo y parecía convincente. Entonces tomé las imágenes y las empecé a procesar… El proceso es lento, pues cada una de ellas es de unos 1275 x 1650 pixeles. Además, en un afán de ser más eficiente, antes de procesar cada imagen la pasaba a blanco y negro. Hice un par de pruebas ya con las primeras páginas de la tesis a ver cómo funcionaba el asunto y hallé estos resultados: No funcionó. No fue el filtro adecuado… Habrá que buscar otro. Quizás el filtro “Sharpen” sea el correcto. Fue todo este trabajo fue experimento fallido, pero aprendí bastante al programarlo. Esta es otra de las virtudes de la programación lúdica.