Taller4 TIA

25
Universidad Nacional De Colombia Facultad De Ingenier´ ıa Departamento De Ingenier´ ıa Mec´ anica y Mecatr´ onica Inteligencia Artificial 2013-I Ing. Flavio Augusto Prieto Inteligencia Artificial 26 de Abril de 2013 Inteligencia Artificial Taller 2: Transformaciones y Pre- proceso Juanita Garc´ ıa, Nina Mes´ ıas 1. MarcoTe´orico 1.1. Transformada de hough La transformada de Hough es una herramienta que permite detectar curvas en una imagen. Es una t´ ecnica muy robusta frente al ruido y a la existencia de huecos en la frontera del objeto. A la hora de aplicar la transformada de Hough a una imagen es necesario obtener primero una imagen binaria de los p´ ıxeles que forman parte de la frontera del objeto. 1.1.1. Hough de lineas La transformada de Hough est´ a dise˜ nada especialmente para encontrar l´ ıneas. Definimos una l´ ınea como una colecci´ on de puntos de borde que son adyacentes y que tienen la mismadirecci´ on. La transformada de Hough es un algoritmo que tomar´ a una colecci´ on de puntos de borde, encontrados mediante un detector de bordes y buscar´ a todas las l´ ıneas sobre las cuales estos puntos de borde se encuentran. La transformada de Hough es un algoritmo de votaci´ on , resultante del conjunto de puntos que forman parte de una l´ ınea. Desde este punto de vista, el array de contadores en el espacio de par´ ametros puede ser estimado a trav´ es de un histograma. Los votos finales totales, ser´ an un contador de coordenadas, que indicar´ a la probabilidad relativa de la hip´ otesis nula, de que una recta con un conjunto de par´ ametros exista en la imagen. La transformada de Hough tiene varias caracter´ ısticas importantes. En primer lugar, como todos lo puntos son procesados independientemente, combatir´ a bien la oclusi´ on. En segundo lugar, es relativamente robusto al ruido, ya que los puntos err´ oneos no contribuir´ an consistentemente y s´ olo generar´ ıan ruido de fondo. La limitaci´ on m´ as grande de la transformada de Hough es quiz´ as, el r´ apido aumento del tiempo de b´ usqueda, as´ ı como la aparici´ on de falsos m´ aximos en el espacio de par´ ametros por parte de elementos no representativos. 1.1.2. Hough de circulos Se trabaja como el de lineas con la salvedad de que si el radio es conocido, el dominio de par´ ametros de cada c´ ırculo es bidimensional: coordenadas del centro de cada c´ ırculo. En este dominio, cada c´ ırculo del espacio se representa con un punto y sim´ etricamente, un punto del dominio espacial se representa en el dominio de par´ ametros mediante un c´ ırculo formado por todos los puntos que representan a todos los c´ ırculos que pueden pasar por el punto. 2. Desarrollo 2.1. Detecci´ on de bordes Par detectar los bordes segun su direcci´ on se aplico los filtros presentados a continuacion para encontrar lineas horizontales, verticales y a 45 y -45 grados. 1

Transcript of Taller4 TIA

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Ing. Flavio AugustoPrietoInteligencia Artificial

26 de Abril de 2013

Inteligencia ArtificialTaller 2: Transformaciones y Pre-proceso

Juanita Garcıa, Nina Mesıas

1. Marco Teorico

1.1. Transformada de hough

La transformada de Hough es una herramienta que permite detectar curvas en una imagen. Es una tecnicamuy robusta frente al ruido y a la existencia de huecos en la frontera del objeto. A la hora de aplicar latransformada de Hough a una imagen es necesario obtener primero una imagen binaria de los pıxeles queforman parte de la frontera del objeto.

1.1.1. Hough de lineas

La transformada de Hough esta disenada especialmente para encontrar lıneas. Definimos una lınea comouna coleccion de puntos de borde que son adyacentes y que tienen la mismadireccion. La transformada deHough es un algoritmo que tomara una coleccion de puntos de borde, encontrados mediante un detector debordes y buscara todas las lıneas sobre las cuales estos puntos de borde se encuentran.

