Está en la página 1de 4

Segmentacin de color

Universidad Nacional de Colombia


Diego Mauricio Rivera Pinzn
dmriverap@unal.edu.co
Visin de maquina

Resumen
Cada pixel podemos representarlo como la
informacin de tres canales diferentes uno con la
informacin relacionada con el rojo, otro con el
verde y otro con el azul. Considerando lo anterior,
podemos representar cada pixel como un vector
con 3 componentes RGB y representarlo en el
espacio 3D (figura1). La intencin al segmentar en
color es separar objetos cuyos patrn de color sea
uniforme, es decir aislar regiones que tengan el
mismo color, para eso vamos a utilizar un
algoritmo muy sencillo pero que en ciertas
circunstancias nos permite buenos resultados.

En este documento se pretende mostrar cmo podemos


segmentar imgenes en MatLab a partir de los colores
de los objetos, en particular en el espacio RGB.
Primero se har una introduccin a los conceptos
necesarios y luego se aplicar la segmentacin a
imgenes reales y sintticas.
Palabras clave: Segmentacin de color, RGB.

I Introduccin
Una de las labores de gran importancia en el
procesamiento de imgenes es la segmentacin.
Debido a que un objeto puede ser caracterizado
por sus propiedades de color, textura y forma,
podemos usar al color como elemento
discriminante entre objetos para realizar una
segmentacin de escenas naturales o en imgenes
artificiales

Si queremos encontrar un color presente en una


imagen basta con revisar en cuales pixeles se
hallan tambin las componentes de color que
utilizamos como patrn. Al hacer esto nos
encontramos con que aparece en muy pocos
lugares un valor particular ya que la iluminacin y
el tipo de textura hacen que un color no este
esparcido uniformemente, para solucionar este
inconveniente vamos a usar una ventana que nos
d un margen de tolerancia con respecto al color
que utilicemos como patrn (figura 2). Por
ejemplo, si estamos interesados en encontrar el
color especifico R=200, G=150 y B=100, vamos a
buscar en la imagen todos los colores que estn
dentro de un margen de tolerancia T, es decir
vamos a buscar en el componente de color rojo un
intervalo de (200-T) < R < (200+T), para el verde
buscamos en (150-T) < G < (150+T), y para el
azul (100-T) < B < (100+T), si T fuera 10, el
intervalo para el rojo seria 190< R<210 y as con
todos los dems.

Fig. 1, Representacin 3D en el espacio para


RGB

Lo primero que tenemos que hacer es cargar la


imagen en el Workspace, tenga en cuenta que debe
dar la ruta completa de la imagen si sta no se
encuentra en la misma carpeta en la que est
trabajando MatLab (current directory). Despus
tenemos que definir dos cosas, primero la
tolerancia y segundo que color en particular
estamos buscando. Para la tolerancia T vamos a
escoger un valor entre 0 y 255. Si tomamos T=0,
quiere decir que estamos buscando un color en
particular sin tener en cuenta la degradacin que
pueda darse debido a las fuentes de luz o a las
texturas, si tomamos un valor muy alto,
prcticamente estarn pasando todos los colores
por lo que la segmentacin podra dar malos
resultados. Para escoger este valor lo recomendado
es hacer un seguimiento emprico al mtodo hasta
que encuentre resultados cercanos a lo que busca.
Con respecto al pixel, vamos a obtener la
informacin directamente de la imagen,
apoyndonos en la instruccin de MatLab
impixel, esta instruccin nos permite tomar la
informacin de los componentes RGB de una
imagen que este siendo visualizada. El cdigo para
iniciar se presenta a continuacin.

Fig. 2, En la representacin 3D en el espacio


para RGB, tomamos solo una pequea parte de
cubo total.

II Desarrollo
Para explicar el procedimiento vamos a
emplear dos imgenes, una artificial mostrada en
las figuras 3 y otra natural mostrada en la figura 4.

im=imread('lain.jpg');
%definimos la tolerancia
tol=30;
%
%creamos una figura para visualizar las
%imgenes
figure
subplot(1,2,1)
imshow(im)
%
%tomamos una muestra de color de la imagen que
%est siendo mostrada
pix=impixel;
%
%definimos los colores de referencia
colrefR=double(pix(1,1));
colrefG=double(pix(1,2));
colrefB=double(pix(1,3));

