martes, 24 de septiembre de 2019

Luces atmosféricas

Se nombra atmosferic ghost light a un conjunto de fenómenos luminosos (la mayoría aún no explicados) que se reportan en muchas partes del mundo. Son tan relativamente comunes y la evidencia fotográfica y relatos anecdóticos son tan similares que tengo la sospecha de que se trata de procesos geofísicos que valen la pena investigar. En el caso de México, he escuchado en varios pueblos de Morelos, Guerrero y Puebla historias sobre "brujas", fantasmas de fusilados de la revolución y, por supuesto, ovnis que se aparecen volando en las cumbres de los cerros o en las entradas de las cuevas. Por un lado, mi hipótesis del origen natural de estas luces es algo que no les gusta oir a los aficionados a los ovnis o lo paranormal, y por el otro, es una propuesta de investigación que sería difícil de tomar en serio en la academia. Así que cazar estos objetos sería una aventura científica personal si lo llegara a llevar a cabo. Existen algunos vídeos en Youtube que me parecen reales, aunque me dan gracia algunos de sus títulos:
Algo muy recurrente es las historias de estos avistamientos, especialmente en los comentarios de personas que los han visto de cerca, es un ruido similar al de la estática en el radio y un olor a "estéreo quemado" [ozono]. Estas son dos características de fenómenos eléctricos de alto voltaje. Podrían tratarse de alguna forma de rayo esférico aunque no he escuchado ningún reporte durante la lluvia. Incluso en algún foro de buscadores de tesoros leí una historia de quemaduras internas [aunque la palabras que en realidad usaron fueron "hechizo de bruja"], lo que me haría sospechar de ondas estacionarias de microondas, que en principio serían requeridas para confinar un plasma esférico. Comparen el vídeo anterior con este otro:
El cerro de la Silla es mucho más alto, pero la posición relativa de las luces es similar. Si lo comparan ahora con este video de un rayo globular, comenzaran a notar también que aquí hay un patrón. La geografía de los 3 videos es muy similar. Otro lugar famoso muy similar es el Punto Marconi o "Cerro del Ovni" en Atlixco, Puebla donde también se reportan luces en las cumbres de los cerros de la zona. Probar mi hipótesis de los rayos globulares no sería sencillo. Estos fenómenos están muy ampliamente diseminados y no ocurren con tanta frecuencia. Sería muy útil tener un mapa con las etiquetas geográficas de todos los lugares en México dónde se reportan este tipo de fenómenos. Luego compararlos con los mapas de suelos y encontrar alguna correlación con las características físicas del terreno (si es zona sísmica o la abundancia de ciertos minerales en el suelo). Teniendo ese mapa, el siguiente paso sería construir una estación de instrumentación electrónica autónoma. Podría ser un módulo de bajo costo con cámara, estación meteorológica básica, con una Raspberry Pi alimentada por un banco de baterías recargadas con celdas solares y un enlace de comunicación LoRa. Con más presupuesto, un espectroscopio para tener más información sobre el proceso que genera la luz.

Si tienen curiosidad, aquí hay otras luces atmosféricas reportadas en otras partes del mundo:

domingo, 22 de septiembre de 2019

Registro de imágenes con SIFT en OpenCV

Se le llama registro al proceso de trasformación entre varios conjuntos de datos que permiten "encajar" o superponer patrones similares. Quizá el proceso más conocido sea la creación automática de fotos panorámicas a partir de varias fotos independientes. En esta entrada haremos un ejemplo más sencillo. Observen estas dos fotografías de un mismo objeto (uno de mis libros favoritos) tomadas en ángulos diferentes:
Lo que haremos sera colocar la imagen de la izquierda con la misma orientación y escala que la imagen de la derecha. Tomaremos de referencia las características comunes entre ambas imágenes (el libro principalmente). ¿Cómo encontramos estos puntos? En 2004 David Lowe publicó un algoritmo llamado SIFT (Scale-Invariant Feature Transform)  que permite encontrar puntos clave invariantes a las rotaciones y, en buena medida, a los cambios de iluminación. Los puntos clave con mejor correspondencia entre ambas imágenes se ven así:
Este algoritmo está patentado y no aparece en la instalación estándar de OpenCV. Deben seguir las instrucciones que puse en mi entrada anterior para poderlo utilizar. El código que escribí es una modificación para SIFT del código que pueden encontrar acá. Lo he reducido y comentado para mejor claridad:
La imagen final registrada es esta:

