segmentacion imagenes - informe tecnico

6
Domingo 12 Abril 2009 Informe Técnico Generación de la base de datos de colores En este capitulo detallo el funcionamiento del proceso de captura de datos para el entrenamiento de la red neuronal, que ha sido construida en ambiente Matlab por su versatilidad y practica a la hora de su implementación. La idea principal para este entrenamiento consiste en el análisis de dos imágenes cuya semejanza solo debe involucrar el entorno del objeto que se quiere observar. Al ser dos imágenes, una de ellas debe ser la imagen con el objeto que nos interesa segmentar, en cambio la segunda imagen, debe presentar el mismo fondo o entorno pero con un elemento que no coincida con el objeto que estamos buscando, es decir, un objeto de un color distinto al que deseamos segmentar. La idea de esto es realizar una intersección entre ambas imágenes, semejante a la teoría de conjuntos, las tonalidades de los canales R, G y B que sean comunes a ambas imágenes, se registrara como los colores del exterior o de fondo comunes a ambas imágenes, y la resta de la primera imagen con la segunda, permitirá obtener de una de las dos imágenes, los colores internos del objeto segmentado que se esta buscando. Estas dos muestras obtenidas se traducen a matrices de colores RGB que irán a quedar almacenadas en una matriz de Nx3x2, siendo N el numero de colores obtenidos de la muestra, con tres columnas para los canales R, G y B por dos que guardaran la referencia de cada muestra. Pero para esto sera necesario realizar un análisis de cada imagen para dar como resultado esta matriz de tres dimensiones. La matriz resultante sera posteriormente guardada en un archivo que sera reutilizado como base de datos y realimentado por la misma aplicación, y sera posteriormente utilizado por otras aplicaciones para la identificación y posterior segmentación. La estructura de esta matriz tendrá la siguiente forma: / color interno[N][3] : (R G B) / N > 0 BaseDatos_color[2] -< \ color externo[N][3] : (R G B) / N > 0 Previo al análisis de ambas imágenes, primero se cargan en memoria las instancias de cada una, sobre cada imagen se realizan un par de operaciones de morfología matemática, una de dilación y otra de erosión sobre cada canal R, G y B; cada una ocupando un elemento estructurante compuesto de una matriz cuyo contenido binario corresponde a un disco de radio de 20 pixeles. Obteniendo de esta operación una imagen con colores homogéneos. El siguiente paso sera obtener una muestra de los colores de cada imagen y dejarlas en una matriz Nx3 cada una, para ello se analizara la imagen completa haciendo un barrido en los ejes X e Y , extrayendo los canales R, G y B de un grupo disperso y ordenado de pixeles, es decir, se tomara una muestra de pixeles que se encontraran separados por una distancia de 8 pixeles de radio. La función ExtraeColores cumplirá esta misión al proveerle como argumentos la matriz de la imagen RGB y un valor entero que indicara el porcentaje de tolerancia para capturar un color en base a un margen de acotado de proximidad, su sintaxis es: 1

Upload: miguel-vargas-welch

Post on 21-Jun-2015

376 views

Category:

Documents


7 download

DESCRIPTION

Segmentacion ImagenesMorfologia Matematica

TRANSCRIPT

Page 1: Segmentacion Imagenes - Informe Tecnico

Domingo 12 Abril 2009

Informe Técnico

Generación de la base de datos de colores

En este capitulo detallo el funcionamiento del proceso de captura de datos para elentrenamiento de la red neuronal, que ha sido construida en ambiente Matlab por suversatilidad y practica a la hora de su implementación.

La idea principal para este entrenamiento consiste en el análisis de dos imágenes cuyasemejanza solo debe involucrar el entorno del objeto que se quiere observar. Al ser dosimágenes, una de ellas debe ser la imagen con el objeto que nos interesa segmentar, encambio la segunda imagen, debe presentar el mismo fondo o entorno pero con un elementoque no coincida con el objeto que estamos buscando, es decir, un objeto de un color distintoal que deseamos segmentar. La idea de esto es realizar una intersección entre ambasimágenes, semejante a la teoría de conjuntos, las tonalidades de los canales R, G y B quesean comunes a ambas imágenes, se registrara como los colores del exterior o de fondocomunes a ambas imágenes, y la resta de la primera imagen con la segunda, permitiráobtener de una de las dos imágenes, los colores internos del objeto segmentado que se estabuscando.

Estas dos muestras obtenidas se traducen a matrices de colores RGB que irán a quedaralmacenadas en una matriz de Nx3x2, siendo N el numero de colores obtenidos de lamuestra, con tres columnas para los canales R, G y B por dos que guardaran la referenciade cada muestra. Pero para esto sera necesario realizar un análisis de cada imagen para darcomo resultado esta matriz de tres dimensiones. La matriz resultante sera posteriormenteguardada en un archivo que sera reutilizado como base de datos y realimentado por lamisma aplicación, y sera posteriormente utilizado por otras aplicaciones para laidentificación y posterior segmentación. La estructura de esta matriz tendrá la siguienteforma:

/ color interno[N][3] : (R G B) / N > 0BaseDatos_color[2] -<

\ color externo[N][3] : (R G B) / N > 0

Previo al análisis de ambas imágenes, primero se cargan en memoria las instancias de cadauna, sobre cada imagen se realizan un par de operaciones de morfología matemática, unade dilación y otra de erosión sobre cada canal R, G y B; cada una ocupando un elementoestructurante compuesto de una matriz cuyo contenido binario corresponde a un disco deradio de 20 pixeles. Obteniendo de esta operación una imagen con colores homogéneos.

El siguiente paso sera obtener una muestra de los colores de cada imagen y dejarlas en unamatriz Nx3 cada una, para ello se analizara la imagen completa haciendo un barrido en losejes X e Y , extrayendo los canales R, G y B de un grupo disperso y ordenado de pixeles, esdecir, se tomara una muestra de pixeles que se encontraran separados por una distancia de8 pixeles de radio.

La función ExtraeColores cumplirá esta misión al proveerle como argumentos la matriz dela imagen RGB y un valor entero que indicara el porcentaje de tolerancia para capturar uncolor en base a un margen de acotado de proximidad, su sintaxis es:

1

Page 2: Segmentacion Imagenes - Informe Tecnico

matriz = ExtraeColores(imageRGB, tolerancia)

Su propósito es de obtener una lista mas compacta y reducida en muestras de colores, esdecir en pocas palabras una matriz mas liviana en tamaño. Esto se consigue realizando elcalculo de una mascara de bits en función de la tolerancia, el tamaño máximo de la mascarasera de 4 bits y el mínimo de 1. Esta mascara se combina binaria mente en el cuartetoinferior del canal R, G o B dejando el cuarteto superior con el valor mas significativo delcanal representante del color del pixel. A cada pixel analizado en el barrido se compara suscanales RGB y las mascaras previamente generadas con la operación lógica AND, si se dacomo resultado un valor distinto de cero, esa muestra de color es seleccionada para ocuparun puesto en una tabla hash, cuya llave sera la misma mascara. Esta operación estarepresentada por el uso de variables del tipo estructura que provee Matlab. Y finalmente serecorre cada valor de la tabla hash usando la llave como índice, donde los valores R, G y Bson extraídos y almacenados en una matriz. Esta matriz resultante es la que sera devueltapor la función y su estructura sera:

matriz[N][4] : (R G B mascara) / N > 0

El siguiente paso sera la separar los colores correspondientes al objetivo de la imagen delfondo que lo rodea, para ello utilizaremos la propuesta del enunciado que dice si dos tríossimilares comparten el mismo fondo, pero no el objetivo, sustraemos el fondo y nosquedamos con el objetivo de la imagen elegida. En otras palabras, de la diferencia de dosconjuntos, nos quedamos con el subconjunto que nos interesa.

La función RestaColores cumplirá este trabajo al proveerle como argumentos la matriz decolores extraído de la imagen con nuestro objetivo, la matriz de colores de la imagen sinnuestro objetivo, nuestra base de datos de colores que mas tarde explicaremos y un valorentero para la tolerancia en la captura del color, su sintaxis es:

color = RestaColores(matriz_principal, matriz_secundaria, BaseDatos_color,tolerancia)

En esta función primero generaremos la mascara en bits en función de la tolerancia, y laocuparemos para complementarla con cada muestra de color RGB de las matrices querecorreremos, obteniendo con esto una llave para una tabla hash que ocuparemos paracada matriz de entrada.

Comenzando con la matriz de nuestra base de datos de colores, que en el caso que novenga vacía, la recorreremos completa creando con cada trio R, G y B una llave compuestapor la unión de la mascara con el cuarteto inferior de cada canal formando una sola mascaraRGB, valor el cual usaremos como índice para una tabla hash e ir almacenando en estatabla cada trío RGB que represente los colores internos del objetivo, misma operación quese realizara sobre otra matriz de nuestra base que creara una segunda tabla hash para loscolores externos a nuestro objetivo. Cabe destacar que esta base de datos esta compuestapor dos matrices bidimensionales de Nx3 que juntas forman una matriz tridimensional deNx3x2, siendo uno el conjunto de colores del objetivo, y el otro los colores del fondo.

