Friday, October 20, 2017

El festival Aleph de la UNAM


Entre las actividades del Festival Aleph de Ciencia y Arte, en la UNAM, en el Centro Cultural Universitario, fui invitado a compartir una plática con el Monero Bef, con el que hablaremos de la física de los superhéroes. Bef además de monero e un estupendo escritor y novelista.

Así pues, el 21 de octubre del 2017 (sábado), estaremos a las 11 am en el Centro Cultural Universitario, para platicar de este tema, que quiero suponer, será interesante a partir de que Bef sabe de Comics un montón y un poco más.


Monday, October 16, 2017

Programación lúdica: ecualización del histograma de una imagen



El proceso digital de imágenes tiene una serie de técnicas para poder manipular los pixeles de una imagen. En un artículo pasado vimos la manera de ajustar el contraste a partir de estirar el histograma de frecuencias de valores de los pixeles en una imagen de tonos de gris. Cabe señalar que en una imagen de grises solamente puede haber 256 tonos diferentes, cuyas componentes de color son: (0,0,0) que es el negro; (1,1,1) que es menos negro... y así hasta (255,255,255), que es blanco.

Desafortunadamente el estirar el histograma no sirve cuando la diferencia entre el contraste mínimo y máximo es de 255, porque la fórmula para cada nuevo pixel sería: (TonoDeGris / 255) * 255, lo cual sería dividir entre 255 y multiplicar entre 255, lo que dejaría el resultado como el pixel original. Por ello, es necesaria otra técnica y ésta es lo que se llama la "ecualización de un histograma".

Cuando uno "ecualiza" algo, por ejemplo, una señal de audio, lo que hacemos es que los bajos y los altos se igualen. En lo que se refiere a gráficas, cuando hay muchos pixeles oscuros entonces se reduce esa cantidad y si hay pocos pixeles claros, se incrementan estos.

Para "ecualizar" (o igualar) los valores del histograma, lo que tenemos que hacer es simplemente crear algo que se llama CDF (Cumulative Distribution Frequency), lo cual es simplemente un arreglo de 256 bytes que contienen la suma de los valores de las frecuencias de los valores previos. Por ejemplo, si tenemos valores de frecuencias para los tones de grises: 52 tenemos 1, 53 tenemos 3, 58 tenemos 2 y 59 tenemos 3, entonces el CDF será 1, 4, 6, 9, etcétera, para el CFD[52], CDF[58] y CDF[59]. Simplemente sumamos el valor actual con el anterior y listo. Teniendo este valor, solamente nos falta calcular la ecualización de cada pixel, la cual es una función como ésta, para cada pixel en la imagen: NuevoPixel = round(((CDF[R]-1) / CDF[255]) * 255).

Para ver si esto funciona, tomemos la siguiente imagen de Lena:



Y procesemos de acuerdo a lo que hemos dicho:



Puede observarse que la imagen se ecualizó y el contraste cambió significativamente. Nótese cómo el histograma se "estiró" de alguna manera.

Cabe señalar que esta técnica puede no ser necesariamente la mejor pero todo dependerá de qué queremos hacer y por qué queremos ecualizar una imagen.

A quien le interese este tema, escríbame a morsa@la-morsa.com y le enviaré el software ejecutable y el código fuente escrito en Delphi.

Saturday, October 14, 2017

Cómo realizar el contraste de una imagen


En el curso que doy en la Facultad de Ciencias de la UNAM, de Proceso Digital de Imágenes, enseño cómo hacer una serie de filtros, muchos de ellos se pueden ver directamente en Photoshop, aunque otros, sobre todo los artísticos, no parecen ser fáciles de saber cómo están hechos, porque no hay documentación al respecto y en el oráculo que es Internet no he encontrado referencias sobre los mismos.

De todas maneras en este blog ya he descrito muchos de los filtros que enseño y otros que incluso no están disponibles en Photoshop o que hacerlos mediante esta herramienta pudiese resultar muy problemático de simular.

Uno de los filtros más comunes es el del contraste, y existen un par de algoritmos para realizarlos. Cuando uno aplica este filtro lo que hace es mover normalmente un valor el cual modifica pixel a pixel la imagen con la que estamos trabajando. Sin embargo, el resultado final muchas veces se hace a "ojímetro", es decir, midiendo visualmente cómo se ve la imagen al aplicarle cierto contraste.