La transformada de Hough es un algoritmo de votacion , resultante del conjunto de puntos que formanparte de una lınea. Desde este punto de vista, el array de contadores en el espacio de parametros puede serestimado a traves de un histograma. Los votos finales totales, seran un contador de coordenadas, que indicara laprobabilidad relativa de la hipotesis nula, de que una recta con un conjunto de parametros exista en la imagen.La transformada de Hough tiene varias caracterısticas importantes. En primer lugar, como todos lo puntosson procesados independientemente, combatira bien la oclusion. En segundo lugar, es relativamente robustoal ruido, ya que los puntos erroneos no contribuiran consistentemente y solo generarıan ruido de fondo. Lalimitacion mas grande de la transformada de Hough es quizas, el rapido aumento del tiempo de busqueda,ası como la aparicion de falsos maximos en el espacio de parametros por parte de elementos no representativos.

1.1.2. Hough de circulos

Se trabaja como el de lineas con la salvedad de que si el radio es conocido, el dominio de parametros decada cırculo es bidimensional: coordenadas del centro de cada cırculo. En este dominio, cada cırculo del espaciose representa con un punto y simetricamente, un punto del dominio espacial se representa en el dominio deparametros mediante un cırculo formado por todos los puntos que representan a todos los cırculos que puedenpasar por el punto.

2. Desarrollo

2.1. Deteccion de bordes

Par detectar los bordes segun su direccion se aplico los filtros presentados a continuacion para encontrarlineas horizontales, verticales y a 45 y -45 grados.

1

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Cuadro 1: filtro a 0-1 -1 -1

2 2 2

-1 -1 -1

Cuadro 2: filtro a 90-1 2 -1

-1 2 -1

-1 2 -1

Cada uno de estos kernel se aplico como un filtro a las imagenes de la figura 1 y se obtuvieron sus respectivaslineas presentadas en las imagenes 2, 3, 4. Si se observan estas imagenes se puede observar que el filtro es efctivoy solo toma las lineas en la direccion requerida y pareciera que si se sumeran estas cuatro imagenes en unadiera como resultado los contornos de las imagenes. Esta deteccion de lineas seria importante si el analisisdependiera de un barrido en una direccion en especifico o se quisiera encontrar una carcarteristica en esadireccion.

Cuadro 3: filtro a 45-1 -1 2

-1 2 -1

2 -1 -1

2

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Cuadro 4: filtro a -452 -1 -1

-1 2 -1

-1 -1 2

Figura 1: Mariposas

3

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 2: Deteccion de lineas imagen 1

4

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 3: Deteccion de lineas imagen 2

5

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 4: Deteccion de lineas imagen 3

2.2. Deteccion de contornos

Primero se realizo una pruba con tres imagenes diferentes hallando los contornos a partir de una imagenumbralizada binariamente a un valor de 135, y una imagen a la que se le ha aplicado el filtro canny, a estasimagenes se les aplico la funcion cvfindcountours con los valores por defecto, para modo es CV RETR LIST ypara metodo es CV CHAIN APPROX SIMPLE. obteniendo las imagenes 5, 6, 7

6

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 5: contorno imagen 1

7

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 6: contorno imagen 1

8

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 7: contorno imagen 1

En las imagenes 5, 6, 7 en la parte superior derecha se encuentra la imagen umbralizada, y a su izquierdasu respesctivo contorno, en la parte inferior derecha se puede observar la imagen de Canny, y a su izquierdasu respectivo contorno, cabe destacar que cuando se carga una imagen umbralizada, la funcion tomara comocontorno el cambio de negro a blanco segun corresponda, es por ello que si no se define de manera correcta elumbral o la imagen tiene al umbralizarse muchos cambios generara una imagen sal y pimienta o como se puedever en la figura 7 no se define bien un contorno como tal. Para el caso de canny tanto con la imagen 5y 6 seobtuvo mejores resultados y se encontro un borde mas marcado que en el anterior caso, aun ası con la imagen7 se observa que la imagen presenta muchos cambios, el la parte del pecho de la mariposa donde presenta unavariacion de colores, como si esta fuera salpicada, se presenta una mayor concentracion de puntos, en otraspalabras en las regiones donde la imegen presente textura, habra un cambio constante de color por lo que seentendera que es un contorno de alıi que se note mayor concentracionde puntos en dicha zona.

