Aplicaciones del histograma y las transformaciones El objetivo es resaltar los niveles de grises de determinada región de interés. % Se analizan las características básicas de la imagen >> I=imread('700854.jpg'); % Imagen de National Geographic >> II=rgb2gray(I); % Convierte a escala de grises >> whos Name Size Bytes Class I 328x900x3 885600 uint8 II 328x900 295200 uint8 % Se utilizará imtool para obtener características adicionales y ver la ubicación de los píxeles de la región % de interés >> imtool(II) Se abren dos ventanas: "Vista general" e "Imagen completa". Tools --> Image information % Características de la imagen uint8[0, 248] % Intervalo de escala de grises Cuando nos movemos con el cursor en la ventana de "Imagen completa" aparece la información de la posición del píxel en la parte inferior izquierda [(X, Y) Intensity]. Esta información es contraria a la posición del píxel en la matriz. En nuestro caso queremos seleccionar los píxeles en el intervalo [312, 328]; [610, 235] de la imagen, lo anterior significa que los valores de columnas serán [235, 328] y las filas [312, 610] de la matriz que representa a la imagen original.
% Se crea nueva matriz con la imagen de interés >> III=II(235:328,312:610); % Región de interés: camino >> imshow(III); % Se verifica %Se obtiene el valor de la media de la región de interés >> media=uint8(mean2(III)); media = 141
Se aplicará la definición del histograma. Se define una campana de gauss centrada en la media (141). Como es una función decremental a partir de su centro, penalizará el resto de intervalo de grises. h=exp(-((([1:1:256]-141)./50)).^2)';
%Se aplica el histograma >> IV=histeq(II,h); 
| 
|
% Se puede obtener el detalle del camino convirtiendo a blanco y negro, para ello >>IV=IV(235:328,312:610); % Se obtiene el umbral normalizado que minimiza la varianza entre las transiciones negro a blanco de los % píxeles (Método de Otsu) >> centro=graythresh(IV) centro = 0.5451 % Se convierte a blanco y negro (el umbral de conversión sería centro*255=139, nótese su proximidad con % la media=141): >> V=im2bw(IV, centro) El objetivo es aumentar el contraste a través de una función de transformación definida por puntos % Se define la función de transformación a través de 5 puntos y se aplica a la imagen >>x=[0, 121, 141, 161, 255] >> y=[0, 25, 255/2, 230, 255] >> modelo = interp1(x,y,'linear','pp'); % Se obtiene el modelo de la interpolación >> V=uint8(ppval(modelo, double(II))); % Se aplica la función a la imagen % Se define la función que tiene la tendencia que se desea siga el histograma >> x=[0:1:255]; >> hi=exp(-((([1:1:256]-0)./50)).^2); >> hd=exp(-((([1:1:256]-255)./50)).^2); >> h=[hi(1,1:129), hd(1,130:256)]; %Se aplica el histograma >> VI=histeq(II,h);  | 
|
Con la herramienta imtool se puede definir el intervalo del histograma y su centro de forma directa a través del comando: Tools --> Adjust Contrast Algunas imágenes o zonas de las mismas están o muy claras o muy oscuras, lo cual significa que el histograma no está distribuído uniformemente entre los diferentes valores de intensidades [0, Imax]. Por ejemplo, en la imagen que se ha utilizado en los ejemplos anteriores existen nubes en la parte superior izquierda muy oscuras, donde no se perciben los detalles. Se extenderá el histograma de la zona de nubes para percibir mejor los detalles. %Zona de la imagen seleccionada con imtool [1,1] a [201,137]. % Submatriz de imagen: [1:137] filas; [1:201] columnas VII=II(1:137, 1:201); VIII=histeq(VII,64); En este ejemplo se ha aplicado una definición del histograma que es una constante (64) para todos los niveles de gris [0, Imax].
Otra forma de aclarar la imagen es ampliando un intervalo de niveles de la imagen. Por ejemplo, en la sección de las nubes, la mayoría de los píxeles tienen un nivel de gris inferior a 100. Si se extiende el intervalo [0, 100] a [150, 255] entonces se incrementaría el brillo a la imagen y se aumentaría su rango dinámico, resaltando los detalles de las zonas oscuras. La siguiente función utiliza un intervalo normalizado [0, 1] para representar los niveles [0, Imax]. Para el caso de imágenes del tipo uint8, [0, 100] equivale a [0, 0.39] y [150, 255] a [0.58, 1]. % Incrementa brillo y rango dinámico >> IX=imadjust(VII, [0, 0.39], [0.58, 1]); Como se puede apreciar, se ha perdido información de la imagen, debido a que no se ha considerado la información de los niveles de gris por encima de 100 en la imagen original. La corrección gamma es el resultado de aplicar la función de transformación gamma. Esta se utiliza para aclarar u oscurecer la imagen. Se utilizará en el detalle del árbol de la imagen que se ha utilizado en el resto de ejemplos. >> X=II(41:259,291:562); >>XI=imadjust(X, [], [], 0.5); >> XII=imadjust(X, [], [], 5); Imagen original  | Corrección gamma=0.5 | Corrección gamma = 5 |
|