Apéndice A: Funciones del programa LightPAP A continuación se van a explicar las funciones principales que se han desarrollado para esta aplicación. 1 calcula_prop.m function [nc,cv,posicion,tinta,saturacion,luminancia] = calcula_prop (im_celula, im_nucleo,n_nucleos,celula_color) im_celula: matriz que contiene la imagen de la célula segmentada. im_nucleo: matriz que contiene la imagen del núcleo segmentado. n_nucleos: número de núcleos detectados en la célula. celula_color: matriz 3D que contiene la imagen de la célula a color segmentada. nc: Valor de la relación núcleo/citoplasma. cv: Valor del coeficiente de variación del núcleo. posicion: Valor del coeficiente de variación del núcleo. tinta: Valor de parámetro de color tinta. saturacion: Valor del parámetro de color saturación. 1
luminancia: Valor del parámetro de color luminancia. Esta función calcula los parámetros que relacionan el núcleo con el citoplasma y que se detallan en el apartado Error! No se encuentra el origen de la referencia.. 2 citoplasma.m function varargout = citoplasma(varargin) varargout{1} = Bandera que indica si se desea calcular el área (bien de la célula, bien varargout{2} = Bandera que indica si se desea calcular el área convexa (bien de la célula, bien varargout{3} = Bandera que indica si se desea calcular el centroide (bien de la célula, bien varargout{4} = Bandera que indica si se desea calcular la excentricidad (bien de la célula, bien varargout{5} = Bandera que indica si se desea calcular el eje mayor (bien de la célula, bien varargout{6} = Bandera que indica si se desea calcular el eje menor (bien de la célula, bien varargout{7} = Bandera que indica si se desea calcular la solidez (bien de la célula, bien 2
varargout{8} = Bandera que indica si se desea calcular el valor medio de intensidad y su desviación típica en el interior (bien de la célula, bien varargout{9} = Bandera que indica si se desea calcular el perímetro (bien de la célula, bien varargout{10} = Bandera que indica si se desea calcular el valor medio de intensidad y su desviación típica en el borde (bien de la célula, bien varargout{11} = Bandera que indica si se desean calcular todos los parámetros definidos (bien de la célula, bien Archivo.m para la creación de la pantalla citoplasma.fig. En esta ventana el usuario puede elegir las propiedades de la célula o del núcleo que desea que se calculen. 3 crear_matriz_xls.m Function[matrix_xls]=crear_matriz_xls(prop_cell,area,areac, centroid,ejemayor,ejemenor,solid,int,perim,excentric, int_borde,celula,bordes,nucleos,esnucleo) prop_cell = estructura de propiedades de la célula obtenidas con regionprops. area = Bandera que indica si se desea calcular el área (bien de la célula, bien del núcleo). 3
areac = Bandera que indica si se desea calcular el área convexa (bien de la célula, bien centroid = Bandera que indica si se desea calcular el centroide (bien de la célula, bien ejemayor = Bandera que indica si se desea calcular el eje mayor (bien de la célula, bien ejemenor = Bandera que indica si se desea calcular el eje menor (bien de la célula, bien solidez = Bandera que indica si se desea calcular la solidez (bien de la célula, bien del núcleo). int = Bandera que indica si se desea calcular el valor medio de intensidad y su desviación típica en el interior (bien de la célula, bien perim = Bandera que indica si se desea calcular el perímetro (bien de la célula, bien del núcleo). excentric = Bandera que indica si se desea calcular la excentricidad (bien de la célula, bien int_borde = Bandera que indica si se desea calcular el valor medio de intensidad y su desviación típica en el borde (bien de la célula, bien celula = Matriz que contiene la imagen de la célula segmentada, con los valores que no pertenecen a la célula a cero. bordes = Matriz que contiene la imagen de bordes que marcan los límites de segmentación de la célula. nucleos = Matriz que contiene una imagen máscara con los núcleos detectados marcados a uno lógico. 4
esnucleo = Vale 1 cuando es llamado para calcular los parámetros del núcleo y 0 cuando lo es para el citoplasma. matrix_xls = vector que almacena los parámetros calculados. Almacena en un vector los valores ordenados de los parámetros calculados. Cuando no se calcula un parámetro (porque el usuario decida que no es necesario), el valor por defecto es cero. 4 fanalizacell.m function [celula,nucleos,n_nucleos,bw]=fanalizacell(l,aproc, prop_region,nucleo_max,nucleo_min,ex_limit) L = Matriz con la imagen de bordes resultado de una segmentación. Imagen de regiones. Aproc = Matriz con la imagen preprocesada. prop_region = Propiedades de la región que estamos estudiando. nucleo_max = Valor del tamaño máximo de un núcleo en pixeles. nucleo_min = Valor del tamaño máximo de un núcleo en pixeles. ex_limit = Valor límite de circularidad de un núcleo 5
celula = matriz con la imagen de la célula segmentada. nucleos = matriz con la imagen binaria indicando la posición de los núcleos. n_nucleos = valor del número de núcleos detectados en una célula. BW = matriz con la imagen binaria indicando la segmentación de la célula. Vale uno donde la región corresponde a la célula y cero donde no. Esta función recorta la célula y ajusta la ventana al tamaño de la misma y asigna las propiedades de la célula. Además detecta los núcleos y crea una máscara para segmentar los núcleos. 5 fcelulas.m function L = fcelulas(mask,im_gray,umbral_nucleo,se_nucleo) mask = matriz con la imagen de máscara de regiones. im_gray = matriz con la imagen prerpocesada en escala de grises. umbral_nucleo = valor para segmentar los marcadores. se_nucleos = tamaño del elemento estructural para aumentar el tamaño de los marcadores. 6
L = matriz con la imagen de regiones segmentada por Watershed. Esta función aplica la segmentación Watershed con marcadores explicada en apartados anteriores. 6 fpreprocesado.m function Aproc = fpreprocesado(a,color,media,mediana,histo, realce,alpha,size) A = Imagen que se desea procesar. color = Plano de la imagen con la que se va a trabajar. Vale 2 si la imagen la queremos en escala de grises; 3 si cogemos el plano rojo, 4 si el plano verde, y 5 si el plano azul. media = Bandera para el filtro de la media. mediana = Bandera para el filtro de la mediana. histo = Bandera para la ecualización adaptativa de histograma. realce = Bandera para el filtro de realce de bordes. alpha = Parámetro variable para el filtro de realce de bordes. size = Tamaño del filtro. 7
Aproc = Imagen procesada con los parámetros indicados. posteriores. Aplica la fase de preprocesado a la imagen, la prepara para los pasos 7 fregiones.m function BW = fregiones(a,umbral,tam_min,flagbordes,radio1) A = Imagen en 2D preparada. Salida de preprocesado. umbral = Umbral para segmentar las regiones de interés del fondo. tam_min = Para eliminar las regiones por debajo de este tamaño. flagbordes = Elige entre dos tipos de detección de bordes: Sobel y Prewitt. radio1 = Determina el tamaño del elemento morfológico que se va a usar en las operaciones. BW = Máscara que elimina el fondo de la imagen, dejando sólo las regiones de interés. 8
Esta función detecta automáticamente la región de interés de una imagen, eliminando el fondo. Crea una máscara que aplicada a la imagen elimina las regiones no deseadas. 8 pap.m function varargout = pap(varargin) Fichero.m para la creación de la aplicación pap.fig. Esta pantalla es la ventana principal de programa, donde el usuario puede cargar las imágenes que desee analizar, puede modificar los parámetros y aplicar procesados sobre las imágenes, y a la vez visualizar los resultados. 9 salir.m function varargout = salir(varargin) Fichero.m para la creación del cuadro de diálogo salir.fig. 9
Funciones del programa HighPAP A continuación se van a explicar las funciones principales que se han desarrollado para esta aplicación. 1 calculo_lmpx.m function varargout = calculo_lmpx(varargin) Argumentos de Entrada varargin: imagen sobre la cual queremos calcular la resolución. Debe estar en escala de grises. Argumentos de Salida varargout: devuelve el valor numérico de la resolución calculada. Abre una pequeña interfaz que calcula la resolución de la imagen fijando dos puntos sobre la misma e indicando la distancia real entre estos. 2 fpreprocesado.m function sprocess = fpreprocesado(soptions) 10
Argumentos de Entrada soptions: estructura que contiene la imagen a procesar y los parámetros de preprocesado. Contiene los siguientes campos: image: que contiene la imagen que se quieres procesar. ncolor: que contiene el plano de color con el que se va a trabajar. nflagmedia: bandera que está a 1 cuando se desea aplicar un filtro de media. nflagmedian: bandera que está a 1 cuando se desea aplicar un filtro de mediana. nflaghisto: bandera que está a 1 cuando se desea aplicar una ecualización de histograma. nflagunsharp: bandera que está a 1 cuando se desea aplicar un filtro de realce de bordes. nalpha: valor del parámetro para realce de bordes. nsizefilter: tamaño del filtro de ruido. Argumentos de Salida sprocess: estructura que devuelve la imagen procesada y mensajes de error en caso de que los haya. 3 calcula_prop.m function [nc,cv,posicion,tinta,saturacion,luminancia] = calcula_prop (im_celula, im_nucleo,n_nucleos,celula_color) 11
im_celula: matriz que contiene la imagen de la célula segmentada. im_nucleo: matriz que contiene la imagen del núcleo segmentado. n_nucleos: número de núcleos detectados en la célula. celula_color: matriz 3D que contiene la imagen de la célula a color segmentada. nc: Valor de la relación núcleo/citoplasma. cv: Valor del coeficiente de variación del núcleo. posicion: Valor del coeficiente de variación del núcleo. tinta: Valor de parámetro de color tinta. saturacion: Valor del parámetro de color saturación. luminancia: Valor del parámetro de color luminancia. Esta función calcula los parámetros que relacionan el núcleo con el citoplasma y que se detallan en el apartado Error! No se encuentra el origen de la referencia.. 4 crear_matriz_xls.m function [matrix_xls]=crear_matriz_xls(prop_cell,area,areac,centroid,... ejemayor,ejemenor,solid,int,perim,excentric,int_borde,celula,bordes,... nucleos,esnucleo) 12
prop_cell = estructura de propiedades de la célula obtenidas con regionprops. area = Bandera que indica si se desea calcular el área (bien de la célula, bien del núcleo). areac = Bandera que indica si se desea calcular el área convexa (bien de la célula, bien centroid = Bandera que indica si se desea calcular el centroide (bien de la célula, bien ejemayor = Bandera que indica si se desea calcular el eje mayor (bien de la célula, bien ejemenor = Bandera que indica si se desea calcular el eje menor (bien de la célula, bien solidez = Bandera que indica si se desea calcular la solidez (bien de la célula, bien del núcleo). int = Bandera que indica si se desea calcular el valor medio de intensidad y su desviación típica en el interior (bien de la célula, bien perim = Bandera que indica si se desea calcular el perímetro (bien de la célula, bien del núcleo). excentric = Bandera que indica si se desea calcular la excentricidad (bien de la célula, bien int_borde = Bandera que indica si se desea calcular el valor medio de intensidad y su desviación típica en el borde (bien de la célula, bien celula = Matriz que contiene la imagen de la célula segmentada, con los valores que no pertenecen a la célula a cero. 13
bordes = Matriz que contiene la imagen de bordes que marcan los límites de segmentación de la célula. nucleos = Matriz que contiene una imagen máscara con los núcleos detectados marcados a uno lógico. esnucleo = Vale 1 cuando es llamado para calcular los parámetros del núcleo y 0 cuando lo es para el citoplasma. matrix_xls = vector que almacena los parámetros calculados. Almacena en un vector los valores ordenados de los parámetros calculados. Cuando no se calcula un parámetro (porque el usuario decida que no es necesario), el valor por defecto es cero. 5 buscaroi.m function BW = fregiones(a,umbral,tam_min, radio1) A = Imagen en 2D preparada. Salida de preprocesado. umbral = Umbral para segmentar las regiones de interés del fondo. tam_min = Para eliminar las regiones por debajo de este tamaño. radio1 = Determina el tamaño del elemento morfológico que se va a usar en las operaciones. 14
BW = Máscara que elimina el fondo de la imagen, dejando sólo las regiones de interés. Esta función detecta automáticamente la región de interés de una imagen, eliminando el fondo. Crea una máscara que aplicada a la imagen elimina las regiones no deseadas. 6 FindMarks.m function smarks = FindMarks (soptions) soptions: estructura que contiene los siguientes campos image: La imagen que se quiere procesar ntipo: el tipo de operación morfológica que se desea hacer nsetam: tamaño del elemento morfológico smarks: estructura que contiene los siguientes campos image: la imagen de marcadores obtenida ctipo: cadena de caracteres con el filtrado aplicado Esta función encuentra máximos locales sobre una imagen en escala de grises previamente filtrada. 15
7 Region_grow2.m function [seg]=region_grow2(im,seg,criterion,connectivity) im: imagen en escala de grises sobre la que tengo que hacer la segmentación. seg: imagen binaria con las regiones semilla necesarias para la segmentación por crecimiento de región. criterion: umbral que sirve de criterio para admitir un pixel en una región. connectivity: conectividad del crecimiento de región. Puede valer 4 y 8. nucleos_final: imagen binaria con el resultado de la segmentación. Función que partiendo de unas regiones semilla, añade píxeles conectados que cumplen un criterio de intensidad fijado por el usuario de la aplicación. 8 pap.m function varargout = pap(varargin) Fichero.m para la creación de la aplicación pap.fig. Esta pantalla es la ventana principal de programa, donde el usuario puede cargar las imágenes que desee analizar, 16
puede modificar los parámetros y aplicar procesados sobre las imágenes, y a la vez visualizar los resultados. 9 SegWatershed.m function L = SegWatershed(mask,im_gray,marcadores,tipo,tipofiltro) mask: máscara de ROI calculada previamente. im_gray: imagen a segmentar en escala de grises. marcadores: imagen binaria con los marcadores necesarios para la segmentación Watershed. tipo: se han implementado dos tipos de transformada Watershed. La primera toma como entrada la imagen original (en escala de grises); y la segunda la imagen gradiente. tipofiltro: en el caso de que se tome como entrada a la transformada la imagen gradiente, este parámetro especifica el tipo de filtro usado para calcular el gradiente. L: imagen binaria con el resultado de la segmentación. Aplica el algoritmo de Watershed con marcadores para segmentar la imagen de entrada. 17
10 SegGradient.m function nucleos_final = SegGradient (soptions) soptions: estructura que contiene los siguientes campos: image: Imagen que se desea segmentar. ntypefilter: especifica el tipo de filtro usado para calcular el gradiente. numbral: umbral de segmentación del gradiente. nucleos_final: imagen binaria con el resultado de la segmentación. Segmenta la imagen de entrada umbralizando el gradiente de la imagen. 11 nucleos_final.m function nucleos_final = selec_nucleos(nucleoseg,flag_circ,flag_tam, MIN,MAX,CIRC) nucleoseg: Imagen binaria con la segmentación de los núcleos. flag_circ: Flag para filtro de circularidad. Cuando está a 1 se le pasa el filtro. flag_tam: Flag para filtro de tamaño. Cuando está a 1 se le pasa el filtro. 18
MIN: Umbral inferior de tamaño. MAX: Umbral superior de tamaño. CIRC: Umbral para el filtro de circularidad. nucleos_final: Imagen binaria de los núcleos segmentados que han pasado el filtro. Filtra las regiones segmentadas que no cumplan con unas características definidas a priori para un núcleo. 12 salir.m function varargout = salir(varargin) Fichero.m para la creación del cuadro de diálogo salir.fig. 19