sábado, 21 de septiembre de 2019

Instalar OpenCV-Python con SIFT y SURF habilitados

Quiero ahorrarles algunas horas y frustración con esto. Estas notas están hechas para Linux (uso Debian) pero posiblemente funcione también en Windows (no lo garantizo). Voy asumir que ya tienen instalado Anaconda... Primero tienen que crear un nuevo entorno virtual (esto es por seguridad y no dañar su entorno principal de Python por si algo malo ocurre). Para crear un nuevo entorno:

$ conda create --name mi_entorno_OpenCV -y

Pueden nombrar su entrono como quieran pero es buena idea ponerle un nombre que haga referencia a su modulo. Si trabajan con IA seguramente necesitarán un nuevo para Tensorflow. Ahora, si es la primera vez que crean un entorno virtual tendrán que configurar su terminal para permitir que conda administre los entornos virtuales:

$ conda init bash

Si no usan bash debe poner la shell que utilicen. Bien, una vez que hayan hecho esto pueden activar su entorno con:

$ conda activate mi_entorno_OpenCV

Notarán que habra cambiado la etiqueta antes del promp y deberá aparecer el nombre de su entorno. Deberán instalar ahora matplotlib (su nuevo entorno solo tendrá numpy y scipy [si no, deberán instalarlos también]):

$ conda install -c conda-forge matplotlib

Spyder tampoco estará instalado en su nuevo entorno así que deberan instalarlo también:

$ conda install -c anaconda spyder

Recomiendo leer Managing enviroments de la documentación de conda. Ahora si, para instalar una versión de OpenCV que permita utilizar los algoritmos SIFT y SURF deberán instalar específicamente esta:

$ pip install opencv-contrib-python==3.4.2.16 

Listo. Terminada la instalación pueden hacer una prueba con los códigos de ejemplo de la documentación de OpenCV. Recuerden que deben mandar a llamar a Spyder desde la terminal con el entorno virtual que crearon para OpenCV. para salir del entorno utilicen:

$ conda deactivate

 En la próxima entrada pondré un ejemplo utilizando el algoritmo SIFT.

sábado, 14 de septiembre de 2019

Messidor

Si me preguntan a mí, The Durutti Column inventaron el Post-Rock en 1981 con la canción Messidor. Aparece en su segundo álbum: LC. Esta canción se adelanta casi 20 años a su época e incorpora mucha de la estructura y el estilo en las guitarras que le podemos escuchar a The Explosions in The Sky.


sábado, 31 de agosto de 2019

Sobre mi vida reciente I

Esta misma semana pero del año pasado tuve un cambió total de mi estado de ánimo de una manera que no hubiera previsto. Antes de llegar a ella necesitamos ir a diciembre de 2017...

Me había titulado de la BUAP en septiembre y para ese entonces estaba acabando de vender o regalar la mayoría de mis cosas. Me despedía de mi último hogar en Puebla. Mas que nostalgia me paso por la mente un arrepentimiento. Tenía una amiga que había sido vecina de pensión por algunos años. Nos habíamos confesado que nos gustabamos en 2015. Yo acaba de tener una ruptura de la tardé en recuperarme y ella tenía novio en ese entonces. Nunca pudo haber nada entre nosotros, una porque se fue hacer su tesis a un centro de investigación en Atlixco y dos, porque yo tuve mi colapso psicológico [desorden de ansiedad generalizada] a principios de 2016. Para julio de 2017 mi psicóloga me dijo que el tratamiento había terminado. Me sentía bien para entonces, con algunas recaídas menores, pero lo suficientemente renacido para seguir con mi vida. Ya había trazado mi plan. Aplicaría a la maestría en Sistemas Embebidos de la Universidad de Southamton en Reino Unido. Para finales de noviembre ya había asistido a las sesiones informativas de becas de posgrado al extranjero de una organización que no quiero ni mencionar. Sentía que tenía el destino a mi favor. Regresando a diciembre, solo en mi pequeño cuarto de Tres Cruces, me arrepentía por nunca haber intentado nada con C. Se me ocurrió salir con ella para despedirme, contarle mis planes y mi arrepentimiento. Cuando la vi, unos pocos días después, me dijo que estaba en Puebla porque había ido a las sesiones informativas de las becas de posgrado en el extranjero. '¿A dónde piensas ir?', le pregunté. "A Groningen, Holanda", me dijo para mi sorpresa. Eso cambió por completo mi speach para ese día y cambió un poco el curso de mi historia.

