Xxxxxxxxx

Solo disponible en BuenasTareas
  • Páginas : 5 (1175 palabras )
  • Descarga(s) : 0
  • Publicado : 25 de noviembre de 2011
Leer documento completo
Vista previa del texto
SEGMENTACIÓN POR COLOR

Una manera de revisar si un píxel con componentes de color R,G,B pertenece a una clase es usar una comparación similar a esta:

if ((R>=Rmin && R<Rmax) && (G>=Gmin && G<Gmax) && (B>=Bmin && B<Bmax))

Esta manera es bastante ineficiente, ya que implica 6 comparaciones para determinar si un píxel pertenece ala clase del color buscado (Martínez Gómez, 2004).

Un algoritmo eficiente es por descomposición booleana. Una clase es representada como el producto de tres funciones, cada una sobre los ejes del espacio de color. Es decir, el píxel pertenece a la clase, si los valores de éste se encuentran dentro de los rangos (especificados por la función) en los tres componentes.

La descomposición delrango de valores es almacenada en vectores (R,G,Bvector), un elemento del vector para cada rango posible de la componente del espacio de color. De esta manera la pertenencia a una clase puede ser evaluada con una operación AND de los elementos de cada vector indicados por los valores del píxel a evaluar.

Lo primero que debemos hacer es decomponer booleanamente (0,1s) el color que deseamos y loharemos discretizando el espacio de color RGB en m niveles para cada componente R,G,B

Por ejemplo vamos a discretizar un color Naranja que varía en los siguientes rangos.
Naranja
R: Rojo: 200-255
G: Verde: 105-140
B: Azul: 0 – 60

Discretizar el espacio de color en 10 niveles. Que es esto?

El rango de intensidades, que para nuestras imágenes son de 0-255, lo dividimos en 10 rangosiguales.

Y observando arriba los rangos del naranja, vemos que la componente roja del naranja cae entre los niveles 7, 8, 9, el verde entre los niveles 4 y 5, y el azul entre los niveles 0, 1 y 2. De aquí el vector

Rvector[] = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1}
Gvector[] = {0, 0, 0, 0, 1, 1, 0, 0, 0, 0}
Bvector[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0}

Luego hacemos lo mismo para toda la imagen, paracada píxel I(i,j) lo discretizamos a 1 de 10 niveles posibles, por ejemplo el píxel I(100,100) tiene valores R=100, G=128, B=200, al discretizarlo quedara con R=3,G=5, B=7, para verificar que este píxel pertenece a la clase naranja se evalúa la expresión Rvector [3]AND Gvector[5] AND Bvector[7], o sea una AND entre 0, 1 y 0 el resultado es 0, lo que quiere decir que el píxel I(100,100) no hace partedel color que queremos segmentar (Naranja). Esto es cierto porque el píxel con los anteriores valores es un color Azul. Hagamos otro ejemplo. Supongamos que el píxel I(120, 110) tiene valores R=215, G=128, B=30, al discretizarlo quedara con R=8,G=5, B=1, y si evaluamos la expresión Rvector [8]AND Gvector[5] AND Bvector[1], o sea una AND entre 1, 1 y 1 el resultado es 1, lo que quiere decir queel píxel I(120,110) hace parte del color que queremos segmentar (Naranja). Esto es cierto porque el píxel con los anteriores valores es un color Naranja.

Esta operación es más rápida por que un AND tiene significativamente un menor costo que una comparación de enteros en procesadores modernos. Una las mayores ventajas de este enfoque es que puede determinar la pertenencia de un píxel enmúltiples clases simultáneamente. Explotando el paralelismo en la operación AND de números enteros podemos determinar la pertenencia de varias clases en una sola operación.

Por ejemplo vamos a discretizar un color Azul que varía en los siguientes rangos.

Azul
R: Rojo: 0 -50
G: Verde: 0 - 20
B: Azul: 210 – 255

Discretizando tenemos:

Rvector[] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0}
Gvector[] ={1, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Bvector[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1}

En lugar de tener un conjunto separado de vectores por cada color podemos combinar los vectores usando las posiciones de los bits en los elementos del vector para representar los valores de cada color. Por ejemplo, combinando el naranja y azul de los ejemplos anteriores
tenemos:

Rvector[] = {10, 10, 00, 00, 00, 00,...
tracking img