Sunteți pe pagina 1din 10

25/2/2011

UNIVERSIDAD TALLER 2 DE PROCESAMIENTO


DEL NORTE DIGITAL DE IMAGENES

JESUS ARAGON
EDUARDO CHAIN
CARLOS DE LA CRUZ

| PHD. JUAN CARLOS NIEBLES


1. Write a MATLAB function, labelConnectedComponents, which identifies and
labels each connected component in a binary image. The function should take
as an input the kind of adjacency to be used (either 4-adjacency or 8-
adjacency). The function should also display the resulting connected
components as shown below. Apply this function to the images crosses.gif and
chessboard.gif. Compare the connected components obtained when using 4-
adjacency against those obtained when using 8-adjacency.

Se implementó una funcion llamada labelConnectedComponents, que recibe como


parámetros de entrada una imagen y el tipo de adyacencia a aplicar, dicha función
devuelve una matriz del mismo tamaño que la imagen de entrada, y que contiene las
etiquetas de los objetos conectados. Para lograr esto, se uso el comando bwlabel, que
se encarga de etiquetar los objetos conectados, luego se usa el comando label2rgb para
darle colores a los diferentes objetos y de esta forma poder identificarlos fácilmente.

Codigo:

function imagen=labelConnectedComponents (im,n)


% Recibe una imagen binaria y el tipo de adyacencia
% y devuelve una imagen con los componentes conectados
% diferenciados por colores.
%
f=imread(im); % Lee la imagen de entrada
if n==4
% Identificar los componentes conectados
bw=bwlabel(f,4);
% Convertir la imagen a RGB para que los componentes
% conectados puedan ser diferenciados.
imagen=label2rgb(bw);
cadena='Imágen con conexión 4';
else
bw=bwlabel(f,8);
imagen=label2rgb(bw);
cadena='Imágen con conexión 8';
end
% Mostrar simultáneamente la imagen de entrada y la de salida
f=255.*f;
subplot(1,2,1);
imshow(f)
title('Imágen original')
subplot(1,2,2);
imshow(imagen)
title(cadena)

Comandos usados:

L = bwlabel (BW, n) devuelve una matriz L, del mismo tamaño que la WB, que
contienen las etiquetas de los objetos conectados en BW, n puede tener un valor de 4 u
8, dependiendo del tipo de adyacencia.

RGB= label2rgb (L) convierte una matriz de etiquetas L, como lo es la devuelta por
bwlabel, en una imagen de color RGB con el fin de visualizar las regiones etiquetadas.
La función label2rgb determina el color a asignar a cada objeto en función del número
de objetos en la etiqueta de la matriz y la gama de colores en el mapa de colores.

Resultados:
La siguiente grafica muestra que al aplicar adyacencia 4 y 8 a la imagen crosses, se
obtienen resultados idénticos debido a la forma de las figuras.

Como se puede observar en la siguiente grafica, la imagen obtenida a parir de una


adyacencia 8, reconoce como u solo objeto a los cuadros blancos del ajedrez, esto
debido a las conexiones diagonales que dichos cuadros tiene entre sí.
2. Write a MATLAB function, performHistogramEqualization, which
performs histogram equalization on a grayscale image. The function should
return the equalized image as an array. Use the function to do histogram
equalization on the images darkPollen.jpg, lightPollen.jpg,
lowContrastPollen.jpg, pollen.jpg, spine.jpg and runway.jpg. Plot and compare
the histograms of the corrected images to those of the originals.

Para el desarrollo de este punto se realizó una función que recibe como parámetro una
imagen, y devuelve dicha imagen pero con una mejora en el contraste. Esto es posible
gracias al comando Histeq.

Codigo:

function ImAdjust=performHistogramEqualization(Im)
%Mejora el contraste de la imágen de entrada mediante
%la ecualizacion del histograma de dicha imagen.
%Regresa la imgaen ecualizada.
I = imread(Im);
%Ajusta el contraste de la imagende entrada
ImAdjust=histeq(I);
subplot(1,2,1);
imshow(I);
title('Imágen original');
subplot(1,2,2);
imshow(ImAdjust);
title('Imagen Ecualizada');

Comandos usados:

J = histeq(I) : mejora el contraste de las imágenes mediante la transformación de los


valores de intensidad de una imagen, o los valores en el mapa de colores de una imagen
indizada, de modo que el histograma de la imagen de salida de aproximadamente
coincide con un histograma especificado.

Resultados:

>> ImAdjust=performHistogramEqualization('runway.jpg');
>> ImAdjust=performHistogramEqualization('spine.jpg');
>> ImAdjust=performHistogramEqualization('pollen.jpg');
>> ImAdjust=performHistogramEqualization('darkPollen.jpg');
>> ImAdjust=performHistogramEqualization('lightPollen.jpg');
>> ImAdjust=performHistogramEqualization('lowcontrastPollen.jpg');
Como se puede observar en las siguientes graficas, ecualizar una imagen implica darle
una distribución uniforme a las tonalidades altas y bajas de tal forma que se obtengan
imágenes con un mayor contraste si estas presentaban anteriormente una escasez de
tonos bajos (negros), y de manera similar, se obtienen imágenes con una disminución en
el contraste si estas presentaban una tonalidad alta.
3. Write a MATLAB function powerTransform which performs a power law
transformation on an image. This function should take an image array
(containing values in the range 0.0 – 1.0) and the gamma value to be used in
the transformation as its only input parameters. The function should return
a new image array which is the power transformation of the original image.
Try this new function out on the images spine.jpg and runway.jpg,
experimenting with different values for γ.

Power law transformations are achieved using the simple formula


where s is the output pixel value, r is the original pixel value, is the
parameter controlling the power law transformation and c is a constant
usually set to 1.

Para desarrollar la función requerida, se transformó la imagen recibida a valores


double para luego operarla pixel a pixel.

Codigo:

function powerTransform (imagen,y);


%The function returns a new image array which is the power
transformation of the original image.
f=imread(imagen);% lee la imagen
f=im2double(f); % Transforma a valores double de 0 - 1.
% "s" es el pixel de salida, producto de elevar a una potencia
"y" el pixel original
s=f.^y;
% se muestran la imagen orignal y la transformada
subplot(1,2,1)
imshow(f)
title('Imágen original');
subplot(1,2,2)
imshow(s)
title('Imágen Transformada');

Resultados:

>> powerTransform ('runway.jpg',20);


>> powerTransform ('runway.jpg',4);
>> powerTransform ('spine.jpg',4);
>> powerTransform ('spine.jpg',0.5);
Podemos observar en las siguientes graficas que mediante la transformación que para
valores grandes de la imagen se oscurece y para valores pequeños, la imagen se
aclara. Por lo tanto, utilizar transformación es útil en algunos casos según la necesidad
que se presente.

Imágen original Imágen Transformada

Imágen original Imágen Transformada


Imágen original Imágen Transformada

Imágen original Imágen Transformada

S-ar putea să vă placă și