Valdría la pena contar todo lo que ocurrió después de esa tarde pero brincaré hasta julio de 2018. Precisamente, entre el 11 y el 24 de julio, cuando se vinieron abajo todos mis planes. C consiguió la beca estatal (de un estado vecino), le avisaron antes de la fecha oficial. Yo estaba esperando a revivir los mios de Puebla. Cuando la fui a ver, el 11, lo recuerdo, me dijo que había cambiado de opinión, que las cosas no iban funcionar estado en lugares diferentes estudiando un posgrado. Quizá tenía razón, pero no debió llenarme el oído de tantas cosas los meses anteriores. Sentí de repente que yo no era una persona por la que valiera la pena intentar algo. Partí al día siguiente, molesto, a Jojutla, Mor. Alejado del resto del mundo en la casa de mis abuelos era el mejor lugar para pensar las cosas con calma. El 20 llegó el seguido golpe: me negaron la beca. Ese día me sentía confundido si saber exactamente que pensar o sentir. Uno dos días después me cayó la realidad y empecé a retorcerme en llanto en una cama. Hice varías llamadas a mis amigos más cercanos. El hecho de ser muy abierto emocionalmente es una válvula de escape muy útil. Dos o tres días después me sentía bien de nuevo... hasta que casi de la nada tuve la peor recaída de ansiedad de mi vida. Ciertamente los sucesos de los días anteriores la habían detonado, pero no sentía que la alimentaran. Esto debe de las cosas más difíciles de explicar para los que hemos pasado por un desorden de ansiedad. La gente creía que estaba así por la beca pero en realidad lo que más preocupaba en ese entonces era mantenerme cuerdo. Empecé a tener episodios de hipocondría muy intensa por dolor de garganta que no se me quitaba. Mi miedo era tan grande que pensé en quitarme la vida (así los absurdos del desorden de ansiedad). Para principios de agosto comencé a retomar el control y las cosas comenzaron a mejorar mucho. Creí que había escrito una entrada sobre las primeras semanas de agosto. Pasaron cosas muy interesantes que definieron todo lo bueno que estoy haciendo ahora, pero me saldría del hilo principal de esta entrada. Cuando creí que ya estaba todo bien cambié una por otra. Para cuando comenzaba a desaparecer la ansiedad comenzó a crecer una depresión en mi. Para la segunda mitad de agosto había pasado del miedo a la indiferencia por la vida.

El 23 de agosto ocurrió entonces lo que me hizo ver mi vida de otra manera. Esa mañana, mi abuelo resbaló (o perdió el equilibrio, nunca lo supimos) y se fracturó la cadera. Ese fue el inicio de unos de los episodios más difíciles para mi familia. Mi abuelo ya sufría de demencia senil y el estar forzado a estar en una cama lo volvió muy violento y difícil de controlar. Mi mamá llegó desde Mérida pocos días después. Las noches era largas. Teníamos que turnaros para cuidarlo y detenerlo cuando intentaba pararse de la cama. Siempre nos insultaba y a veces nos golpeaba. Mi mamá y mi abuela lloraban de la desesperación. Pero en medio de ese caos, de repente me sentí como nunca antes. Sentía que mi vida tenía sentido. Si bien tuvimos el apoyo de la familia y amigos, no era posible que estuvieran las 24 horas con nosotros. Eramos sólo nosotros tres quienes tenían que lidiar con la tarea día y noche. Nunca sentí enojo por mi las cosas que hacía o decía mi abuelo. Sabía que la persona que habíamos conocido ya se había ido hace unos años por el progreso de la enfermedad. Mi mamá y mi abuela no parecían entenderlo y les afectaba mucho. Tuve varias pequeñas recaídas pero manejables y me levantaba en pocos días. No tenía opción realmente, tenía que estar bien para poder ayudar. Mi abuelo falleció en noviembre. Le lloré mucho en su momento, pero en el fondo sentíamos que tenía finalmente el descanso que merecía por una larga vida tan activa, novelesca y un final tormentoso. No sabré nunca que sería de mi vida sin todos estos giros. Mi última recaída fue en marzo y me he sentido muy bien y resiliente todos estos meses. Quisiera poder compartir el "método" que he seguido pero ni yo lo tengo claro. Estas cortas memorias son lo mejor que puedo hacer.