Estas dos tablas hash resultantes seguirán complementando se con los tríos R, G y B delrecorrido de las matrices principal y secundaria, que en esta ocasión se irán acumulando enla tabla hash de colores externos aquellos tríos RGB cuyas mascaras coincidan entre ambasmatrices, dejando bajo esta condición una marca en la matriz principal en la posición dondeocurre la coincidencia para diferenciarlo de los colores del objetivo, esta marca consiste

2

Page 3: Segmentacion Imagenes - Informe Tecnico

dejar en cero, los valores de los canales RGB con el fin de suprimir los colores quecorresponden al fondo de la imagen principal. Seguido de esta operación se procede arecorrer ahora solo la matriz principal en el cual se acumularan en la tabla hash de coloresinternos aquellos tríos RGB cuyo valor compuesto sea mayor a cero, es decir, aquellos tríosque no fueron marcados en el ciclo previo.

Teniendo ya las dos estructuras hash completas, proseguiremos a su creación, la matriz decolores que reemplazara a la actual base de datos, pero una restricción es que ambas tablashash deberán tener la misma dimensión, por lo que se recurre a comparar el tamaño deambas y se generan dos matrices de Nx3 siendo N el valor mayor en tamaño entre ambastablas hash. Así entonces se procede a dejar en una matriz el conjunto de tríos RGBcorrespondientes a los colores del interior del objetivo, y en la otra matriz los tríoscorrespondientes a los colores del exterior del objetivo, es decir el fondo. Luego se tomanambas matrices y se forma una tercera matriz de Nx3x2 que sera devuelta por esta función.

La matriz devuelta por esta función sera guardada en un archivo que representara nuestrabase de datos de colores para la segmentación.

La ejecución de este algoritmo permitirá para las múltiples circunstancias, elenriquecimiento de la base de datos de colores, pues los colores tanto del fondo como delobjetivo se irán acumulando en esta base de datos, y tan solo con la computación diversaentre dos imágenes de similares características.

3

Page 4: Segmentacion Imagenes - Informe Tecnico

Segmentación

La técnica de segmentación aplicada en este algoritmo consistirá en recorrer la imagenhaciendo un barrido parcial por las coordenadas X e Y con saltos de a ocho pixeles, estopermitirá un barrido rápido de la imagen cuyo análisis sera suficiente para determinardonde se agrupan los pixeles con los colores buscados. Por cada color encontrado que estedentro del rango de colores determinado por la tolerancia, sus coordenadas seránguardadas en una matriz la que sera gestionada posteriormente para obtener mas pixelesde la imagen dentro de la agrupación obteniéndose finalmente la imagen segmentada.

Previo al análisis de la imagen, primero se carga en memoria su instancia y luego se aplicauna conversión de imagen del modelo de color RGB al modelo HSV y se la guarda como unainstancia de imagen aparte, dando como resultado una imagen RGB y otra HSV de laimagen que contiene nuestro objeto buscado. Luego se aplica sobre ambas instancias lasoperaciones morfológicas de dilación y erosión, ambas ocupando como elementoestructurante una matriz cuyo contenido binario corresponde a un disco de radio de 20pixeles. La finalidad de esta operación es la de reducir y homogeneizar los colores de ambasimágenes.

Para la segmentación necesitaremos, luego, nuestra base de datos de colores generada enel algoritmo anterior, bajo esta circunstancia la cargaremos en memoria asignándosela auna matriz tridimensional de Nx3x2 siendo N la cantidad de trios RGB por dos grupos decolores correspondientes una para los colores del interior de nuestro objetivo y el otro paralos colores del exterior o fondo de la imagen. Esta matriz o base de datos la ocuparemospara las funciones que analizan la imagen de muestra y para segmentarla.

El análisis de la imagen la iniciaremos con la función imAnalizeColor que recibirá comoargumentos la instancia de la imagen original, la imagen RGB con las operacionesmorfológicas antes mencionadas, la imagen convertida a HSV también aplicada las mismasoperaciones morfológicas, la matriz de colores de nuestra base, y un valor entero para elporcentaje de tolerancia que nos servirá para definir el rango de colores semejantes quevalidara su selección. La sintaxis de la función es la siguiente:

matriz = imAnalizeColor(imagen, rgb, hsv, BaseDatos_color, tolerancia)

Primero deberemos definir el criterio de búsqueda y selección de colores candidatos denuestra imagen, para ello ocuparemos la variable de tolerancia para establecer el rango omargen del nivel superior e inferior del canal R, G y B donde se comparará cada pixel denuestra imagen analizada. Adicionalmente también definimos con la tolerancia los nivelesmáximo y mínimo para los canales de saturación, luz y tono o mejor dicho los canales H, Sy V, todos estos valores lo complementamos en una matriz de referencia junto con cada tríoRGB de nuestra base de colores externos e internos. Esta operación es realizada por lafunción CriterioFiltro que recibe como argumentos la base de datos de colores y latolerancia devolviendo la estructura siguiente:

criterio[N][24] :(R , G , B , R minimo , R maximo , G min , G max , B min , B max , fondoR , fondo G , fondo B , fondo R min , fondo R max , fondo G min , fondoG max , fondo B min , fondo B max , H , S , V , H min , H max , S min ,S max , V min , V max)

El siguiente paso sera entonces recorrer la imagen haciendo un barrido por las coordenadasX e Y con saltos de cada 8 pixeles, obteniendo sus canales R, G, B y de saturación, donde

4

Page 5: Segmentacion Imagenes - Informe Tecnico

marcamos la diferencia de los colores interior del exterior haciendo para cada píxel sucomparación con cada criterio definido en nuestra matriz de referencia de colores. Cadapixel que coincida con al menos uno de los criterios de losa colores de nuestra matriz dereferencia, sea incluido en nuestra matriz de colores capturados, el cual registraran lascoordenadas del píxel elegido y sus canales RGB. Esta matriz de colores capturados sera ladevuelta por nuestra función cuya estrauctura sera la siguiente:

matriz[N][5] : (Y X R G B) / X > 0 , Y > 0

Ya que tenemos las coordenadas de los pixeles que nos interesan de nuestra imagen asegmentar, debemos considerar el siguiente detalle, hasta ahora hemos reunido un grupoparcial de coordenadas de los pixeles que cumplieron con el criterio de nuestra búsqueda,pero no significa que hayamos capturado el objetivo completo de nuestra imagen, pues solotenemos una vista parcial de ella al ser recogida solo una malla de coordenadas de ochopixeles de distancia entre ellas. Lo que debemos hacer entonces es capturar e resto de lospixeles adyacentes a estas coordenadas para si completar la imagen segmentada.

Para ellos nos serviremos de la función imSegmenta cuyos argumentos son la matriz conlas coordenadas capturadas, la instancia de la imagen original, las instancias de la imagenen RGB y HSV en ambas aplicadas las operaciones morfológicas, nuestra base de datos decolores, la variable de tolerancia y una variable que indicara la distancia en pixeles de lospuntos que queremos rellenar nuestra imagen pre-segmentada, su sintaxis es:

matriz = imSegmenta(matriz, imagen, rgb, hsv, BaseDatos_color, tolerancia,distancia)

Dentro de esta función emplearemos nuevamente la función CriterioFiltro para definir enesta ocasión un nuevo criterio de filtro mas flexible, es decir, como no sera tan exigente labúsqueda de colores, aquí aumentaremos la tolerancia al doble, cuyo resultado seraasignado a una matriz de referencia.

Próximo paso sera recorrer la matriz de coordenadas que recibimos de entrada de inicio afin, por cada muestra de esta matriz obtendremos las coordenadas X e Y que teníamosalmacenadas e iniciaremos un ciclo de cero a ocho con saltos de N pixeles dado por lavariable distancia que servirán de desplazamiento dentro de una ventana de 8x8, estopermitirá capturar los pixeles en aquellos espacios vacíos adyacentes a las coordenadas denuestra matriz de entrada. De los pixeles capturados que cumplan con el criterio debúsqueda, los complementamos a la matriz que estamos trabajando y que finalmentedevolverá nuestra función, cuya estructura sera la misma que la matriz de entrada.

Con esta matriz final, tendremos ya una imagen segmentada mas próxima dependiendo delvalor de distancia que le demos, mientras menor sea la distancia entre pixeles quedefinamos, mas completa sera la imagen resultante en la segmentación.

Para desplegar esta matriz y representarla como una imagen, podemos generar una imagenvacía con fondo negro (o blanco como guste), e ir pintando los pixeles con cada trio RGBcapturado dada las coordenadas almacenadas en nuestra matriz. Esto lo realiza la funciónCreaImagen2 que recibe como argumentos nuestra matriz y una imagen vacía con lasmismas dimensiones de nuestra imagen original retornando como resultado la imagensegmentada con nuestro objetivo buscado. Su sintaxis es:

imagen = CreaImagen2(matriz, imgFondoNegro)

5

Page 6: Segmentacion Imagenes - Informe Tecnico

Y con esto ya tenemos nuestra imagen segmentada. Cabe dejar una observación en que eltiempo de segmentación puede variar dependiendo del tamaño de la imagen, del nivel detolerancia aplicado y sobretodo de la distancia entre los pixeles que se irán capturando parala segmentación.

El desarrollo fue construido bajo el ambiente Matlab versión 6.0 y el tiempo de respuestapuede llegar a ser aceptable aunque puede mejorar considerablemente optimizando elcódigo bajo otros lenguajes de programación.

Miguel Vargas WelchIngenieria Ejecucion InformaticaUniversidad de las Ciencias Informaticas

6