La funcion de opencv permite encontrar un contorno, un contorno es una lista de puntos que representan, deuna forma u otra,una curva en una imagen. Esta representacion puede ser diferente dependiendo de las circuns-tancias a mano. Hay muchas maneras de representar una curva. Los contornos estan representados en OpenCVpor secuencias en las que cada entrada en la secuencia codifica informacion sobre la ubicacion del siguientepunto de la curva. Su estructura es: cvFindContours( IplImage* img, CvMemStorage* storage, CvSeq** first-Contour, int headerSize = sizeof(CvContour), mode, method). Donde firstContour es un puntero CvSeq, que lolocaliza automaticamente, el headerSize se debe colocar como sizeof(CvContour) o sizeof(CvChain) el campo

9

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

modo que especifica que va a hacer, sus opciones son: CV RETR EXTERNAL que recupera solo los contornosexteriores extremas, en el se establecen jerarquıa [i] [2] = jerarquıa [i] [3] = -1 para todos los contornos; CVRETR LIST recupera todos los contornos sin establecer relaciones jerarquicas; CV RETR CCOMP recuperatodos los contornos y los organiza en una de dos niveles jerarquıa, en el nivel superior, hay lımites externos delos componentes, al segundo nivel, hay lımites de los agujeros. Si hay otro contorno interior de un agujero deun componente conectado, todavıa se pone en el nivel superior; CV RETR TREE recupera todos los contornosy reconstruye una jerarquıa completa de anidado contornos; y finalmente el metodo que dice como lo hacepresenta las siguientes opciones: CV CHAIN APPROX NONE almacena absolutamente todos los puntos delcontorno. Es decir, cualquier 2 puntos siguientes (x1,y1) y (x2, y2) del contorno sera o bien horizontal, verticalo vecinos diagonal, es decir, max (abs (x1-x2), abs (y2-y1)) == 1; CV CHAIN APPROX SIMPLE comprimelos segmentos horizontales, verticales y diagonales y deja solo sus puntos finales. Por ejemplo, un contornorectangular superior derecha se codifica con 4 puntos; CV CHAIN APPROX TC89 L1, CV CHAIN APPROXTC89 KCOS aplica uno de las opciones de la cadena algoritmo de aproximacion Teh-Chin.

Ahora tomando solo la imagen y utilizando el filtro canny como imagen para encontrar contornos ,se procedio a variar el metodo y el modo para ver las diferencias que puedan surgir entre ellos, prime-ro se utilizo el modo CV RETR EXTERNAL con los cinco metodos dando como resultado la imagen 5esto mismo se repito con los tres modos restantes, para CV RETR LIST se obtuvieron la imagen 5, pa-ra CV RETR CCOMP se obtuvo la imagen 5 y finalmente para CV RETR TREE se obtuvo la imagen 5.La variacion de los metodos se realizo de izquierda a derecha ,segun las imagenes,como CV CHAIN CODE,CV CHAIN APPROX NONE, CV CHAIN APPROX SIMPLE, CV CHAIN APPROX TC89 L1, y finalmen-te CV CHAIN APPROX TC89 KCOS (en este ultimo, para el modo CV RETR LIST se utlilizo el metodoCV LINK RUNS )

Figura 8: contorno imagen 1

Figura 9: contorno imagen 1

10

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 10: contorno imagen 1

Figura 11: contorno imagen 1

2.3. Transformada de hough

2.3.1. Lineas

Primero se comenzo encontrando las lineas presente en una imagen por medio del metodo CV HOUGH PROBABILISTIC,ρ de 1, θ π /180, threshold igual a 100, dando como resultado la imagen 12, se repitio este proceso con laimagen de una mariposa y se obtuvo la imagen 13, en estas dos imagenes no se puede distinguir las lineas quedetecta el algoritmo claramente.

Figura 12: Transformada de hough-linea

11

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 13: Transformada de hough-linea

Para la segunda imagen se repitio el algoritmo pero en este caso se decidio variar rho a 30 dando comoresultado la imagen 14, despues se hizo con rho igual a 400 (imagen 15) de tal forma que a medida que seaumenta el rho el resultado en la imagenes se empiezan a distinguir unas lineas mas que otras

Figura 14: Transformada de hough-linea

12

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 15: Transformada de hough-linea