lunes, 15 de julio de 2019

Gráficas de Maplotlib en Tkinter

He estado aprendiendo usar el módulo TKinter para hacer interfaces gráficas en Python y me está encantando. A pesar de no tener un asistente gráfico como pyQT, se me ha hecho bastante fácil de usar. Para incrustar gráficos de Matplotlib en un GUI de Tkinter pongo el siguiente ejemplo en donde cada botón manda a graficar una función diferente:

  

martes, 9 de julio de 2019

martes, 2 de julio de 2019

Áreas, perímetros y centroides de imágenes binarias con scikit-image

Utilizando las funciones label() y regionprops() del submódulo measure de scikit-image podemos obtener varios parámetros muy útiles de regiones binarias contiguas (blobs binarios). En este ejemplo construiremos una imagen binaria con dos círculos de diferente tamaño de los cuales obtendremos sus propiedades.

Las salidas del programa son:

Región 1:
Area (pixeles): 15361
Perimetro (pixeles): 458.2741699796952
Centroide: (80.0, 100.0)


Región 2:
Area (pixeles): 7825
Perimetro (pixeles): 326.3919189857866
Centroide: (220.0, 220.0)

Es posible  construir un dataframe de pandas a partir del diccionario de propiedades generado con la función regionprops_table(). Si están comenzando con scikit-image pueden revisar mis notas de mi curso introductorio aquí.

viernes, 7 de junio de 2019

Generar imagenes PNG de ecuaciones en LaTeX

El archivo que pueden usar como plantilla es el siguiente:

Para poder generar el PNG deben colocar --shell-escape como opciones para el compilador. En Texmaker/TeXstudio pueden hacerlo yendo a Opciones->Configurar Texmaker/TeXstudio:
Yo utilicé esta función para hacer en Gimp stickers matemáticos impresos en papel couché adhesivo:

Nota: Si usas Windows es un poco más complicado: LaTeX to PNG on Windows.

martes, 7 de mayo de 2019

Mecanografía y terminal

El primer paso que debe darse para el dominio natural de la terminal de Linux es tener la habilidad de escribir rápido en el teclado sin mirarlo. Creo que el no ser capaz de hacerlo es el impedimento más grande para enamorase de la terminal y de los editores de texto de consola como Vim o EMACS. La imagen que he puesto en esta entrada es una modificación que hice en GIMP de la asignación de teclas para cada dedo en un teclado latinoamericano. La posición de las manos debe ser la siguiente:
Tomar cursos de mecanografía es recomendable, pero es posible aprender por cuenta propia únicamente practicando con las imágenes anteriores. Pueden intentar con este ejercicio en un bloc de notas o editor de texto sencillo como calentamiento:

mop map mop map mop map
mop map mop map mop map
mop map mop map mop map
 ...
dec sec dec sec dec sec dec 
dec sec dec sec dec sec dec
dec sec dec sec dec sec dec 

 Deben mantener la vista fija en la pantalla sin voltear hacia los dedos y respetando la asignación de teclas de cada dedo. Si nunca lo han hecho antes será bastante difícil. Notarán que una de las cosas más difíciles es retomar la misma posición después de borrar o después de cada nueva linea (enter). Lo importante es tener mucha paciencia hacerlo muy muy lento al principio. Los resultados los verán poco a poco y les aseguro que valdrán la pena, en especial si siempre han querido escribir como hackers en frente de una terminal.

Una buena herramienta de práctica la pueden encontrar en esta página:


Insisto, no se fijen en los errores ni en las palabras por minuto de sus primeras prácticas. Comiencen lento. Tal vez pasen días antes de sentirse fluidos. La cosas en nunca dejar de practicar.