lunes, 27 de julio de 2015

Contar Olivos con Ortofoto: Parte I (Algoritmo Secuencial de Etiquetado)

Contar Olivos con Ortofoto: Parte I (Algoritmo Secuencial de Etiquetado)


Introducción


Hace muchos años, trabaje en Tragsatec, donde trabajaba manteniendo el GIS Dinamap. Había una parte del programa que me fascinaba. A partir de una ortofoto de un campo de olivos, Dinamap, contaba los olivos. De esta forma, se podría saber los olivos de un terreno y la subvención correspondiente. De esta forma, se evitaba que una persona, se trasladase al lugar y contarlos.

Siempre me pregunte que tipo de algoritmo se usaba. ¿Como los contaba? Y siempre me quedo esa espinita. Y creo que hoy, poco a poco, me lo voy sacando.

Pero, es lo mismo que contar estrella en una foto, solo que aquí, el fondo es negro y los elementos a contar blancos o más claros.


Mi implementación - Algoritmo Secuencial de Etiquetado


Primeramente, no he implementado todo el proceso, pero si una parte. Los pasos que yo veo para contar olivos, o estrellas...es el siguiente.

1-  Extraer todos los elementos de la imagen sean o no olivos. (Algoritmo Secuencial de Etiquetado)
2. - Determinar si el elemento extraído es un olivo.

En este post se ha implementado la primera parte, extraer todos los elementos de la imagen. Para este proceso se el algoritmo de tipo Algoritmo Secuencial de Etiquetado.



Implementación Algoritmo Secuencial de Etiquetado.

Imagen de test.



Dado una imagen en una escala de grises, se transforma esta imagen una matrix nxm donde n es la anchura de la imagen y m la altura de la imagen. Así, obtenemos una imagen donde los ceros, será el fondo de la imagen y los 1s, definiran los elementos contendidos en la imagen.



Aquí se ve como los 1s forman tres figuras, tres circulos. Ahora, con el algoritmo de etiquetado secuencial, se etiqueta cada figura, dando lugar a la extracción de la información de cada figura, lo que ocupa en ancho y algo en la imagen y su etiqueta asociada. Asi, el numero de figuras en la imagen, nos daría el numero de olivos aproximados.l



Aunque, claro, las figuras etiquetadas, pueden ser otra cosa que no sean olivos, como casas, o zonas osucaras de carreteras, y entonces, habría que pasar las matrices que forman las figuras, por otra fase, que detecte que figuras son olivos.

-Determinar si el elemento extraído es un olivo.


Aquí se puede usar redes neuronales la cuales, habrán sido entrenadas para reconocer patrones de imágenes de olivos. Como una imagen de un olivo puede estar en 20x15 pixeles, o en 15x17 pixeles, se realiza una transformación de la imagen a una conocida, por ejemplo a 5x5, Y asi, entrenaremos la red neuronal con imágenes de olivos de 5x5 pixelesy también de no olivos con esta resolución. Y también importante, entrenar a esta red neuronal contra el fraude, por si pusiesen en el campo olivos de cartón para que en la ortofoto se cuente como un olivo. Pero esta parte, ya se realizará en otro post.



CounterOlives


CounterOlives es el programa de testeo para probar la primera fase de esta implantación de contar olivos. 










En este link esta un fichero comprimido con el ejecutable y algunas ortofotos en formato .bmp.


En el siguiente ejemplo, se ve como cuenta como olivos, figuras que no son olivos. Aquí, es donde un segundo algoritmo (redes neuronales por ejemplo) debería de clasificar cada figura y asi contar verdaderamente los olivos que hay en la imagen.





Conclusión

Con unas pocas modificaciones, se podría contar el número de piscinas en un municipio, el numero de estrellas, número de personas en una concentración...lo mismo he pecado de optimista con 'unas pocas modificaciones'..pero se podría intentar.

Noticias relacionadas:

"Google Earth es utilizada para encontrar piscinas ilegales": 
http://www.marketingdirecto.com/actualidad/digital/google-earth-es-utilizada-para-encontrar-piscinas-ilegales/



miércoles, 15 de julio de 2015

Redes Bayesianas : Simulación Accidentes petroleros

Introducción


Hace ya un tiempo, en la máquina del café de mi trabajo, charlando, se comento los escenarios de no-masa, es decir, escenarios donde hay muy pocos datos para hacer uso de métodos estadísticos. Por ejemplo, los accidentes de barcos, aviones, cohetes,...

También, quería meterme con este tema de las redes bayesianas, ya que en su día, me metí con los Naives Bayes classifier (clasificador bayesiano ingenuo ¿?)

Entonces, ví que con redes bayesianas se podría simular escenarios de no masa, y escogí el escenario de los accidentes de los petroleros.

Red Bayesiana Accidentes Petroleros

No soy ningun experto en las causas que pueden provocarlos, ni mucho menos la probabilidad de cada uno de ellos, pero aquí está la red que use.




Aquí supuse que el Fuego (Fire) depende de si la tripulación no tiene experiencia, es junior y si el casco es de tipo casco simple.
Después, en daños estructurales (Structural Damage) supuse que si un barca sufre fuertes olas, mayor probabilidad de que sufrir daños, y las fuertes olas (strong swell) dependen de donde este el barco, el que mar u océano esté.

Las tablas de probabilidad para los nodos dependientes fueron:




Simulación


Lanzamos 1000 simulaciones, con una probabilidad baja de tener tripulacion junior y que el barco esté en el océano atlántico y con baja probabilidad que el barco tenga un casco simple.


Esto nos da que el fuego y daños estructurales están a la par, entre 30-40 accidentes.




Cambiamos la probabilidad de la tripulación junior a más alta, esto nos dará más incendios.




Ha subido hasta del orden de 500 incendios.

Aquí se ve, que cambiando las probabilidades, los resultados de la simulación varia. Aquí es donde los expertos en el dominio, en este caso los accidentes de petroleros, deben de crear el modelo con las variables y dependencias adecuadas, y las probabilidades más o menos correctas. Aunque a medida que se van conociendo datos, este modelo se actualidad, tanto con variables nuevas como con actualizar las probabilidades.

Conclusión


Aunque este método podría ayudar en este tipo de problemas, no sé si en la comunidad actuarial, al no ser un método estadístico, sería muy aceptado o tendrían sus reticencias. Pero, es aquí donde esta su fortaleza, la información estadística la guarda en las probabilidades dadas por el experto o conjunto de expertos.

Por otra parte, también este tipo de escenarios, se podría resolver con lógica difusa. Como por ejemplo, en un programa que desarrolle que usaba lógica difusa para frenar los coches (como lo hace, salvando las distancias claro, el metro de Japón).



Si te interesa el código fuente, envíame un correo.

Félix Romo
felix.romo.sanchezseco@gmail.com