You are on page 1of 14

Procesado de Imgenes en Color

Conversin entre espacios de color


Ejemplo 1. Conversin de RGB a HSI Leemos la imagen original, un cubo RGB sobre fondo blanco: >>rgb=imread('Fig0602(b)(RGB_color_cube).tif'); >>imshow(rgb); Obtenemos la imagen hsi: >>hsi=rgb2hsi(rgb); Obtenemos cada una de las bandas de la imagen HSI: >>H=hsi(:,:,1);S=hsi(:,:,2);I=hsi(:,:,3); >>figure,imshow(H); Mostramos la componente en H (tono): Existe una discontinuidad a lo largo de los 45 en el plano rojo del cubo. >>figure,imshow(H); Mostramos la componente en S (saturacin). Esta componente muestra valores progresivamente ms oscuros hacia el vrtice blanco del cubo RGB, indicando que los colores estn cada vez menos saturados a medida que se aproximan al blanco. >>figure,imshow(S); Mostramos la componente en I (intensidad). Cada pxel es el promedio de los pxeles correspondientes en la imagen RGB. El fondo de la imagen es blanco porque tambin lo es en la imagen original. El fondo es negro en las otras dos componentes porque el tono y la saturacin del blanco son cero. >>figure,imshow(S);

Transformaciones de color
La especificacin de transformaciones de color puede hacerse de forma interactiva mediante la manipulacin grfica de los puntos de control y la visualizacin en tiempo real de los resultados de aplicar la funcin de transformacin sobre las imgenes a procesar. La funcin ice (interactive color editing) hace precisamente esto. Su sintaxis es: g=ice('Property Name','Property Value',...) donde 'Property Name' y 'Property Value' deben aparecer por parejas, y los puntos suspensivos indican repeticiones del patrn de parejas. Nosotros usaremos las parejas: 'image' imagen de entrada RGB o monocroma para ser transformada

'space' El espacio de color de las componentes a modificar. Los valores posibles son 'rgb' (valor por defecto), 'cmy', 'hsi', 'hsv', 'ntsc' y 'ycbcr' Para manipular los puntos de control con el ratn, podemos usar las combinaciones:

Botn izquierdo: mueve el punto de control pulsando y arrastrando. MAYSCULAS+Botn izquierdo: Aade un punto de control. CONTROL+Botn izquierdo: Borra un punto de control

Las funciones que realizan las casillas de verificacin y botones en el interfaz grfico de ice son:

Smooth: interpolacin cbica para suavizar la curva. Clamp Ends: para forzar las pendientes inicial y final a 0 en la interpolacin cbica. Show PDF: muestra los histogramas de las componentes de la imagen Show CDF: muestra los histogramas acumulados (en vez de PDF) Map Image: muestra el mapeo de la imagen Map Bars: muestra la barra de mapeo.

Ejemplo 2: Realce de contraste en imgenes monocromas y color Leemos la imagen original monocroma >>f1=imread('Fig0615(a)(Aerial Original).tif.tif'); Llamamos a la modificacin interactiva de la imagen y modificamos su contraste aadiendo dos puntos de control, como se muestra en la siguiente figura >>ice('image',f1); Leemos la imagen original en color >>f1=imread('Fig0615(d)(Iris Original).tif.tif'); Llamamos a la modificacin interactiva de la imagen y modificamos su contraste aadiendo dos puntos de control, como se muestra en la siguiente figura >>g1=ice('image',f2);

Ejemplo 3: Transformaciones basadas en el histograma La ecualizacin del histograma es un proceso de transformacin de niveles de gris que busca producir imgenes monocromas con histogramas de intensidad uniforme. La funcin de transformacin apropiada es la funcin de distribucin acumulativa (CDF o histograma acumulado) de los niveles de gris de la imagen de entrada. Como las imgenes en color tienen mltiples componentes, la tcnica de niveles de gris ha de modificarse para manejar ms de una componente y su histograma asociado. Como podemos suponer, no es apropiado ecualizar las componentes de una imagen en color de forma independiente, pues el resultado sera un color errneo. Una aproximacin ms lgica es expandir las intensidades de manera uniforme, mientras que los colores (tono) permanecen sin modificar. Leemos la imagen original en hsi >>f=imread('Fig0618(a)(Caster Original).tif.tif');