Despues se fijo el rho en 200 y se vario el theta a pi/2 (imagen 16 ) y a pi (imagen 17), como se puedever, a medida que se aumenta theta dissminuye el numero de lineas en diferentes direcciones, es asi como parapi/180 se tenia lineas en todas las direcciones, para pi/2 lineass horizontaless y verticales y finalmente con pisolo lineas verticales.

Figura 16: Transformada de hough-linea

13

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 17: Transformada de hough-linea

Despues se procedio a modificar el valor de treshold, inicialmente estaba en 100, y se cambio a 30 (imagen18 ) y a 200(imagen 19 ) y se se como varia el numero de lines, ya que este parametro deteermina a partirde que valor se detectaran lineas en la imagen. Finalmente para el metodo trabajado se vario los parametrosfinales y se observo que la imagen noo cambiaba (imagen 20 ).

Figura 18: Transformada de hough-linea

14

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 19: Transformada de hough-linea

Figura 20: Transformada de hough-linea

2.3.2. circulos

Primero se comenzo encontrando las lineas presente en una imagen por medio del metodo CV HOUGH GRADIENT,dp igual a 2, y la ditancia minima igual al ancho de la imahgen deividido en 30, dando como resultado la imagen21, se repitio este proceso con la imagen de una mariposa y se obtuvo la imagen 22, en estas dos imagenes nose puede distinguir las lineas que detecta el algoritmo claramente.

15

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 21: Transformada de hough-circulo

Figura 22: Transformada de hough-circulo

2.4. Rellenado de imagenes

La funcion CvFloodFill lo que hace es colorear los pixeles que se encuentran en un determinado rango devalores con un color selecto, por ejemplo todas las imagenes que se presentan en esta seccion fueron coloreadacon rojo (CV RGB(255,0,0)) y los valores en los que se debian encontrar los pixeles vecinos a la semilla seencontraban entre un verde CV RGB(10,90,60) y un verde grisaseo CV RGB(100,100,70) tal y como se puedeobservar en la imagen 23.

16

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 23: colores de rango de trabajo

Para realizar el llenado de imagenes es necesario determinar la semilla en este caso se ingreso la semilla pormedio de un CvPoint, el primer valor que se le dio fue 200 en x y en y, obteniendo la imagen 24, despues secambio la semilla a 250 tanto en x como en y, y se obtuvo la imagen 25, en estas imagenes se resalto la semillase representa mediante un punto azul que apaece en la imagen. despues se realizo el mismo proceso con otraimagen obteniendo para la semilla 150 en x y en y, la imagen 26, para la semilla 100 en x y 250 en y la imagen27, para la semilla 250 en x y 100 en y la imagen 28; finalmente se repitio el proceso con una imagen diferente,pero en este caso las semillas fueron 250 en x y 100 en y, 450 x y 200 en y dando como resultado las imagenes29 30 respectivamente.

Figura 24: rellenado de regiones semilla x=200, y=200

17

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 25: rellenado de regiones semilla x=250, y=250

Figura 26: rellenado de regiones semilla x=150, y=150

18

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 27: rellenado de regiones semilla x=100, y=250

Figura 28: rellenado de regiones semilla x=250, y=100

19

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Figura 29: rellenado de regiones semilla x=250, y=100

Figura 30: rellenado de regiones semilla x=450, y=200

Como vemos en estas imagenes definir los parametro y la semilla es importante a la hora de determinarcorrectamente la zona a rellenar, es el caso de la imagen donde la mayoria de los vecinos de la semilla pertenecenal rango de color, es por ello que la imagen 29 se pierde casi que en su totalidad, mientrasque la imagen 25 y28 separan la mariosa casi que de todo el fondo original.

2.5. WaterShed

La funcion watershed que brinda OpenCV permite encontrar regiones a partir de unos marcadores respec-to a la imagen original. Su principio de funcionamiento se apoya en el uso del gradiente que determina lasdirecciones en las que mas varıa una region. A partir de una semilla que se dispone en un punto, el algoritmobusca las menores variaciones a su al rededor y define un zona similar a la semilla dada. Si se entrega mas

20

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

de una semilla para una misma zona, esta sera dividida, estableciendo una frontera entre las regiones que secrean a partir de cada semilla, de ahı la importancia de definir adecuadamente cada una de las marcas que sele entregan a la funcion de watershed.

