proyecto fin de carrera - servidor de la biblioteca de...
TRANSCRIPT
Proyecto Fin de Carrera
Ingeniería Industrial
Desarrollo de software de conteo de anillos en
otolitos
Autor: Miguel Sánchez García-Pozuelo
Tutor: David Muñoz de la Peña Sequedo
Dpto. de Ingeniería de Sistemas y Automática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2018
Proyecto Fin de Carrera
Ingeniería Industrial
Desarrollo de software de conteo de anillos en
otolitos
Autor:
Miguel Sánchez García-Pozuelo
Tutor:
David Muñoz de la Peña Sequedo
Catedrático de la Universidad de Sevilla
Dpto. de Ingeniería de Sistemas y Automática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2018
Contenido
1. Introducción ............................................................................................................. 1
2. Objetivos ................................................................................................................... 4
3. Desarrollo ................................................................................................................. 5
3.1. Visita al Centro Oceanográfico de Málaga ........................................................ 5
3.2. Tecnología empleada ......................................................................................... 6
3.2.1. Librería CImg ............................................................................................... 6
3.2.2. Formularios de Windows ............................................................................ 7
3.2.3. Microsoft Visual Studio .............................................................................. 8
3.3. Estructura ........................................................................................................... 8
3.4. Conexión con la cámara ..................................................................................... 9
3.5. Conteo automático de anillos .......................................................................... 10
3.5.1. La polilínea ................................................................................................ 11
3.5.2. Filtrado de la imagen ................................................................................ 14
3.5.3. Algoritmo de conteo ................................................................................. 16
3.6. Interfaz gráfica ................................................................................................. 18
3.6.1. Información General ................................................................................. 19
3.6.2. Calibrar microscopio ................................................................................. 20
3.6.3. Transectos................................................................................................. 21
3.6.4. Guardar proyecto ..................................................................................... 27
4. Fase de experimentación ....................................................................................... 28
5. El código .................................................................................................................. 31
6. Conclusiones y trabajo futuro ................................................................................ 33
7. Bibliografía .............................................................................................................. 36
8. Tabla de imágenes .................................................................................................. 37
1. Introducción
1
1. Introducción
La edad de los peces es útil para conocer la madurez, mortalidad y crecimiento de las
poblaciones de peces. Los métodos de estudio de longevidad de los bancos de peces se
dividen en tres grupos: el método estadístico basado en el análisis de la distribución de
la frecuencia de la longitud de los peces, el método empírico basado en la observación
de especímenes criados en cautividad o marcaje y recaptura de peces con su posterior
estudio anatómico de alguna de las partes del pez como son las escamas, las vértebras
o los otolitos.
El método estadístico parte de que los especímenes de la misma edad tendrán un
tamaño similar en una distribución normal, por lo que se pueden distribuir las
poblaciones de cada año basándose en el tamaño.
Imagen 1. Ejemplo de la distribución longitud-edad de un banco de peces (S. fuegensis)
El marcaje consiste en marcar un pez con su edad para su posterior captura. La
comparación del tamaño de los peces criados en libertad con peces en cautividad tiene
el inconveniente de que al ser diferentes las condiciones a las que se someten el
tamaño puede ser diferente.
Desarrollo de software de conteo de anillos en otolitos
2
Imagen 2. Pez espada marcado
Los otolitos son estructuras formadas por carbonato cálcico que se alojan en el oído
del pez, aunque el otolito en los individuos más jóvenes tiende a tener forma esférica,
la forma y tamaño varía de unas especies a otras en los adultos. El otolito crece en
todas las direcciones a lo largo de la vida del pez depositándose material orgánico en la
superficie del mismo.
Si se secciona el otolito se puede apreciar una capa opaca y otra transparente por cada
año del pez, además con un tratamiento adecuado y un microscopio de mayor
aumento se verán las capas que se depositan diariamente en el contorno del órgano,
pudiendo determinar el número de días desde el nacimiento del pez.
El proceso para el estudio del otolito consiste primero en la extracción del mismo de la
cabeza del pez. El otolito se incluye en una matriz de resina para después cortar el
otolito pasando por el centro.
Imagen 3. Extracción de un otolito (OTO - OTOLITH TRAINING ONLINE)
Al cortar el otolito es importante pasar por el centro para alcanzar a ver todos los
anillos y no estimar por debajo la edad. El otolito embebido en la matriz de resina se
lija y pule hasta obtener una lámina de unas 20-40 micras de espesor.
Otro método si el otolito es lo bastante grande es dar dos cortes y después pulir
finamente las caras expuestas.
1. Introducción
3
Imagen 4. Detalle de un otolito cortado
Una vez se tiene la muestra lista para el estudio es observado al microscopio sobre una
fuente de luz.
Imagen 5. Otolito visto a trasluz en el microscopio
Ahora se contarían las líneas que parten del núcleo que representan cada día de edad
del pez en cuestión.
Hay que tener en cuenta que la lectura no siempre será posible ya que se puede haber
cortado el otolito sin atravesar todas las capas, al lijar y limar el otolito pueden saltar
partes del mismo o simplemente que la morfología del mismo dificulte la lectura.
Desarrollo de software de conteo de anillos en otolitos
4
2. Objetivos
Este trabajo pretende desarrollar una aplicación software que de soporte a la labor de
investigación de la edad de los peces a través del análisis de los otolitos. El programa
contará con una interfaz gráfica que permite crear un nuevo proyecto, registrar en un
formulario los datos relevantes de la captura, comunicarse con una cámara conectada
a un microscopio para mostrar por pantalla la imagen de la muestra analizada,
registrar los datos del análisis y guardar todos los datos en una tabla para la aplicación
de Microsoft Office EXCEL.
A través del Centro Oceanográfico de Málaga se ha conocido de primera mano la labor
realizada por los investigadores, tanto la técnica de preparación de la muestra como el
trabajo realizado con el software disponible y el equipamiento del que disponen para
dichas tareas.
Además, con el objetivo de reducir el tiempo empleado por el investigador se ha
implementado una funcionalidad que permite contar automáticamente los anillos que
contiene el otolito si se desea. Para ello el usuario del software deberá trazar en la
imagen del otolito (que está siendo capturado por la cámara y mostrado por pantalla)
una polilínea a través de la cual se contarán los anillos que cruzan dicha polilínea. La
razón por la que esta polilínea debe ser marcada por el investigador es porque los
anillos han de contarse desde un determinado punto del otolito hasta el borde
exterior, además de que en general la imagen del otolito tendrá zonas en las que no se
puedan distinguir los anillos debido a defectos en el otolito o debido a las lascas que
pueden desprenderse durante la preparación del mismo.
3. Desarrollo
5
3. Desarrollo
El software de OTOLIVE se genera conjuntamente entre el proyecto fin de carrera
“Visión Artificial en el laboratorio biológico: Análisis de otolitos de especies marinas”
(Gerardo Tejada, Universidad de Sevilla 2012) centrado en la comunicación con la
cámara y este proyecto fin de carrera que gira en torno a la obtención de datos de los
otolitos. Ambos trabajos abarcan la generación de las interfaces gráficas necesarias y el
almacenamiento de los datos.
Para ello se trabajó conjuntamente, eligiendo el mismo lenguaje de programación, las
mismas librerías y acordando los argumentos de entrada y salida de las funciones para
que fuese sencillo unir los códigos en un solo software, así como diseñando una
interfaz gráfica que fuera coherente al ensamblar ambos trabajos.
El primero de los pasos fue la visita a los laboratorios donde se analizan los otolitos en
Málaga.
3.1. Visita al Centro Oceanográfico de Málaga
En la costa de Málaga se encuentra el Instituto Español de Oceanografía en el Centro
Oceanográfico de Málaga. El investigador Javier Rey Sanz (perteneciente al centro
oceanográfico) se encargó de guiar la visita además de aportar la información y
soporte desde el punto de vista de los estudios de los otolitos.
La visita comenzó con un paseo por las instalaciones del centro, allí se podían ver las
distintas fases del proceso de interpretación de los otolitos; por un lado había decenas
de peces capturados esperando para ser abiertos, otros ya habían sido seccionados y
el otolito extraído, y en otra zona se preparaban las muestras para poder ser vistas al
microscopio. En esta zona de la visita el investigador recalcó la importancia y
delicadeza de preparar las muestras, ya que se necesitan láminas de un espesor de
micras pulidas a mano, de ahí que en algunas muestras, al observarlas al microscopio
se puedan ver zonas sombreadas porque durante el proceso de pulido puede
desprenderse una lasca del otolito, dependiendo de cómo afecte a la visibilidad del
otolito puede significar tener que desechar la muestra.
Desarrollo de software de conteo de anillos en otolitos
6
En la planta superior del edificio está la sala en la que se encuentra el microscopio con
la cámara conectada al mismo donde pudimos ver un ejemplo de lectura de los anillos
por parte de uno de los investigadores del centro.
Finalmente, Javier nos indicó una lista de necesidades o características que debería de
tener el software para poder sacarle partido:
- Poder ejecutarlo en Windows.
- Conexión con la cámara de la que dispone el microscopio.
- Rellenar un formulario con los datos de interés y resultados del análisis.
- Guardar el análisis en base de datos.
3.2. Tecnología empleada
El desarrollo de la aplicación se ha llevado a cabo en un sistema operativo Windows
Vista.
El lenguaje de programación utilizado es C++ debido a que las librerías de la cámara del
microscopio se encuentran dicho lenguaje así como que se dispone de la librería CImg
en C++ la cual tiene una gran cantidad de funciones que facilitan la labor de trabajar
con imágenes.
La cámara que se utiliza en el Centro Oceanográfico de Málaga para el estudio de los
otolitos es una MicroPublisher 3.3 RTV perteneciente a QImaging.
3.2.1. Librería CImg
Únicamente se ha necesitado esta librería para trabajar con las imágenes ya que
dispone de una amplia variedad de herramientas que han abarcado las necesidades
del proyecto. CImg define clases y métodos que permiten cargar y guardar archivos en
varios formatos, acceder a los valores de cada píxel, mostrar/transformar/filtrar
imágenes, dibujar figuras geométricas. Necesita poco recursos de memoria, una sola
cabecera CImg.h se incluye en el código a compilar y todas las funciones se realizan con
cuatro clases diferentes. Además CImg es una librería de código abierto con licencia de
tipo CeCILL-C o CeCILL. (http://cimg.eu/)
La licencia CeCILL está diseñada para la distribución de software libre. El código que se
ampara en esta licencia se puede utilizar, modificar y distribuir de manera libre,
independientemente del uso comercial que se le pudiera dar. Además el código
3. Desarrollo
7
utilizado se puede distribuir en código fuente o como objetos resultantes de la
compilación, por lo que se puede proteger el código que se ha desarrollado de manera
original.
Sin embargo, si se ha modificado el código de una librería con licencia con licencia
CeCILL, dicho código modificado debe estar también distribuido con la misma licencia
aunque el resto del código pudiera tener una licencia más restrictiva en términos de
distribución. (http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt)
En el caso concreto de este proyecto no se ha modificado el código de la librería CImg
por lo que si se quisiera distribuir o explotar el software no es necesario que el código
desarrollado se acoja a la licencia CeCILL.
3.2.2. Formularios de Windows
Windows Forms o formularios de Windows, es una librería orientada a objeto cuyas
clases se emplean para desarrollar la GUI (Graphic User Interface) de una aplicación.
En general se trabaja declarando las clases que se van a emplear y se muestran por
pantalla dichos objetos como son ventanas, cuadros de diálogo, cuadros de texto,
botones, desplegables, que muestran información o reciben información del usuario.
El aspecto que tienen las aplicaciones desarrolladas en Windows Forms se asemeja a
las aplicaciones de Windows, el usuario estará por lo tanto acostumbrado al aspecto
de dichas interfaces, la posición de los botones en las ventanas, la interacción del ratón
con los botones y cuadros o el desplazamiento usando el tabulador, por lo que una
persona acostumbrada a trabajar en Windows sabrá navegar por la aplicación de
manera intuitiva.
Estos formularios representan también una manera sencilla de programar una interfaz,
ya que la mayoría de las utilidades se podrán crear de manera visual por ejemplo para
crear un botón se accede al menú de botones disponibles y al seleccionar el que
queremos aparecerá en nuestra ventana de la aplicación. Una vez creado se puede
mover arrastrándolo con el ratón. Al generarse el botón se genera el código asociado a
la creación de dicho objeto y entonces se asigna que eventos o funciones han de
ocurrir, que dependiendo del tipo de objeto que hayamos creado tendrá disponible.
Desarrollo de software de conteo de anillos en otolitos
8
3.2.3. Microsoft Visual Studio
Microsoft Visual Studio es un entorno de desarrollo integrado (IDE) para la creación de
páginas webs, servicios webs, programas para Windows y aplicaciones para móviles.
(https://msdn.microsoft.com)
Microsoft Visual Studio 2008 tiene herramientas para desarrollar aplicaciones con
Windows Forms de manera sencilla. Las ventanas, botones, cuadros de diálogo y el
resto de objetos que se muestran en la ventana de la aplicación se crean y configuran
en un entorno gráfico que genera de manera automática el código que implica la
creación de dichos objetos y sus llamadas a los métodos y eventos a medida que se
configuran.
La Universidad de Sevilla dispone de una versión de Microsoft Visual Studio 2008 a
disposición de los estudiantes para el desarrollo de aplicaciones con fines académicos
y dado que soporta C++ y facilita la creación de interfaces gráficas a través de Windows
Forms se decidió que sería el entorno de desarrollo adecuado para el software.
Si bien no es una librería, se quiere señalar que el guardado y lectura de trabajos en
EXCEL se realiza a través del namespace Microsoft::Office::Interop::Excel.
3.3. Estructura
En el siguiente gráfico se muestra como está estructurada la aplicación:
Imagen 6. Estructura de OTOLIVE
3. Desarrollo
9
El usuario sería el investigador que va a realizar el análisis del otolito, el cual estará
preparado en el microscopio y la cámara conectada al ordenador.
La interfaz con la que se encuentra el usuario son las ventanas de los formularios de
Windows Forms y las ventanas o Displays con las que también cuenta la librería CImg.
3.4. Conexión con la cámara
Como se ha comentado previamente la cámara disponible es la MicroPublisher 3.3 RTV
que se puede ver en la Imagen 7.
Imagen 7. Cámara MicroPublisher 3.3 RTV (www.qimaging.com)
En la imagen se puede ver como la cámara está conectada a un microscopio de
ejemplo. El microscopio realiza la función de aumento de la imagen mediante las
lentes que se seleccionen y la cámara recibe la imagen de la muestra que se verá por
pantalla.
Para conocer la medida real de la imagen arrojada por la cámara se debe realizar una
calibración. La calibración de la imagen consiste en seleccionar los aumentos del
microscopio en función del tamaño del otolito a observar, una vez elegidos los
aumentos se coloca en el microscopio un calibrador de objetivos que contiene
sencillamente una escala con una medida precisa (por ejemplo 1 mm).
Desarrollo de software de conteo de anillos en otolitos
10
Imagen 8. Ejemplo de una escala para calibrar
El software deberá tener una función que permita obtener la relación entre la distacia
en píxeles y la medida real, que se calculará señalando dos puntos en la imagen de la
que se conoce la medida real e indicando al programa dicha medida. Dicha relación se
almacena en una variable mm/píxel, que será últil para calcular el grosor de los anillos.
A nivel de programación la librería QCam ofrece todas las funciones necesarias para la
obtención de la imagen registrada por la cámara. Primero se cargan los drivers y se
accede a la cámara mediante un manejador o handle. La imagen obtenida en el
formato utilizado por la librería QCam se transforma al formato utilizado por la librería
CImg inicializando una imagen en CImg y asignando los valores pixel a pixel. Esta
transformación de formato es necesaria, ya que el formato de QCam solo se utiliza
para leer la imagen obtenida por la cámara y para el resto de tratamientos de
imágenes se utiliza CImg ya que las funciones que integra esta última son útiles para
trabajar con las mismas.
3.5. Conteo automático de anillos
El conteo automático se basa en los cambios de luminosidad que hay entre los anillos
del otolito. Se va a mostrar a continuación paso a paso como funciona OTOLIVE sin
entrar en detalle en el código C++.
3. Desarrollo
11
3.5.1. La polilínea
Cuando se traza la línea se está marcando la zona que se quiere evaluar. Que serán los
píxeles de la imagen que se encuentran debajo de la línea.
Para poder evitar las imperfecciones que tienen las imágenes en los otolitos debidos a
luces o sombras producidos por otra causa que no sea la de un anillo de crecimiento se
ha optado por hacer una polilínea. Es importante que al continuar la polilínea no
volvamos hacia el centro (en el caso de estar contando desde el centro hacia afuera),
ya que si no se contarían varias veces el mismo anillo.
Imagen 9. Polilinea sobre otolito
En esta imagen vemos como se ha continuado la polilínea, marcada en amarillo, para
contar en la zona del otolito con mejor contraste pero salvando al mismo tiempo la
línea blanca que tiene justo por encima atravesando los anillos.
Desarrollo de software de conteo de anillos en otolitos
12
Imagen 10. Ejemplo de conteo. Segmento marcado sobre el otolito
El primer paso para contar los anillos que cruzan la línea es abatir dicha línea
quedándonos con una imagen compuesta por una fila de pixeles. En el caso de una
polilínea se concatenan los segmentos abatidos para tener finalmente una sola fila de
píxeles.
3. Desarrollo
13
Imagen 11. Sector junto a una ventana que muestra la línea
Imagen 12. La imagen a analizar tiene un pixel de alto
Cada pixel almacena el valor de intensidad correspondiente. Si se dibuja una gráfica de
luminosidad, siendo 255 el máximo y 0 el mínimo obtendríamos la curva de
luminosidad a lo largo de la línea.
Desarrollo de software de conteo de anillos en otolitos
14
3.5.2. Filtrado de la imagen
Ya que el número de anillos se va a determinar contando el número de máximos de la
gráfica es importante que los cambios de intensidad se produzcan por los anillos y no
por sombras o reflejos originados por las imperfecciones de las muestras.
Para ello se va a filtrar el valor de la intensidad de cada píxel ponderándolo con los dos
píxeles anteriores y los dos píxeles siguientes
En la siguiente imagen se superponen la gráfica original y la gráfica filtrada.
Imagen 13. Diagrama frente a la línea analizada
La función del filtro tiene la siguiente expresión:
( )
( )
( )
( )
( )
( )
( )
( )
Los valores a, b, c y d deben sumar 100. En el caso a=100, b=c=d=0 tendríamos la
imagen original.
3. Desarrollo
15
Por ejemplo, en el caso a=70, b=30, c=d=0 se está asignando a cada punto el 70% del
valor de la intensidad original más el 15% de la intensidad en el pixel anterior más el
15% de la intensidad en el pixel siguiente de la imagen original.
Imagen 14. Ejemplo de filtro a=70, b=30, c=d=0
Imagen 15. Ejemplo de filtro a=85, b=15, c=d=0
Por defecto se han dejado las constantes como a=70, b=30, c=d=0 que son las
constantes que mejores resultados han dado durante los experimentos. Es decir, al
contar automáticamente cuando se mantenían los coeficientes como a=70, b=30,
c=d=0 la gráfica filtrada eliminaba los “falsos” máximos no correspondientes a anillos
de crecimiento y el número de anillos contados era el mismo que el contado
manualmente. En cualquier caso dichos coeficientes son modificables desde la interfaz
gráfica, por lo que se pueden probar diferentes combinaciones.
Para realizar otro tipo de filtrado más haya de cambiar los coeficientes habría que
cambiar el filtro directamente desde el código fuente en C++. Como ha sido habitual en
Desarrollo de software de conteo de anillos en otolitos
16
el desarrollo de la aplicación las funciones son independientes unas de otras evitando
el anidamiento innecesario. Por ello solo habría que modificar la función que recibe la
imagen unidimensional y que devuelve la imagen filtrada.
3.5.3. Algoritmo de conteo
Una vez filtrada la curva de la intensidad de la imagen unidimensional es necesario
contar el número de máximos que representan los anillos presentes en el otolito.
Para ello una función evalúa todos los puntos de la gráfica. Cuando un punto de la
gráfica tiene un valor superior de intensidad que el punto inmediatamente anterior y
que el punto inmediatamente posterior se considera un máximo relativo. Además para
los casos en que el máximo de la función tenga forma de escalón, es decir que al
evaluar un punto del escalón el valor de intensidad es mayor que el punto anterior
pero igual que el siguiente también se ha considerado máximo relativo. Esta
circunstancia no suele darse al filtrar la imagen pero puede darse el caso.
En las primeras versiones de OTOLIVE se marcaron con líneas los máximos para
comprobar visualmente que el código estaba contando lo que a simple vista
definiríamos como anillos. En la versión definitiva dichas marcas se han eliminado para
no entorpecer la lectura manual.
3. Desarrollo
17
Imagen 16. Anillos marcados en azul
Imagen 17. Detalle de anillos marcados
Desarrollo de software de conteo de anillos en otolitos
18
3.6. Interfaz gráfica
La ventana que nos encontramos al abrir la aplicación tiene el siguiente aspecto:
Imagen 18. Menú de inicio OTOLIVE
En el Menú inicial se puede gestionar el proyecto.
Imagen 19. Menú para gestionar el proyecto
Imagen 20. Acceso a las funciones de OTOLIVE
3. Desarrollo
19
Imagen 21. Opciones de cámara
3.6.1. Información General
Imagen 22. Formulario Información General
Los datos que se introducen en este formulario se refieren a los datos de la captura del
pez, datos generales extraídos del espécimen y que son conocidos a priori por el
investigador.
Desarrollo de software de conteo de anillos en otolitos
20
3.6.2. Calibrar microscopio
Imagen 23. Formulario Calibrar Microscopio
Para conocer la distancia real en las imágenes se calibra el microscopio obteniendo la
relación entre píxeles y mm de una imagen mostrada por la cámara. Para ello se coloca
una lámina con una escala, se señala con el ratón el inicio y el final de la escala y se
introduce la distancia real del segmento en el formulario. La relación mm/píxel
quedará almacenada.
Imagen 24. Escalada graduada
3. Desarrollo
21
Imagen 25. Escala en la que se ha dibujado un segmento
Imagen 26. Se indican las lentes que lleva el microscopio y la distancia real
3.6.3. Transectos
Al abrir la aplicación de conteo, el programa reconocerá si la cámara del microscopio
está activa para tomar las imágenes de ella, en caso contrario permite trabajar a partir
de imágenes guardadas en la memoria del ordenador.
Desarrollo de software de conteo de anillos en otolitos
22
Imagen 27. OTOLIVE detecta automáticamente que no hay cámara conectada
Cuando se ha capturado una imagen con la cámara o seleccionado una del disco duro
la siguiente ventana que aparece es el sector que se va a analizar tanto de manera
manual como automático.
En esta ventana se trazará la polilínea a lo largo de la cual el programa determinará el
número de anillos que cruza.
Imagen 28. Imagen tomada por la cámara o seleccionada desde un directorio
3. Desarrollo
23
Cuando se presiona la tecla de enter o se haga doble clic izquierdo al dibujar un
segmento se considerará que el usuario ha dibujado la última línea y se mostrará una
nueva ventana con la información referente al sector y datos que serán introducidos
manualmente. Presionando la tecla de retroceso o el botón derecho se deshace el
último segmento dibujado.
Imagen 29. Esta ventana emerge al dibujar el último segmento
En el grupo polilínea se permite continuar la polilínea desde el último segmento en el
mismo transecto, mostrar el diagrama que compara la curva de intensidad real con la
filtrada y deshacer segmentos.
Se puede modificar la intensidad de la imagen original; es útil cuando hay zonas muy
oscuras o muy claras y el ojo humano no puede distinguir el salto de un anillo a otro,
además variar la intensidad no afecta al número máximo de anillos contados
automáticamente, ya que se toma de referencia para el conteo la imagen original.
Si el microscopio ha sido calibrado aparecerá la distancia total en mm de la polilínea y
el grosor medio de los anillos contados de modo automático.
Desarrollo de software de conteo de anillos en otolitos
24
El número de anillos contados manualmente deben ser introducidos por el
investigador así como la calidad evaluada del 0 al 10 de acuerdo a su criterio. La
calidad de la medición determina como de seguro está el usuario de que los anillos
contados se corresponden con la edad real ya que habrá otolitos que por su forma o
debido a defectos derivados del lijado y pulido no permitan una clara determinación
de la edad y sea una aproximación.
El número de anillos contados automáticamente se basa en la curva de intensidad de
la imagen real que recorre la polilínea.
Imagen 30. Diagrama de intensidad de los píxeles de la imagen original bajo la polilínea
En el diagrama, la línea roja representa el valor de la intensidad a lo largo de la
polilínea trazada. Cada anillo está definido por un mínimo de intensidad y mediante el
conteo de los mínimos se obtiene el total de anillos que cruzan la polilínea. Los datos
originales son filtrados para eliminar falsos mínimos debidos a cambios de luminosidad
que no son debidos a los anillos, estos datos filtrados aparecen en verde.
3. Desarrollo
25
Imagen 31. Configuración del filtro
El filtro se puede configurar de manera que si en una zona aparecen picos dobles para
anillos individuales se suavice la curva y cada anillo solo se cuente una vez; mientras
que si los cambios de intensidad son claramente debidos a la luminosidad que deja
pasar cada anillo se configura el filtro de manera que la curva filtrada se asemeje más a
la real.
Una vez han sido aceptados los datos de conteo del transecto aparecerá la ventana
con los datos globales de conteo, en la que se tiene la opción de seguir contando
anillos desde una imagen guardada en el ordenador, conectar con la cámara para
movernos a la siguiente región a analizar y configurar el filtro.
Además de poder restaurar todos los valores de conteo, deshacer el último transecto o
aceptar los datos y pasar al menú inicial.
Desarrollo de software de conteo de anillos en otolitos
26
Imagen 32. Datos globales del conteo
La información que aparece es el número total de sectores evaluados, el número de
anillos totales contados tanto manualmente como automáticamente y la calidad media
de las imágenes que se han estudiado.
Al cabo de por ejemplo 4 mediciones, tenemos un resultado del siguiente modo:
Imagen 33. Datos globales tras analizar 4 transectos
3. Desarrollo
27
3.6.4. Guardar proyecto
Los datos introducidos en el panel de información general y los resultados del análisis
del otolito se guardan en un fichero en formato EXCEL.
Imagen 34. Datos almacenados en EXCEL
Estos datos pueden ser recuperados en una sesión al abrir un proyecto desde OTOLIVE.
Desarrollo de software de conteo de anillos en otolitos
28
4. Fase de experimentación
Para el desarrollo y testeo de la aplicación el Centro Oceanográfico de Málaga proveyó
de una serie de fotografías de muestras de otolitos preparadas para el estudio.
En este sector se puede medir a ojo con claridad por el grosor de los anillos y la
diferencia de claro a oscuro entre ellos. Al trazar la línea debemos tener en cuenta que
la parte externa está borrosa y si no se cruza por la parte en la que se distinguen los
anillos la medición automática será menor que la real.
4. Fase de experimentación
29
En la segunda imagen del sector de otro otolito se traza una curva para recoger los
anillos internos y los externos, hay que sortear las manchas que aparecen en la imagen
ya que cada mancha contará como un anillo extra.
El otolito de esta imagen tiene forma achatada, para una mejor lectura se traza la línea
en la dirección de crecimiento del otolito ya que al estar las líneas más separadas se
puede contar de forma más clara tanto manual como automáticamente.
Desarrollo de software de conteo de anillos en otolitos
30
En esta imagen de la sección de un otolito aparecen muchas manchas casi del tamaño
de un píxel por lo que se crea una gran cantidad de falsos anillos en el conteo
automático.
En esta muestra se pueden apreciar los anillos con mejor nitidez en la dirección del eje
de crecimiento hasta tal punto que la nitidez de la imagen y al no haber manchas en
esa zona la calidad del conteo automático es alta y se pueden contar un gran número
de anillos con una sola polilínea.
5. El código
31
5. El código
En este apartado se explicarán brevemente las funciones desarrolladas sobre las que
se apoya este trabajo. Hay que destacar que para hacer un código sencillo de modificar
en versiones posteriores se han creado funciones siempre que una tarea se iba a
llamar más de una vez o que iba a aparecer en dos funciones o formularios diferentes.
De esta manera cambiando el código fuente de la función una vez no hará falta
modificar el resto del programa siempre y cuando los tipos, cantidad y orden los de
atributos de entrada y de salida de las funciones se mantengan.
nuevo_proyecto.cpp: mediante esta función se da comienzo a un nuevo trabajo
eliminando si hubiesen datos introducidos referentes a una medición en curso o
cargada.
guardar_trabajo.cpp: tras seleccionar una ubicación por el usuario se genera un
archivo de tipo Excel. En dicho Excel se escriben en las celdas de la primera hoja los
datos de la captura del pez y de las mediciones de otolitos pertenecientes al trabajo en
curso.
abrir_excel.cpp: abrir_excel muestra una ventana del explorador de Windows en la
que se selecciona un archivo de tipo Excel del que se cargan los datos de una lectura
previamente guardada.
dibujar_linea.cpp: la función dibujar línea permite al programa crear una polilínea
sobre la imagen deseada, con el uso del ratón y clicando sobre la imagen con el botón
principal se seleccionan los píxeles que serán el extremo de cada segmento de línea,
cada vez que se termine un segmento podremos seguir dibujando el siguiente
segmento. Los extremos de los segmentos se almacenan en una lista.
El color del segmento de línea cambia cuando se confirma el extremo del segmento,
los colores elegidos hacen contraste con el color blanco y negro de los otolitos.
Desarrollo de software de conteo de anillos en otolitos
32
deshacer_segmento.cpp: haciendo clic con el botón secundario del ratón se deshace
el último segmento dibujado, función que también se puede realizar pulsando la tecla
de retroceso del teclado. Para finalizar la polilínea se hace doble clic al finalizar un
segmente o pulsando la tecla enter.
abatir_polilinea.cpp: la función abatir_polilinea recibe la imagen original y a través de
la lista de puntos tomados con el ratón al dibujar la polilínea. Se genera una imagen
unidimensional formada por los segmentos de la polilínea abatidos uno tras otro. El
abatimiento se realiza llamando a otra función.
abatir_linea.cpp: esta función es un ejemplo de cómo a lo largo del desarrollo del
código se ha separado en diferentes funciones siempre que es necesario y creando
subfunciones para facilitar reproceso del código y modificar secciones del mismo sin
afectar al resto.
Abatir_linea recibe una imagen y dos puntos que son las coordenadas de los extremos
de un segmento y devuelve una imagen unidimensional que se corresponde los píxeles
de la imagen original que quedan bajo el segmento dibujado.
regular_intensidad.cpp: a esta función se le llama para modificar la intensidad de la
imagen de la sección del otolito que se muestra por pantalla. Recibe una imagen y un
nivel de intensidad del 0 al 100 y devuelve la imagen con la intensidad modificada. Un
nivel de 50 se corresponde con el nivel de intensidad original.
conteo_minimos.cpp: conteo_minimos recibe una imagen unidimensional y devuelve
el número de máximos, aunque pueda parecer ambiguo el nombre original de mínimos
surgió al mostrar las gráficas en el las ventanas de display de CImg, ya que estas
aparecían invertidas al estar los ejes invertidos siendo el centro de origen la esquina
superior izquierda. Es solamente una cuestión de nomenclatura.
filtro_imagen_unidimensional.cpp: esta función recibe una imagen unidimensional y
le aplica un filtro que suaviza la variación de la intensidad. Devuelve otra imagen con
las mismas dimensiones.
comprobar_str_decimal.cpp: esta función chequea si la cadena de caracteres
introducida es un número decimal, forma parte de los chequeos a la hora de introducir
datos.
comprobar_str_entero.cpp: similar a la anterior, verifica si la cadena de caracteres es
un número entero.
obtener_diagrama.cpp: al llamar a esta función se muestra por pantalla la gráfica de la
intensidad de una imagen unidimensional superpuesta con la gráfica de la imagen
filtrada.
La función para
guardar el trabajo es
muy similar a la de
apertura, pero en este
caso el argumento que
recibe es la ruta en la
que se quiere guardar
el proyecto, se creará
un Excel y se rellenará
con la información
contenida en las
variables globales.
6. Conclusiones y trabajo futuro
33
6. Conclusiones y trabajo futuro
Las mediciones realizadas mediante el conteo automático están condicionadas por
varios factores externos al programa como es la estructura y crecimiento del otolito
que dependiendo de si ha tendido a crecer de una forma esférica facilita la lectura,
mientras que si tiene ángulos acusados la concentración de capas en estas zonas
dificultan la lectura, la habilidad del científico que prepara la muestra, especialmente
en el proceso de pulido, ya que una muestra gruesa es opaca y no se distinguirían las
líneas entre capas se debe tener una muestra muy fina, y durante el proceso de pulido
pueden desprenderse capas del otolito. Adicionalmente el científico señalará donde
termina el núcleo del otolito y comienza la zona de crecimiento diario del pez, por lo
que su experiencia es fundamental.
Otros factores los aporta el programa y son decisivos en el resultado de la lectura. El
filtro que suaviza la curva de intensidad de la polilínea se ha desarrollado para obtener
el mejor resultado con las imágenes de otolitos disponibles durante el desarrollo de la
aplicación. Utilizando el conteo automático en un gran número de otolitos y
comparando las mediciones automáticas con las mediciones manuales de personal
cualificado se puede refactorizar la fórmula y código del filtro para adaptarlo a un
mayor número de tipos de otolitos.
La versión actual de la aplicación ofrece una interfaz atractiva para el usuario
acostumbrado a Windows, además se incluye en una sola aplicación el poder registrar
y recuperar los datos de mediciones del otolito y captura del pez y la interacción con la
cámara. El conteo automático se presenta muy atractivo para las mediciones en las
que se tenga un otolito en el que se pueda trazar una polilínea en una sección libre de
imperfecciones en la muestra permitiendo ahorrar el tiempo del conteo manual para
estos otolitos. Por otro lado, el conteo automático sigue dependiendo de la
experiencia del científico para determinar que recorrido de la polilínea le dará un
resultado veraz, además el filtrado de la imagen de la que se miden los picos y valles
para calcular el número de capas está limitado por la formula ajustada de manera
experimental, si bien se permite configurar los parámetros de la fórmula en el menú
del conteo, es necesario acceder al código si se quiere cambiar por completo la
fórmula del filtro.
Desarrollo de software de conteo de anillos en otolitos
34
A nivel de programación se puede reducir el uso de variables globales mediante
reservas de memoria y enviar las direcciones de memoria entre funciones para reducir
el uso de recursos de memoria; aunque el uso de memoria de esta aplicación es
mínimo se puede presentar un código más limpio y eficiente en este aspecto.
Se quiere destacar como se ha separado en llamadas a funciones independientes cada
subtarea, creando un código legible en el caso de que se quiera actualizar cambiando
el código; para introducir una mejora o sustituir una función basta con encontrar la
función en el código y manteniendo las entradas y salidas podríamos sustituir por
completo la lógica de la función.
En resumen el trabajo futuro de este software de análisis de otolitos se podría resumir
en los siguientes puntos:
Eliminar el uso de variables globales.
Portabilidad a otros sistemas operativos.
Cargar por defecto la calibración del microscopio.
Portabilidad a otras cámaras
Durante la fase de experimentación se comprobó que las mediciones antes de aplicar
el filtro tenían una alta variabilidad dependiendo de los puntos que se tomaran para
trazar la polilínea, aunque las líneas atravesaran zonas aptas para el conteo. Una vez
filtrada la imagen, siempre que la polilínea no atraviese una zona ilegible para la
medición el número de anillos contados es estable variado en 1-3 anillos
normalmente, esto se puede deber a píxeles blancos o claros que aparecen en la zona
sombreada o píxeles negros u oscuros que aparecen en la zona clara del otolito. Dichos
píxeles o “ruido” pueden deberse al propio otolito o que durante la preparación de la
muestra se modifique la superficie a nivel microscopio apareciendo estas sombras o
reflejos. El filtro es capaz de eliminar la mayoría de los falsos anillos o falsos mínimos si
estamos evaluando la gráfica pero al aparecer falsos máximos debidos a píxeles de
gran contraste con respecto a los que le rodean sigue apareciendo un máximo que
sería falso. Si se cambian los parámetros del filtro se pueden llegar a eliminar todos los
falsos máximos pero se corre el riesgo de hacer desaparecer también los máximos
debidos a los anillos en la imagen filtrada si se suaviza demasiado la imagen.
La zona central del otolito (núcleo) no tiene anillos ya que se corresponde con el
otolito del pez en su primer día de vida, que normalmente tendrá una forma esférica.
El punto de transición entre el núcleo y los otolitos diarios no es fácil de discernir ya
que a menudo es una zona en la que la imagen es bastante difusa aunque
manualmente se puedan contar los anillos ya que al mirar vemos todo el conjunto y se
pueden diferenciar las trazas de los anillos. Para la medición automática es la zona más
complicada de asegurar que la medición es correcta por la difusión de la imagen.
6. Conclusiones y trabajo futuro
35
El código del software se puede encontrar en la biblioteca de la Escuela Técnica
Superior de Ingeniería de la Universidad de Sevilla.
Desarrollo de software de conteo de anillos en otolitos
36
7. Bibliografía
http://cimg.eu/. (s.f.). Recuperado el 19 de Enero de 2016
http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt. (s.f.). Recuperado el 19 de
Enero de 2016
https://msdn.microsoft.com. (s.f.). Recuperado el 19 de Enero de 2016
OTO - OTOLITH TRAINING ONLINE. (s.f.). Marine Institute Foras na Mara.
www.qimaging.com. (s.f.).
8. Tabla de imágenes
37
8. Tabla de imágenes
Imagen 1. Ejemplo de la distribución longitud-edad de un banco de peces (S. fuegensis)
.......................................................................................................................................... 1
Imagen 2. Pez espada marcado ........................................................................................ 2
Imagen 3. Extracción de un otolito (OTO - OTOLITH TRAINING ONLINE) ........................ 2
Imagen 4. Detalle de un otolito cortado .......................................................................... 3
Imagen 5. Otolito visto a trasluz en el microscopio ......................................................... 3
Imagen 6. Estructura de OTOLIVE .................................................................................... 8
Imagen 7. Cámara MicroPublisher 3.3 RTV (www.qimaging.com) .................................. 9
Imagen 8. Ejemplo de una escala para calibrar .............................................................. 10
Imagen 9. Polilinea sobre otolito.................................................................................... 11
Imagen 10. Ejemplo de conteo. Segmento marcado sobre el otolito ........................... 12
Imagen 11. Sector junto a una ventana que muestra la línea ....................................... 13
Imagen 12. La imagen a analizar tiene un pixel de alto ................................................. 13
Imagen 13. Diagrama frente a la línea analizada ........................................................... 14
Imagen 14. Ejemplo de filtro a=70, b=30, c=d=0............................................................ 15
Imagen 15. Ejemplo de filtro a=85, b=15, c=d=0............................................................ 15
Imagen 16. Anillos marcados en azul ............................................................................. 17
Imagen 17. Detalle de anillos marcados ........................................................................ 17
Imagen 18. Menú de inicio OTOLIVE .............................................................................. 18
Imagen 19. Menú para gestionar el proyecto ................................................................ 18
Imagen 20. Acceso a las funciones de OTOLIVE ............................................................. 18
Imagen 21. Opciones de cámara .................................................................................... 19
Imagen 22. Formulario Información General ................................................................. 19
Imagen 23. Formulario Calibrar Microscopio ................................................................. 20
Imagen 24. Escalada graduada ....................................................................................... 20
Imagen 25. Escala en la que se ha dibujado un segmento ............................................. 21
Imagen 26. Se indican las lentes que lleva el microscopio y la distancia real ................ 21
Imagen 27. OTOLIVE detecta automáticamente que no hay cámara conectada .......... 22
Imagen 28. Imagen tomada por la cámara o seleccionada desde un directorio ........... 22
Imagen 29. Esta ventana emerge al dibujar el último segmento .................................. 23
Imagen 30. Diagrama de intensidad de los píxeles de la imagen original bajo la polilínea
........................................................................................................................................ 24
Imagen 31. Configuración del filtro ................................................................................ 25
Imagen 32. Datos globales del conteo ........................................................................... 26
Desarrollo de software de conteo de anillos en otolitos
38
Imagen 33. Datos globales tras analizar 4 transectos .................................................... 26
Imagen 34. Datos almacenados en EXCEL ...................................................................... 27