Llamamos a la modificacin interactiva de la imagen, elegimos la componente de Intensidad, marcamos la casilla de histograma acumulado (CDF), e intentamos ajustar su intensidad a dicho histograma, aadiendo los puntos de control necesarios, como se muestra en la siguiente figura (c). Tambin podemos ver el histograma de cada componente eligiendo la componente HSI y marcando la casilla PDF (figura (e)) >>g1=ice('image',f,'space','hsi'); A continuacin vemos cmo se ha modificado la imagen, visualizando la componente de Saturacin y modificndola (figura (d)) y el histograma de su componente HSI (Figura (f)) >>ice('image',g1,'space','hsi');

Filtrado espacial de imgenes en color


Introduciremos el filtrado espacial sobre imgenes en color concentrndonos principalmente sobre imgenes RGB, pero los conceptos bsicos son aplicables tambin a otros modelos de color. Ilustraremos el procesado espacial de imgenes en color mediante dos ejemplos de filtrado lineal: suavizado y realce de bordes.

Suavizado de imgenes en color


Computacionalmente, suavizar una imagen RGB, fc, mediante un filtro espacial lineal, consiste en los siguientes pasos: 1. Extraccin de las 3 componentes de la imagen: >>fR=fc(:,:,1);fG=gc(:,:,2);fB=fc(:,:,3); 2. Filtrar cada componente indivudualmente. Por ejemplo, si w representa un filtro de suavizado generado mediante fspecial, suavizaramos la componente R de la imagen como sigue: >>fR_filtrada=imfilter(fR,w); y de forma similar las otras dos componentes 3. Reconstruccin de la imagen RGB filtrada: >>fc_filtrada=cat(3,fR_filtrada,fG_filtrada,fB_filtrada); Sin embargo, podemos realizar el filtrado lineal de imgenes RGB en Matlab usando la misma sintaxis usada para imgenes monocromas, permitindonos combinar los 3 pasos anteriores en uno: >>fc_filtrada=imfilter(fc,w); Ejemplo 4: Suavizado de imgenes en color A continuacin leeremos una imagen RGB y mostraremos sus 3 componentes. Transformaremos la imagen a HSI y tambin mostraremos sus componentes. Leemos la imagen original en RGB, extraemos sus componentes R, G y B, y las mostramos >>f=imread('Fig0619(a)(RGB_iris).tif'); >>fR=f(:,:,1);fG=f(:,:,2);fB=f(:,:,3);

>>imshow(fR); >>figure,imshow(fG); >>figure,imshow(fB);

Transformamos la imagen RGB a HSI, extraemos las componentes H, S e I, y las mostramos >>h=rgb2hsi(f); >>H=h(:,:,1);S=h(:,:,2);I=h(:,:,3); >>imshow(H); >>figure,imshow(S); >>figure,imshow(I);

Filtrado (suavizado) de f (figura (a)). Previamente creamos un filtro de suavizado de tamao 25x25. Este filtro es lo suficientemente grande como para provocar un grado significativo de emborronamiento, y lo hemos seleccionado para mostrar la diferencia entre filtrar en el espacio RGB e intentar obtener un resultado similar usando slo la componente de intensidad de la imagen despus de convertirla al espacio HSI. >>w=fspecial('average',25); >>ff1=imfilter(f,w,'replicate'); >>imshow(ff1); Filtrado (suavizado) de h (Figura (c)) >>hf1=imfilter(h,w,'replicate'); >>figure,imshow(hf1); Filtrado de componente I de h (Figura (b)). >>If=imfilter(I,w,'replicate'); >>hf2=cat(3,H,S,If); >>ff2=hsi2rgb(hf2); >>ff2=min(ff2,1); %imgenes RGB con valores en rango [0,1] >>figure,imshow(ff2);

Claramente, los resultados de los dos filtrados son diferentes. Por ejemplo, adems de que la imagen est menos emborronada, fijaos en el borde verde en la parte superior de la flor en la figura (b). La razn es simplemente que las componentes de tono y saturacin no son modificadas mientras que la variabilidad de valores de las componentes de intensidad se ha visto reducido significativamente con el proceso de suavizado. Sera lgico intentar realizar el suavizado sobre las 3 componentes usando el mismo filtro. Sin embargo, esto modificara la relacin relativa entre valores de tono y saturacin, produciendo colores sin sentido, como muestra la figura (c). En general, a medida que decrece el tamao de la mscara, las diferencias obtenidas por los dos mtodos tambin son menores.

Realce de bordes en imgenes en color