La funcion predefinida en opencv es:watershed(imagen,marcadores)Donde imagen debe sre de tres canales y a color; y marcadores es una matriz que contiene las semillas quese desean ampliar en la imagen. Dicha matriz debe ser de ser del tipo 32 bits con signo, y contendra valorespositivos para lo que se halla marcado como semilla y ceros en los demas lugares de la matriz.Para la visualizacion de la aplicacion de Watershed, debe copiarse su informacion a una matriz de 8 bits sinsigno, (Los bits con signo no se grafican adecuadamente en opencv) y luego asignar colores para cada pixel dela matriz.

Si bien Watershed como funcion ya existe en opencv, para su implementacion se requieren una serie depasos, que se basaron, en este caso en el ejemplo entregado en las librerıas de OpenCV. En el se parte deemplear los eventos del mouse para definir las semillas que se tomaran. De esta forma el usuario, raya sobrela imagen original, y sus trazos se almacenan en una matriz de 8 bits de profundidad y de igual tamano ala imagen en estudio. Una vez definidas las semillas, se usa el algoritmo de hallar contornos para estableceruna secuencia de los mismos al interior de la imagen; con esta secuencia lo mismo trazos se dibujan en unamatriz del tipo 32S, que es la que se requiere para aplicar watershed. Finalmente la informacion entregadapor la operacion de Watershed se copia en otra matriz esta vez del tipo 8U que para mostrar los resultadosse pinta con colores aleatorios definidos en un vector y que se toman uno a uno para cada region. De estamanera se obtiene el resultado de la figura 33, que ensena cada momento del algoritmo: Los trazos del usuario,la separacion de las semillas y el resultado obtenido con watershed. La ultima de las imagenes se obtienesumando las mitades de las imagenes de watershed y la imagen inicial.

Figura 31: (De izquierda a derecha)Imagen original, marcas de las semillas, aplicacion de watershed y visuali-zacion en mezcla con la imagen original.

Es de mencionar que el ejemplo original dado por Opencv no se cambio mucho para su uso, mas la clavepara poder usarlo fue incluir la librerıa: ”opencv2/imgproc/imgproc.hpp” y sobre todo cambiar la variable detipo IplImage donde se almacena la imagen a una Matriz. Si bien una imagen es una matriz y el tipo IplImagees hijo de cvMat, opencv limita algunas de las operaciones que se puede hacer con uno u otro tipo de dato.Para hacer el cambio de imagen a matriz solo debe declararse: Matcopia(imagenOriginal). A partir de estecambio todas las operaciones siguientes se hacen sobre la matriz copia, y el resultado se muestra tambien enuna matriz, usando el comando: imashow(”Tituloventana”, imagen)

21

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

2.6. Split and Merge

El objetivo de este algoritmo es asociar regiones usando la varianza de los datos como factor determinantepara su asosciacion. Split and Merge se puede definir en los siguientes pasos:

Se divide (No literalmente, solo se consideran sus dimensioneas) la imagen en cuatro partes, como en latabla 5.

Se analizan las posibles uniones de las regiones: 1 y 2, 2 con 3, 3 con 4 o 4 y 1. Si un par de regiones seunen ya no pueden estudiarse en el mismo ciclo. Se revisan los vecinos aunque esten fuera de la regionpadre.

Se subdivide cada region obtenida y nuevamente se analizan las posibilidades de union con los vecinosde su misma region. La subdivision se hace en maximo 1/16 del alto y ancho total de la imagen.

Se repite la operacion para cada una de las subregiones obtenidas.

Cuadro 5: Zonas de la imagen

1 2

4 3

Para la implementacion de este algoritmo se usan principalmente dos funciones, que se explican a conti-nuacion:

intdivision(IplImageimagen, intInicioX, intInicioY ): Esta funcion tiene como parametros de entradauna region de la imagen (Almacenada en una variable de tipo IplImage), su punto de inicio en X, y enY. Asignando regiones de interes a cada par de las posibles uniones de las subregiones adyacentes de laregion dada se calculan las desviaciones estandar de cada una de esas combanciones y se busca la mınimade ellas. Si es menor que el parametro de evaluacion (20 para el caso) se dividen las regiones etiquetandocada subregion con un valor distinto. Las subregiones no se marcan en la imagen original sino en unamatriz auxiliar que se llama etiquetas al interior del codigo. Algunas de las funciones nuevas empleadaspara la construccion de este algoritmo se enlistan a continuacion:

• cvSetImageROI = (imagen, cvRect(inicioX, inicioY, ancho, alto));: Con esta funcion defino unarea de interes sobre la imagen de entrada, partiendo de dos puntos de inicio y un ancho y alto dela region de interes.

• evaluar(IplImageROI): Esta funcion devuelve la desviacion estandar de la region suministrada;para su calculo se emplea cvAvgSdv(copiaROI,&prom,&desv) que hace los calculos para la regionde interes que se defina, aunque la IplImage sigue conteniendo la totalidad de la informacion de laimagen.

• cvMinMaxLoc(desviaciones,&min, 0,&ubicaMenor): Esta funcion halla el mınimo y maximode una matriz y la ubicacion de ese valor, en esta caso el deseado es el mınimo, para a par-tir de este hacer las divisiones de la region. Si la mınima de las desviaciones de las combina-ciones de las regiones es menor a 20 se procede a etiquetar diferenciadamente cada subregion,mediante el uso de los rangos de columnas y filas que se pueden delimitar en las matrices ti-po Mat, por ejemplo: etiqueta.rowRange(inicioY, inicioY +(alto/2)).colRange(inicioX, inicioX+ancho).setTo(iteraciones);

22

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

Existiran entonces varias formas en que se pueden etiquetar las imagenes de manera que no se revisen lasareas que ya fueron asociadas con otras, para diferenciarlas la funcion Division(...) construida retornaun valor entero que representa cada uno de los casos que son:

• 1 si se mezclan las regiones 1 y 2; y 3 y 4 permanecen separadas.

• 2 si se mezclan las regiones 2 y 3; y 4 y 1 permanecen separadas.

• 3 si se mezclan las regiones 3 y 4; y 1 y 2 permanecen separadas.

• 4 si se mezclan las regiones 4 y 1; y 2 y 3 permanecen separadas.

Si el valor retornado por division es cero quiere decir que no se asocio ninguna de las regiones, es decir quese obtuvieron cuatro subregiones de la originalmente enviada. Y si el valor retornado es 5, el algoritmointerpretara que la region ya es homogenea (o sus dos subregiones obtenidas ya son homogeneas) y norequiere subdivisiones.

voidsudivide(IplImage ∗ROI, intinicioX, intinicioY, intuniones): Esta funcion recursiva, es la que lla-ma a la funcion dividir y asigna las secuencias de las divisiones. Sus parametros de entrada son la regionde interes de la imagen, los puntos de origen, y en uniones se debe indicar el dato entregado por divisionesal enviarle la misma ROI que se envıa a subdivide. La funcion de acuerdo al valor de uniones seleccionaque tipo de subregiones tiene la region en estudio y de esta manera define los pasos como se dividiranen mas subregiones.El analisis se da de manera recursiva, ya que si la subseccion que se analiza al enviarse a la funcion dividirtiene como respuesta un valor menor a 5 (el cual indica que la region o subregiones son homogeneas) sevuelve a llamar a la funcion subdivide, de manera que entra a analizar un hijo (si su subdivision es hastade un nivel 2 es decir hasta de 1/16 del ancho de la imagen original) de la subseccion que se estudia. Siel caso es que ya no se puede subdividir mas la subseccion que se estudia, el algoritmo llama a subdivideesta vez para que analice el ”hermano”de la subregion; y en el caso de que ya se hayan analizado todaslas subregiones de la ROI ingresada en la funcion, esta llama a subdivide ingresando como region deinteres la region ”padre”de la que se esta estudiando.

El funcionamiento de este procedimiento se basa en el empleo de un arreglo denominado arbol, queguarda la posicion en X, la posicion en Y, el nivel de division, el tipo de uniones en las subregionesque contiene (1, 2, 3 o 4 como se explico en la funcion division) y el numero de la subregion que seesta evaluando (este valor flutuara de acuerdo a si la subregion puede dividirse 4 o 2 veces mas ). Deesta manera se puede acceder a los subregiones hermanas o padres de las regiones en estudio.

La dificultad en el desarrollo de esta funcion fue por el acceso a los padres y hermanos, porque en suconstruccion se evidencio tardıamente que aunque entre una imagen con una ROI definida y esta secopie, toda su informacion se transfiere a la nueva imagen, por lo cual al eliminar la ROI se obtiene lala totalidad de la imagen nuevamente, lo que dificulto la asignacion sucesiva de las subregiones.

