PID Operaciones en Imágenes Binarias Representadas por IBB UNIVERSIDAD DE SEVILLA Escuela Técnica Superior Ing. Informática Procesamiento de Imágenes Digitales Operaciones sobre imágenes binarias representadas por árboles binarios basados en interpolación. Ignacio Guajardo-F. Caballos José Miguel García Lluch 1 PID Operaciones en Imágenes Binarias Representadas por IBB ÍNDICE 1. 2. 3. 4. 5. INTRODUCCIÓN................pag.3 REPRESENTACIÓN IBB....pag.4 OPERACIONES...................pag.5 APLICACIÓN......................pag.11 REFERENCIAS...................pag.14 2 PID Operaciones en Imágenes Binarias Representadas por IBB INTRODUCCIÓN Existen diferentes técnicas de representación de imágenes binarias, que se agrupan en tres tipos: árbol, cadena y conjunto de códigos. Dentro del conjunto de códigos tenemos: Linear Quadtree (LQ), Interpolation – based bintree (IBB) y Minimized Boolean Function (MFB). Este trabajo se centra en la representación IBB y en operaciones sobre imágenes representadas de esta forma. Las distintas operaciones son: • • • • • • Cálculo del número de pixeles negros. Cálculo de centroide. Cálculo del código ibb de un bloque rectangular Traslación. Rotación. Reflexión. 3 PID Operaciones en Imágenes Binarias Representadas por IBB REPRESENTACIÓN IBB La representación IBB consiste en un conjunto de códigos. Para obtener estos códigos primero representamos la imagen binaria mediante un árbol binario. Para obtener el árbol binario de una imagen binaria (2^n x 2^n) primero se divide verticalmente la imagen en dos partes iguales. Luego cada parte, si no es totalmente negra o blanca, se divide horizontalmente. La imagen se divide así sucesivamente hasta encontrar partes totalmente negras o blancas. Estas partes totalmente negras o blancas forman las hojas del árbol. Para obtener la representación IBB de la imagen calculamos un código a cada hoja negra de árbol. Cada hoja negra del árbol representa un bloque en la imagen. Para obtener su código necesitamos las coordenadas inferior izquierda del bloque en la imagen (i, j) y el nivel (l) en el árbol de la hoja que lo representa. El código binario (Q) de un bloque se obtiene de la siguiente forma: • Pasamos las coordenadas inferior izquierda del bloque a binario. i = Σn-1(ik * 2k) j = Σn-1(jk * 2k) • Obtenemos “S” y lo pasamos a binario. S= 22n – 2(2n – l) S= Σ2n-1(sk * 2k) • Obtenemos el código Q= Σn-1(ik * 24k+3) + Σn-1(jk * 24k+1) + Σ2n-1(sk * 22k) El conjunto códigos de todas las hojas negras es la representación IBB de la imagen. 4 PID Operaciones en Imágenes Binarias Representadas por IBB OPERACIONES Las distintas operaciones que hemos implementado en la aplicación son las siguientes. 1. 2. 3. 4. 5. Cálculo del número de pixeles negros. Cálculo de centroide. Traslación. Rotación. Reflexión. Las técnicas computaciones para realizar estas operaciones están descritas a continuación. Estas técnicas u operaciones se aplican individualmente a cada bloque rectangular de la imagen. Estas operaciones se puede extender a una imagen completa, si analizamos bloque a bloque toda la imagen. 1. Cálculo del número de pixeles negros. Dada una imagen binaria (2^n x 2^n) cuya representación IBB sea Qi con i=1,2,...,N , el número de pixeles negros de la imagen se calcula de la siguiente forma: Del código de cada bloque (Qi) se obtiene el nivel (l) en el árbol de la hoja que lo representa. Qi = Σ4n-1(qk * 2k) Si = Σ(qk * 2k div 2) donde k={0,1,...,4k – 1} y k mod 2=0 y “div” es la división entera. li = 2n – log2(22n – Si) El número de pixeles negros de ese bloque se obtiene mediante la siguiente expresión: num_pixeles_negros = 2(2n - l) Luego para obtener el número de pixeles negros de una imagen hay que obtener el número de pixeles negros de los bloques que la forman. 5 PID Operaciones en Imágenes Binarias Representadas por IBB 2. Cálculo del centroide Dada una imagen binaria (2^n x 2^n) cuya representación IBB sea Qi con i=1,2,...,N , el centroide de la imagen se calcula de la siguiente forma: De cada código Qi se obtienen la coordenada inferior izquierda (xll,yll) del bloque que representa y el nivel (l) de la hoja que lo representa en el árbol. Qi = Σ4n-1(qk * 2k) Si = Σ(qk * 2k div 2) donde k={0,1,...,4k – 1} y k mod 2=0 y “div” es la división entera. li = 2n – log2(22n – Si) xll = Σ(qk * 2k div 4) donde 4n ≥ k > 0 y k mod 4 = 3 yll = Σ(qk * 2k div 4) donde (4n – 1) ≥ k > 0 y k mod 4 = 1 Si li es par El ancho (w) del bloque es: w = 2(n - l/2) El alto (h) del bloque es: h = w Si li es impar El ancho (w) del bloque es: w = 2(n – (l + 1)/2) El alto (h) del bloque es: h = 2w Por último la coordenada (xc,yc) del centroide se obtiene de la siguiente forma: x = x + {wxll + w(w-1)/2}h y = y + {hyll + h (h-1)/2}w xc = x / num_pixeles_negros_imagen yc = y / num_pixeles_negros_imagen 6 PID Operaciones en Imágenes Binarias Representadas por IBB 3. Cálculo los códigos ibb de un bloque rectangular Para calcular los códigos ibb de un bloque rectangular no es indispensable conocer la representación en árbol de la imagen. Basta con conocer su coordenada inferior izquierda (xll, yll), su anchura ‘w’ y su altura ‘h’. Una vez conocidas las características del bloque, se analizan, mediante un sencillo algoritmo, averiguando por cuantos bloques básicos está formado (un bloque se considera básico si es hoja del árbol que representa la imagen). Conocidos todos los bloques básicos por los que está constituido el bloque rectangular inicial, calcular los códigos ibb de éste bloque consistirá en obtener el código ibb de cada bloque básico. Ejemplo: Disponemos de una imagen binaria de 16 x 16. Queremos conocer los códigos del bloque rectangular superior: la cabeza cuadrada del individuo. El algoritmo es capaz de encontrar los 4 bloque básicos por los que está formado la cabeza (cada uno coloreado de un color). Luego se calculan los códigos de los 4 bloques, obteniendo los códigos del bloque original. 7 PID Operaciones en Imágenes Binarias Representadas por IBB 4. Traslación de un bloque Para realizar una traslación de un bloque necesitamos conocer su coordenada inferior izquierda (xll,yll), su anchura ‘w’ y altura ‘h’, además de las filas ‘f’ y columnas ‘c’ a trasladar. Las coordenadas del bloque resultante, se obtienen de la siguiente forma: xll’ = xll + c yll’ = yll + f Teniendo en cuenta que las nuevas coordenadas deben de estar dentro del dominio de la imagen (2^n x 2^n). La altura y la anchura del bloque resultante serán las mismas. Para calcular el código ibb del nuevo bloque resultante se le aplica el algoritmo descrito en el apartado 3 Ejemplo: Vamos a trasladar la imagen situada a la izquierda. La traslación consistirá en dos columnas (c =2) y una fila (f =1) Imagen Original Imagen Destino (c=2, f=1) 8 PID Operaciones en Imágenes Binarias Representadas por IBB 5. Rotación de un bloque Los distinto ángulos de rotación que se pueden realizar son 90º, 180º y 270º Para realizar la rotación de un bloque necesitamos conocer sus características (xll, yll, w y h). Una vez conocidas, las características del bloque resultante se calculan de la siguiente forma: Rotación de 90º xll’ = 2^n – yll – h yll’ = xll W’ = h h’ = w Rotación de 180º xll’ = 2^n – xll – w yll’ = 2^n – yll –h w’ = w h’ = h Rotación de 270º xll’ = yll yll’ = 2^n –xll –w w’ = h h’ = w Conocidas la características del bloque resultante, para calcular su código ibb, únicamente hay que aplicarle el algoritmo del apdo. 3 Ejemplo. Vamos a rotar una imagen de ejemplo (una F y un cuadrado) 180º Imagen Original Imagen Destino (180º rotada) 9 PID Operaciones en Imágenes Binarias Representadas por IBB 6. Reflexión de un bloque La reflexión de un bloque se puede realizar respecto del eje de ordenadas, el eje de abcisas, la diagonal principal y la secundaria . Igual que en las operaciones anteriores, para realizar la reflexión de un bloque necesitamos conocer sus características (xll, yll, w y h). Una vez conocidas, las características del bloque resultante se calculan de la siguiente forma: Eje de abcisas Eje de ordendas Diag. Principal Diag. Secundaria xll’ = xll yll’ = 2^n – yll - h w’ = w h’ = h xll’ = 2^n – xll - w yll’ = yll w’ = w h’ = h xll’ = yll yll = xll w’ = h h’ = w xll’ = 2^n –yll – h yll = 2^n – xll – w w’ = h h’ = w Conocidas la características del bloque resultante, para calcular su código ibb, únicamente hay que aplicarle el algoritmo del apdo. 3 Ejemplo. Vamos a rotar un bloque rectangular respecto de la diagonal primaria. Datos requeridos: coordenada inferior izquierda del bloque (13,2), su anchura (w = 2) y su altura (h =6). Imagen Original Imagen Destino (diagonal primaria) 10 PID Operaciones en Imágenes Binarias Representadas por IBB APLICACIÓN Para implementar esta aplicación hemos escogido el lenguaje de programación Visual Basic 6.0. Manual de Usuario • Para cargar el programa ejecutar: ProyectoIBB.exe • Una vez cargada la aplicación, en la pantalla principal se presenta una malla de 16 x 16 y las distintas operaciones que se pueden realizar. • Sobre la malla de representación se puede tanto dibujar una imagen (con el ratón) como cargar tres imágenes de ejemplo. • Las operaciones se dividen en operaciones sobre bloque, que requieren la introducción de las correctas características del mismo; y operaciones sobre imágenes. • Para finalizar la aplicación pulsar el botón ‘salir’ • Se recomienda utilizar una configuración de pantalla 600x800 A continuación vamos a presentar sucesivas pantallas de la aplicación a modo de ejemplo Ejemplo 1. La aplicación se carga. Aparece la pantalla de inicio. Se pueden apreciar las distintas opciones que presenta la aplicación 11 PID Operaciones en Imágenes Binarias Representadas por IBB Ejemplo 2. Elegimos una operación para bloques: Traslación. Nos aparece un cuadro de diálogo para especificar las características de dicho bloque. La aplicación comprobará la veracidad de las mismas. Ejemplo 3.Resultado de la traslación de bloque. Podemos observar el bloque original situado a la izquierda y el bloque desplazado 3 columnas. 12 PID Operaciones en Imágenes Binarias Representadas por IBB Ejemplo 4. Escogemos ahora una operación sobre imágenes: Calcular el centroide. La aplicación muestra una nueva ventana con la imagen original, los códigos que la representan y el cálculo del centroide (en rojo). A la derecha se puede leer una simplificada información sobre la operación. Ejemplo 5. Realizamos otra operación sobre imágenes: Reflexión. Podemos elegir 4 ejes de reflexión. Elegimos sobre el eje de ordenadas. 13 PID Operaciones en Imágenes Binarias Representadas por IBB Ejemplo 6. La aplicación muestra tanto la imagen original como la imagen destino. Además se pueden visualizar los códigos que representan a las mismas. REFERENCIAS Operations on binary images represented by interpolation based bintrees: Debrajan Sakar, Nishit Gupta. 1998 14