Hay, sin embargo, una idea interesante para contrastar imágenes de manera automática. Esto se hace a través del ajuste del histograma de una imagen, el cual se basa en diferentes pasos (primero hablaremos de imágenes en tonos de gris):

  1.  cargar la imagen a procesar
  2.  calcular el histograma de frecuencias de tonos de gris de la imagen
  3.  Localizar los valores máximo y mínimo de los pixeles y hacer la resta de forma absoluta, es decir, nos dará el máximo contraste en términos positivos
  4. Aplicar la siguiente fórmula: NuevoPixel = (TonoDeGris / MaximoContraste) * 255
  5. Colocar el tono de gris nuevo en los tres componentes del pixel procesado (RGB).


Cabe decir que si tomamos el máximo contraste (MaximoContraste) como 255, la fórmula simplemente no hace nada, pues tendríamos: NuevoPixel = (TonoDeGris / 255) * 255, lo cual da que el valor es simplemente NuevoPixel = TonoDeGris, o lo que es lo mismo, multiplicamos y dividimos por 255.

Por ejemplo, la siguiente imagen de Einstein (ver siguiente figura), muestra su histograma que, como puede verse, tiende a estar más oscura que clara. Si tomamos la diferencia de contrastes como 225, entonces podemos aplicar la fórmula mencionada y ver cómo mejora la imagen.



Obsérvese (siguiente imagen), el resultado de esto. Nótese cómo cambia el histograma también.



Este procedimiento, como se mencionó, falla si tomamos 255 como el máximo contraste porque entonces no le estamos haciendo nada a la imagen. Sin embargo, se me ocurrió que bien podría yo decirle el valor máximo de contraste y debería funcionar. Como no estaba seguro de esto, hice el programa en cuestión y ¡ay! hallé que en principio sirve, pero deja "artefactos", es decir, puntos indeseables que no deberían quedar en la imagen procesada (véase la siguiente imagen)



Este proceso puede hacerse para imágenes en color también (no lo he hecho aún), pero en los documentos y páginas web que he leído, aparentemente funciona. Ya hablaré de los resultados de este proceso usando color, pero pienso que igual que en el caso anterior de tonos de gris, en algunos casos el procedimiento también dejará artefactos.

La solución es hacer una ecualización del histograma, pero esto es más complejo y lo abordaremos en otro artículo. Mientras tanto, dejo accesible el código fuente y ejecutable en Delphi de este programa. Basta con pedírmelo a mi correo morsa@la-morsa.com y lo encontrará a la brevedad en su buzón.

Monday, October 09, 2017

¿Es el ser humano bueno?



Hoy, como muchos otros días, recibo correos en donde se me indica que se ha bloqueado mi cuenta en el banco X y para desbloquearla debo ir a una página web en donde me pedirán mis datos y mis contraseñas. La página a la que me remiten, en su URL no dice por ejemplo, www.santander.com, sino www.satander.com, en un afán de que lea mal y que crea que estoy en la página oficial del banco en cuestión. A todo esto, lo que veo es una página idéntica al del banco, nada más que con los enlaces a sitios que desde luego, no corresponden a la institución financiera.

Y hoy me llega un correo diciendo que mi cuenta de Netflix tiene problemas. Y sí, debo tenerlos porque ni cuenta de Netflix tengo. O bien, me indican que Amazon me da por ser un gran cliente un bono de 50 dólares, lo cual, al entrar en los enlaces correspondientes, es fácil darse cuenta que esto no tiene nada que ver con la tienda de libros en línea. Es otro sitio falso que quiere que conteste preguntas personales, que le dé datos confidenciales, etcétera...

Pero por si fuera poco, desde hace unos días he empezado a recibir una andanada de correos de hermosas damas rusas que quieren todo conmigo. Algunas incluso me dicen que no saben por qué ya no les contesté. Es raro que pregunten eso porque simplemente nunca les escribí.

No falta, evidentemente la señora en África, que tiene muchos millones, un marido muerto, ella enferma terminal de cáncer, que quiere donarme toda su fortuna a mí, un absoluto desconocido, para que entonces le cumpla su última voluntad y haga un centro para niños pobres además de quedarme con un estupendo bono de muchos millones por mi gran obra. Pero claro, todo esto no puede ser verdad y no lo es.

Y podría seguir en esta lista absurda de mentiras por correo que recibo constantemente. En todos los casos hay un afán de defraudarme de alguna manera. La red Internet está llena de sitios en donde se reportan todos estos fraudes pero la ingenuidad humana parece siempre sobrepasar todas las advertencias. Y no importa que les diga que no, no hay nadie en el mundo que le va a regalar millones de dólares por su linda cara o bien, no, no existe una escultural mujer de ojos azules y sonrisa de dientes blancos, perfectos, con medidas asombrosas de modelo, que quiera ser tu esposa.