Fig. 3, Imagen lain.jpg

Una vez concluido lo anterior empezamos la


segmentacin buscando los colores que estn
dentro del intervalo definido por la informacin
del pixel de muestra y la tolerancia que
escogimos. Para esto utilizamos las siguientes
instrucciones.
%Encontramos los colores dentro del intervalo
R=im(:,:,1)>=(colrefR-tol)&im(:,:,1)<=(colrefR+tol);
G=im(:,:,2)>=(colrefG-tol)&im(:,:,2)<=(colrefG+tol);
B=im(:,:,3)>=(colrefB-tol)&im(:,:,3)<=(colrefB+tol);
%el resultado es una matriz binaria con 1 donde est
el color buscado y 0 donde no
t=R&G&B;

Fig. 4, Imagen chao.jpg

Terminamos el programa combinando la


imagen original con los resultados obtenidos en la
segmentacin.
seg=t;
seg(:,:,2)=t;
seg(:,:,3)=t;
fin=uint8(double(seg).*double(im));
%graficamos la respuesta
subplot(1,2,2)
imshow(fin)

A continuacin se presenta una galera de


imgenes con los resultados obtenidos en lain.jpg
(figuras 5 a 8) y en chao.jpg (figuras 9 a 11). En
cada una se describe que tolerancia se utiliz en
cada caso. La figura 11 muestra resultados no
deseados por utilizar un margen de tolerancia muy
alto. Otro detalle a destacar es que en la mayora
de las imgenes obtenemos ruidos, estos se pueden
eliminar utilizando tcnicas de morfologa de
imgenes que se escapan a la intencin de este
documento.

Fig. 8, Segmentacin de
separar el cabello. T=20.

lain.jpg

buscando

Fig. 9, Segmentacin de chao.jpg buscando


separar los elementos azules de la ropa. T=40.

Fig. 5, Segmentacin de
separar el rostro. T=20.

lain.jpg

buscando

Fig. 10, Segmentacin de


separar las flores. T=20.

chao.jpg

buscando

Fig. 6, Segmentacin de lain.jpg buscando


separar en abrigo. T=20.

Fig. 7, Segmentacin
separar el moo. T=20.

de

lain.jpg

Fig. 11, Segmentacin de chao.jpg buscando


separar
las
flores,
observamos
malos
resultados
por
utilizar
un
margen
de
tolerancia muy alto. T=80.

buscando

Con lo visto anteriormente podemos implementar


una funcin en MatLab que nos permita segmentar
una imagen en color si le damos un pixel de
referencia y una tolerancia, es decir, el ancho de la
ventana de segmentacin.
function y=colorseg(im,tol,pix)
colrefR=double(pix(1,1));
colrefG=double(pix(1,2));
colrefB=double(pix(1,3));
R=im(:,:,1)>=(colrefRtol)&im(:,:,1)<=(colrefR+tol);
G=im(:,:,2)>=(colrefGtol)&im(:,:,2)<=(colrefG+tol);
B=im(:,:,3)>=(colrefBtol)&im(:,:,3)<=(colrefB+tol);
t=R&G&B;
seg=t;
seg(:,:,2)=t;
seg(:,:,3)=t;
y=uint8(double(seg).*double(im));

III conclusiones
En las imgenes de escenas naturales se
observa una gran cantidad de colores y de texturas,
por lo tanto, debemos buscar tcnicas de
segmentacin ms robustas para que las ligeras
variaciones de color entre pxeles no sean un
obstculo para segmentar completamente objetos
de inters. Hay que tener en cuenta que la
tolerancia que escojamos har que tengamos
resultados aceptables o indeseados. Para mejorar
el algoritmo se podra trabajar una tolerancia
independiente para cada componente de color.

Referencias
[1] Rafael C. Gonzlez y Richard E. Woods. Digital
Image Processing Using Matlab. Pearson Prentice
Hall. 2004
[2] Arturo de la Escalera. Visin por Computador:
Fundamentos y Mtodos. Prentice Hall. 2001.

También podría gustarte