Representación mediante el borde de la imagen

 

 

Esta clase de representacióones hace uso del hecho de que cada uno de los conjuntos conexos de la imagen está determinados mediante la especificación de sus bordes.

 

El borde S’ de un conjunto S es el conjunto de puntos de S que sonadyacentes a los puntos del complementario de S. Podemos considerar que S’ consiste en un conjunto de curvas cerradas; cada una de estas curvas contiene los puntos que pertenecen a una componente conexa concreta de S y son adyacentes a una componente conexo concreta del complementario de S.

 

Una curva del borde de una imagen se determina especificando un punto de comienzo y una secuencia de movimientos alrededor del borde.

 

Moviéndose de un punto a otro alrededor de un borde, siempre vamos de un punto hacia uno de sus ocho vecinos.

 

Numeremos a los vecinos como sigue:

3

2

1

4

 

0

5

6

7

(mnemotécnico: el vecino i está en dirección 45iº, medido en dirección en el sentido contrario al de las agujas del reloj desde el eje positivo x). Así cada movimiento se define mediante uno de los dígitos 0, 1,..., 7, i.e., por un dígito octal.

 

Por ejemplo, la secuencia de movimientos utilizada en la siguiente figura se corresponde con 0766233:

 

 Una secuencia de movimientos representada por dígitos octales de esta forma se denomina código de cadenas (chain code). Un borde se define así dando las coordenadas de un punto de inicio junto con un código de cadenas representando una secuencia de movimientos.

 

Si seguimos las fisuras alrededor de un borde, en cada movimiento vamos tanto a la izquierda como a la derecha, arriba o abajo; si denotamos la dirección 90iº por i, estos movimientos pueden ser representados por una secuencia de números de dos bits (0,1,2,3). 

 

 

1

 

2

 

0

 

3

 

 

Llamaremos a esta representación un código de fisuras (crack code). Un borde se especifica dando las coordenadas de una fisura de inicio junto con un código de fisuras.

 

Por ejemplo, el código de fisuras de la siguiente figura es 00303332112121.

 

 

Cada movimiento en un código de fisuras es representado por un número de 2 bits, mientras que los movimientos en el código de cadenas requieren números de 3 bits; pero el número de movimientos en un código de fisuras es algo mayor que en el código de cadenas, puesto que pueden ser necesarios varios movimientos para atravesar las fisuras alrededor de un único punto.

 

Observemos que si hay muchas componentes conexas pequeñas, las representaciones mediante código de cadenas no serían económicas.

 

Para cualquier código de cadena dado, podemos construir un código de cadena diferencial cuyos valores representan sucesivos cambios en la dirección. por ejemplo, el 0 representa la no existencia de giro, ±1 representa 45º de giro a la derecha o a la izquierda, ± 2 y ± 3 representan, de forma similar, giros de 90º y 135º, y 4 representa un giro de 180º. Así el código de cadena diferencial, como el código de cadena, tiene ocho posibles valores y necesita tres bits por movimiento. Sin embargo, los valores no son asimismo semejantes, e.g., 0 y 1 serían muy comunes, mientras que 4 es raro. Un borde es determinado mediante la especificación de las coordenadas del punto de inicio, la dirección inicial y el código de cadena diferencial. El caso del código de fisura diferencial es análogo; aquí hay sólo tres posibles valores diferenciales, 0º y ± 90º.

 

Codificación en planos de bits

Observemos que la representación mediante el borde de la imagen sólo puede hacerse si la imagen es binaria. Una forma de usar esta representación en imágenes en niveles de gris sin perder información, sería codificando la imagen en planos de bits.

Un método sencillo para la descomposición de una imagen en escala de M niveles de grises en un conjunto de imágenes binarias consiste en separar los M dígitos de cada píxel en M imágenes de 1 bit cada píxel (planos de bits).

La gran desventaja de este método es que pequeñas variaciones en los niveles de gris tienen un impacto significativo en la complejidad de los planos de bits. Por ejemplo, comparemos un píxel de intensidad 127 (0111111) y otro de 128 (1000000).

Un método de descomposición alternativo (que reduce el efecto de pequeñas variaciones de niveles de gris) consiste en representar la imagen mediante un código de Gray de M bits.

Pasar un número de binario a código de Gray, es como sigue:

donde      gi=ai+ai+1       si i<m-1       y    gm-1=am-1

 

Veamos un ejemplo en la tabla siguiente:

Número Código binario Código Gray
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100

Con esta codificación en plano de bits, se puede usar la representación mediante el borde de la imagen para codificar imágenes en escala de grises.

 

 

Para practicar:

            Obs.: El píxel que se encuentra más arriba-izquierda tiene de coordenadas (0,0)

            Los movimientos viene dados por la regla:

 

3

 

0

 

2

 

1

 

            Obs.: El píxel que se encuentra más arriba-izquierda tiene de coordenadas (1,1)

            Los movimientos viene dados por la regla:

 

3

 

2

 

0

 

1