unir(cvMatparaUnir, inicioX, inicioY ) Esta funcion se encarga de analizar los vecinos superiores y deizquierda de una imagen que entra a la funcion division, su logica se basa en el empleo de etiquetas que seencuentren arriba o la izquierda de la imagen en estudio. Si dichas etiquetas son inferiores a la etiqueta dela region actual se entendera que pertenecen a regiones ya divididas, y mediante ciclos que recorren todala matriz de etiquetas almacenadas hasta ese momento se buscan la etiqueta superior e inferior definidasy se construyen mascaras superiores y de izquierda con ellas. Una vez halladas esa mascaras se suman ala mascara que entrega el dato de entrada paraUnir y se aplica cvAvgSdv(original, 0,&desv,Mascara)para calcular la desviacion estandar del area definida por la mascara. Si esta desviacion es menor a unrango dado (20 en el caso de estudio) se asocian las regiones contenidas en las mascara.

23

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

La conjugacion de las funciones descritas conforman el algoritmo de Split and Merge definido. Como seexplico este algoritmo no transforma la imagen original, mas la etiqueta con valores distintos de acuerdo a lasimilitud de sus regiones. La visalizacion de este resultado, se planteo, creando un vector donde se almacenacende colores aleatorios para cada etiqueta, de manera que cada pixel buscase en la posicion correspondiente ala etiqueta el color y ası se pintan todos los pıxeles de la misma etiqueta con el mismo color. Las figura 32muestra la imagen en estudio y el resultado obtenido, para una sbdivision de hasta 1/16 del ancho y altode la imagen original. La parte en gris muestra las etiquetas con sus valores originales, mas los cambios sonimperceptibles dado que en regiones adyacentes se asignan etiquetas seguidas, por lo que se usa el color parauna mejor visualizacion, esto se observa en la figura ??, en la cual se incluye una suma de las mitades (paracada pıxel) de la imagen original con la imagen de etiquetas visualizadas en color.

Es de mencionar que el algoritmo funciono adecuadamente hasta la fase de revision y division, dentro decada region y subregion asocio o dividio las areas segun el calculo de desviacion, mas cuando las areas quese dividıan se comparaban con los vecinos fuera de su propia region (mediante la funcion unir) los resultadosno fueron los deseados, se unieron las regiones mas de lo debido, tal vez debido a que la evaluacion de lasdesviaciones no se estaba haciendo en el area deseada.

Figura 32: Resultado de las etiquetas construidas con Split and Merge

Figura 33: Visualizacion de la aplicacion del Split and Merge y su combinacion con la imagen a color original

24

Universidad Nacional De ColombiaFacultad De IngenierıaDepartamento De Ingenierıa Mecanica y Mecatronica

Inteligencia Artificial2013-I

3. Conclusiones

Si la imagen al binarizarse no permite una clara definicion de limites, o existe mucho ruido en la imagenes mejor encontrar los contornos a partir de una imagen con filtro canny aplicado

Si una imagen presenta una textura, esta se vera reflejada como una concentarcion de contornos, quedefinene dicha textura.

Se recomienda filltrar la imagen en un comienzo para que no se trabaje con los bordes de ruido de sernecesario.

segun el origen de la semilla, al rellenar una imagen segun sus vecinos y el rango selecto se podra separauna imagen de su fondo, asi como si estos parametros no se escogen correctamente se puede perder laimagen

Es vital comprender la diferenciacion que hace Opencv a la hora de tratar las imagenes con variables detipo IplImage, CvMat o Mat, que si bien contienen la misma informacion no permiten que se acceda aella de la misma manera, ni que se apliquen las mismas operaciones; por lo que sera practico el empleode uno u otro tipo de variable de acuerdo a los requerimientos de manipulacion de la imagen.

Referencias

[1] Bradsky Gary, Kaehler Adrian, ((Learning OpenCV)), O’Really, United States of America, September 2008.

[2] Garcıa Mateos, Gines. Procesamiento Audiovisual Programa de teorıa. Departamento de informatica ySistemas, Universidad de Murcia. Disponible en: http : //www.slideserve.com/miakoda/procesamiento−audiovisual − programa− de− teor − a Fecha de consulta: Mayo de 2013.

25