Realzar un imagen RGB mediante un filtro espacial lineal sigue el mismo procedimiento de la seccin previa, pero usando un filtro de realce en vez del filtro de suavizado. Consideraremos el realce mediante un filtro laplaciano. Ejemplo 5: Realce de imgenes en color A continuacin leeremos una imagen RGB y mostraremos sus 3 componentes. Transformaremos la imagen a HSI y tambin mostraremos sus componentes. Leemos la imagen original en RGB y le aplicamos un ligero filtro de suavizado de tamao 5x5 >>f=imread('Fig0619(a)(RGB_iris).tif'); >>w=fspecial('average',5); >>fb=imfilter(f,w,'replicate'); >>imshow(fb);

Para realzar esta imagen usaremos la mscara del filtro laplaciano >>lapmask=[1 1 1;1 -8 1;1 1 1]; A continuacin calculamos la imagen realzada, mostrando el resultado en el que se incrementa la nitidez de caractersticas como las gotas de agua, los vasos de las hojas, los centros amarillos de las flores, y la vegetacin verde del fondo. >>fen=imsubtract(fb,lapmask,'replicate'); >>imshow(fen);

Trabajar directamente sobre el espacio vectorial RGB


Existen casos en los que el procesamiento sobre planos de color individuales no es equivalente a trabajar directamente sobre el espacio vectorial RGB. En esta seccin, lo veremos sobre el caso de deteccin de bordes en color.

Deteccin de bordes en color mediante el gradiente


La funcin colorgrad implementa el gradiente en color para imgenes RGB: [VG,A,PPG]=colorgrad(f,T); donde f es la imagen RGB, T es un umbral opcional en el rango [0,1] (por defecto, toma el valor 0); VG es el vector gradiente RGB; A es la imagen de ngulos en radianes; y PPG es el gradiente formado mediante el sumatorio de los gradientes 2D de los planos individuales de color (generado con el

propsito de realizar comparaciones). Las salidas VG y PPG estn normalizadas al rango [0,1] y se umbralizan de modo que VG(x,y)=0 para valores menores o iguales que T y VG(x,y)=VG(x,y) en otro caso. Los mismos comentarios se aplican a PPG. Ejemplo 6: Deteccin de bordes en color mediante la funcin colorgrad Los objetivos de este ejemplo son: (1) ilustrar el uso de la funcin colorgrad y, (2) mostrar que el clculo del gradiente de una imagen en color combinando los gradientes de sus planos de color individuales es bastante diferente de calcular el gradiente directamente sobre el espacio vectorial RGB. Leemos las 3 componentes RGB de una imagen (Figuras (a), (b) y (c)) y las componemos para formar la imagen resultante (Figura (d)): >>fR=imread('Fig0624(a)(RGB2_red).tif'); >>imshow(fR); >>fG=imread('Fig0624(a)(RGB2_green).tif'); >>figure,imshow(fG); >>fB=imread('Fig0624(a)(RGB2_blue).tif'); >>figure,imshow(fB); >>f=cat(3,fR,fG,fB); >>figure,imshow(f); Calculamos el gradiente de f y mostramos los dos resultados (Figura (e) y (f)). La diferencia ms importante entre estos dos resultados es que el borde horizontal es mucho ms dbil en (f) que en (e). La razn es simple: los gradientes de los planos rojo y verde (figuras (a) y (b)) producen dos bordes verticales, mientras que el gradiente del plano azul produce un borde horizontal. Al sumar estos tres gradientes para formar PPG se produce un borde vertical con el doble de intensidad que el borde horizontal. >>[VG,A,PPG]=colorgrad(f); >>imshow(VG); >>figure,imshow(PPG);

En la prctica, cuando el inters est en la deteccin de bordes sin importar su precisin, las dos aproximaciones generalmente dan lugar a resultados comparables, como veremos para la siguiente imagen. Si calculamos el valor absoluto de la diferencia entre las dos imgenes y la escalamos al rango [0,1], podemos ver que la mxima diferencia absoluta es de 0.1648, que se traslada a 42 niveles de gris en el rango [0,255]. Sin embargo, la apariencia visual de ambos gradientes es similar, siendo la figura (b) algo ms brillante sobre algunos bordes. Para este tipo de anlisis, la aproximacin ms simple de calcular el borde de cada componente individual es aceptable. En otras circunstancias ser necesaria la aproximacin vectorial, mucho ms precisa. >>f=imread('Fig0619(a)(RGB_Iris).tif'); >>[VG,A,PPG]=colorgrad(f); >>imshow(VG); >>figure,imshow(PPG); >>resta=imsubtract(VG,PPG); >>figure,imshow(resta);

You might also like