Esta página es para la versión anterior. La página correspondiente en inglés se eliminó en la versión actual.

Técnicas de mejora de contraste

Este ejemplo muestra varios enfoques de mejora de imagen. Tres funciones son particularmente convenientes para el realce del contraste: imadjust, histeq, y adapthisteq. Este ejemplo compara su uso para mejorar las imágenes en escala de grises y truecolor.

Paso 1: Cargar imágenes

Leer en dos imágenes en escala de grises: pout.tif y tire.tif. También se lee en una imagen RGB indexada: shadow.tif.

pout = imread('pout.tif'); tire = imread('tire.tif'); [X, map] = imread('shadow.tif'); shadow = ind2rgb(X,map); % convert to truecolor

Paso 2: Cambiar el tamaño de las imágenes

Para facilitar la comparación de imágenes, redimensione las imágenes para que tengan el mismo ancho. Preservar sus ratios de aspecto al escalar sus alturas.

width = 210; images = {pout, tire, shadow};  for k = 1:3   dim = size(images{k});   images{k} = imresize(images{k},[width*dim(1)/dim(2) width],'bicubic'); end  pout = images{1}; tire = images{2}; shadow = images{3};

Paso 3: Mejorar las imágenes en escala de grises

Con la configuración predeterminada, compare la efectividad de las siguientes tres técnicas:

  • imadjust aumenta el contraste de la imagen mediante la asignación de los valores de la imagen de intensidad de entrada a nuevos valores de modo que, de forma predeterminada, el 1% de los datos se satura a intensidades bajas y altas de los datos de entrada.

  • histeq realiza la ecualización del histograma. Mejora el contraste de las imágenes transformando los valores en una imagen de intensidad para que el histograma de la imagen de salida coincida aproximadamente con un histograma especificado (distribución uniforme por defecto).

  • adapthisteq realiza ecualización de histograma adaptable con contraste limitado. A diferencia de histeq, opera en pequeñas regiones de datos (tiles) en lugar de en toda la imagen. El contraste de cada mosaico se realza de manera que el histograma de cada región de salida coincida aproximadamente con el histograma especificado (distribución uniforme por defecto). El realce de contraste puede ser limitado para evitar amplificar el ruido que podría estar presente en la imagen.

pout_imadjust = imadjust(pout); pout_histeq = histeq(pout); pout_adapthisteq = adapthisteq(pout);  imshow(pout); title('Original');

 figure, imshow(pout_imadjust); title('Imadjust');

figure, imshow(pout_histeq); title('Histeq');

 figure, imshow(pout_adapthisteq); title('Adapthisteq');

tire_imadjust = imadjust(tire); tire_histeq = histeq(tire); tire_adapthisteq = adapthisteq(tire);  figure, imshow(tire); title('Original');

 figure, imshow(tire_imadjust); title('Imadjust');

figure, imshow(tire_histeq); title('Histeq');

 figure, imshow(tire_adapthisteq); title('Adapthisteq');

Note que imadjust tenía poco efecto sobre la imagen de la llanta, pero causó un cambio drástico en el caso de pucheros. Trazando los histogramas de pout.tif y tire.tif se revela que la mayoría de los píxeles de la primera imagen se concentran en el centro del histograma, mientras que en el caso de tire.tif, los valores ya se han extendido entre el mínimo de 0 y máximo de 255 así evitar que imadjust sea eficaz para ajustar el contraste de la imagen.

figure, imhist(pout), title('pout.tif');

figure, imhist(tire), title('tire.tif');

La ecualización del histograma, por otro lado, cambia sustancialmente ambas imágenes. Muchas de las características previamente ocultadas están expuestas, especialmente las partículas de la ruina en el neumático. Desafortunadamente, al mismo tiempo, la mejora satura varias áreas de ambas imágenes. Observe cómo el centro de la llanta, parte de la cara del niño, y la chaqueta se lavó.

Concentrándose en la imagen del neumático, sería preferible que el centro de la rueda permanezca en aproximadamente el mismo brillo mientras que realza el contraste en otras áreas de la imagen. Para que eso suceda, una transformación diferente tendría que ser aplicada a diferentes partes de la imagen. La técnica de ecualización adaptativa con contraste limitado del histograma, implementada en adapthisteq, puede lograr esto. El algoritmo analiza partes de la imagen y computa las transformaciones apropiadas. Un límite en el nivel de realce del contraste puede también ser fijado, así previniendo la sobresaturación causada por el método básico de la igualación del histograma de histeq. Esta es la técnica más sofisticada en este ejemplo.

Paso 4: Mejorar las imágenes en color

El aumento de contraste de las imágenes de color se realiza típicamente transformando una imagen en un espacio de color que tiene la intensidad de la imagen como uno de sus componentes. Uno de estos espacios de color es L * a * b *. Utilice las funciones de transformación de color para convertir la imagen de RGB en espacio de color L * a * b * y, a continuación, trabaje en la capa de luminosidad ' L * ' de la imagen. La manipulación de la luminosidad afecta la intensidad de los píxeles, preservando al mismo tiempo los colores originales.

srgb2lab = makecform('srgb2lab'); lab2srgb = makecform('lab2srgb');  shadow_lab = applycform(shadow, srgb2lab); % convert to L*a*b*  % the values of luminosity can span a range from 0 to 100; scale them % to [0 1] range (appropriate for MATLAB(R) intensity images of class double)  % before applying the three contrast enhancement techniques max_luminosity = 100; L = shadow_lab(:,:,1)/max_luminosity;  % replace the luminosity layer with the processed data and then convert % the image back to the RGB colorspace shadow_imadjust = shadow_lab; shadow_imadjust(:,:,1) = imadjust(L)*max_luminosity; shadow_imadjust = applycform(shadow_imadjust, lab2srgb);  shadow_histeq = shadow_lab; shadow_histeq(:,:,1) = histeq(L)*max_luminosity; shadow_histeq = applycform(shadow_histeq, lab2srgb);  shadow_adapthisteq = shadow_lab; shadow_adapthisteq(:,:,1) = adapthisteq(L)*max_luminosity; shadow_adapthisteq = applycform(shadow_adapthisteq, lab2srgb);  figure, imshow(shadow); title('Original');

 figure, imshow(shadow_imadjust); title('Imadjust');

figure, imshow(shadow_histeq); title('Histeq');

 figure, imshow(shadow_adapthisteq); title('Adapthisteq');