Quienes escriben esos correos saben que sus mentiras y sus maquiavélicas ideas para defraudar a los remitentes nunca recibirán castigo. Y por eso son capaces de mentir, de poner fotos falsas, de hacer alusión a sitios web para dar credibilidad a sus falsedades o mandar fotos de alguna anciana en un hospital para supuestamente hacer creíble su trampa (http://la-morsa.blogspot.mx/2017/03/la-tecnologia-contra-el-fraude-nigeriano.html). Y confían en los seres humanos ingenuos, que ante la posibilidad de ganar dinero sin hacer nada, se les nubla el mínimo razonamiento y caen en la trampa.

Pero fuera de todo esto, en este cotidiano acto de borrar a todos estos tramposos (porque nada m's se puede hacer realmente), me pregunto algo: ¿es acaso el hombre un ser bueno? ¿y si la respuesta es afirmativa, por qué hay tanto tramposo que se muestra por Internet? ¿No será finalmente que la naturaleza humana tiene más que ver con la maldad?

Tuesday, October 03, 2017

El país de los pedinches (parte II)



México, como ya mencioné aquí, se ha instalado como un país en donde todo mundo te pide dinero para todo género de causas. Y entiendo que muchas organizaciones que buscan hacer el bien muchas veces no tienen los suficientes recursos y entonces apelan a los donativos, a la "cooperacha", para hacerse de fondos, pero lo que pasa en este país ya es ridículo.

Una vez estaba en una comida y alguien, que trabaja en una ONG, decía que había que hacer donativos porque el dinero no alcanzaba. Le respondí con un "ni alcanzará". Es decir, no importa cuánto dinero se dé a estas organizaciones. Siempre las necesidades las rebasarán. Pero no importa eso, el chiste es pedir y que todos den, como en la pirinola, donde "todos ponen" (menos el gobierno, desde luego).

Con los sismos, un fenómeno que aparece de inmediato, como de generación espontánea, son los centros de acopio. Y la verdad es que habrá muchos centros que trabajarán de manera tal que todo lo que reciban se entregue a las personas en desgracia. El problema es que nadie puede estar seguro. Por ejemplo, por donde vive mi madre una casa puso una buena pancarta, colgada en todo lo ancho de la calle, en donde dice ser centro de acopio. Pasé por ahí a pie y vi cajas, papel de baño, bolsas de arroz, etcétera, apiladas. ¿Qué hacían ahí? ¿Se mandarán a los damnificados? ¿Cómo sé? ¿Por qué debo confiar que eso pasará? Y pensemos en el número enorme de centros de acopio en donde, por ejemplo, en los últimos días quedaron algunos "sobrantes" porque recién les llegaron esos donativos en especie. ¿Se entregarán? ¿A quién le rinden cuentas? Finalmente si deciden por ejemplo, quedarse con unas bolsas de frijol, ¿quién las va a extrañar? ¿O quién les va a reclamar algo? Y si consideramos que la mitad del país vive en la pobreza, entonces estos centros de acopio pueden servir para ayudarse a sí mismos, cosa que está mal, porque no habría sido la idea original de dichos centros.

Pero si esto fuera poco, voy caminando por la calle y veo a un tipo con una alcancía pidiendo para el Teletón, indicando que lo que se recaude es para los damnificados de los sismos. ¿Es neta? Y entonces empiezo a pensar que ¿cuál teletón? es un vivales más. Y poco después veo a otro con otra alcancía que dice algo así como "México de pie", y también pide dinero a los automóviles en los altos. Vamos, pedir siempre resulta fácil y lo es más que el ponerse a trabajar. Y toda esa gente que sale con sus alcancías, ¿Por qué mejor no trabaja y dona sus salarios? ¿Por qué hay que pedirle a los demas? ¿Por qué no pedirle, perdón, exigirle al estado que cumpla con sus obligaciones? Misterio.

Yo dejé de dar dinero en la calle cuando en una ocasión, que fui a la Delegación Benito Juárez a hacer mi pasaporte, y estaba esperando que me lo entregaran, platiqué con una señora que vestida como enfermera, con una alcancía en forma de pequeña maletita de cuero, pedía dinero en la calle. Ella me contó que el dinero que juntaba lo llevaba a no sé qué lugar en donde abren la dichosa maletita y le dan la mitad de lo recaudado. Así de simple es el asunto.

En suma, creo que de verdad, dejémonos de más teletones, aunque el cretino de Fernando Landeros llore porque la gente ya no quiere cooperar debido a la propaganda en contra que se ha difundido ya por años en las redes sociales. Por ejemplo, con los damnificados del sismo, ¿por qué no pedirle al gobierno que use los 9 mil millones de pesos, más todos los donativos de empresas y personajes públicos, para aliviar la situación? ¿Por qué esa insistencia de que la ciudadanía se siga "mochando"?