vision artificial
DESCRIPTION
matlabTRANSCRIPT
APLICACIÓN K MEANS CON MATLAB
INTEGRANTE:WILMER ANDRES MANTILLA SUAREZ
PRESENTADO A:DR. JOSÉ ORLANDO MALDONADO BAUTISTA
MATERIA:ELECTIVA DE INGENIERÍA 2
UNIVERSIDAD DE PAMPLONADEPARTAMENTO INGENIERIAS Y ARQUITECTURA
INGENIERIA DE SISTEMASPAMPLONA10/04/2015
Ejercicio 1. Aplicar el algoritmo kmeans al total de la imagen “fire2.tif”. Hacer clasificación probando varios
valores de k, es decir clasificar en 2, 3, 4 clúster.
Determinar qué tipos de terreno (cubierta vegetal, arboles, vías, etc) se detectan en cada situación. Probar con
otros tipos de métrica disponibles en el algoritmo de kmeans de matlab. Discutir todos resultados y sacar
conclusiones.
1. Como solución al ejercicio 1 primero cargamos un parte de la imagen fire.tif.
clc;clear;%cargamos la imagenI = imread('fire2.tif');%recortamos la imagen%% guardamos en I2I2=I(200:400,200:400,:);% mostramos recorte %imshow(I2);pause;
Ilustración 1 Trozo de imagen seleccionada
2. Aplicamos los diferentes tipos de métrica para este caso la cosine, cityblock y la euclidiana (sqeuclidean)
esta última viene por defecto, ingresamos de igual manera el número de centroides a calcular en la imagen.
% REORDENAMOS EN TRES DIMENSIONES RGB P = reshape(I2,40401,3); IDX = kmeans(double(P),3,'Distance','cityblock');IDX1 = kmeans(double(P),3,'Distance','cosine');IDX2 = kmeans(double(P),3);
3. Kmeans nos devuelve para cada una de ellas una matriz de etiquetas donde cada una de ellas difiere al
centroide calculado.
IDX: matriz de etiquetas ditance cityblock
IDX1: matriz de etiquetas distance cosine
IDX2: matriz de etiquetas distance sqeuclidean
4. Devolvemos cada una de la matriz de etiquetas a su estado original convirtiéndola a RGB para su
visualización.
% convertirmos en matriz rectangular %rec = reshape(IDX,201,201);rec1 = reshape(IDX1,201,201);rec2 = reshape(IDX2,201,201); % imagen originalsubplot(1,4,1);imshow(I2);title('Imagen Original'); % etiquetas a rgb y visualizarimg = label2rgb(rec);subplot(1,4,2);imshow(img);title('Distance cityblock');
img1 = label2rgb(rec1);subplot(1,4,3);imshow(img1);title('Distance cosine'); img2 = label2rgb(rec2);subplot(1,4,4);imshow(img2);title('Distance euclídeana');
5. Observamos para e la pantalla con su orden respectivo de clasificación
Ilustración 2 Comparación entre diferente métricas
En su clasificación las métricas cityblock y cosine se destacan sobre la euclidiana, tomando más características de la imagen original.
Ejercicio 2. Al utilizar kmeans, podemos obtener además de las etiquetas de cada clase o clúster, los prototipos
del clúster (ver información de ayuda de kmeans en Matlab). Esto en el caso de las imágenes corresponde al
color promedio de cada grupo de pixels. Utilizar kmeans para obtener una imagen cuantizada del color, esto es
generar clúster o grupos de colores similares, y asignar a cada pixel de un mismo grupo el color que corresponde
al prototipo del clúster. Dibujar nuevamente la imagen, y obtener el menor grupo de colores que permita
conservar las características visuales de la imagen. Esto es, aplicar kmeans con diferente valores de k (k= 4, 5,6,
etc). Discutir todos resultados y sacar conclusiones.
clc;clear;%cargamos la imagenI = imread('fire2.tif');
1. En este ejercicio utilizamos la función imcrop() que nos permite seleccionar por el usuario un trozo de la
imagen
Guardando su respectivo recorte en una matriz.
%recortamos la imagen seleccionando recorte%% guardamos en I2 I2 = imcrop(I);
Ilustración 3 Selección de trozo de imagen
Ilustración 4 Imagen previamente recortada
2. Una vez seleccionado el recorte con el uso de la función size() traemos el tamaño de la matriz que
contiene el trizo de imagen
% traemos tamaño filas columnas y bandas[f,c,y] = size(I2);
f : filac: columnay: número de bandas % guardamos una copia del recorteI3 = I2; % mostramos recorte %imshow(I2);pause;
3. Al aplicar kmeans para poder cuantizar la imagen necesitamos su color promedio que va en relación con
el número de clúster, kmeans nos lo retorna como segundo parámetro
IDX: Matriz de etiquetas
C: Matriz de centroides
% REORDENAMOS EN TRES DIMENSIONES RGB P = reshape(I2,f*c,3);[IDX,C] = kmeans(double(P),3,'Distance','cityblock');
% IDX MATRIZ DE ETIQUETAS, MATRIZ DE CENTROIDESCUA=C(IDX,:);
% convertirmos en matriz rectangular %IMG = reshape(CUA,f,c,3);I = uint8(round(IMG)); % mostramos imagen cuantizada y original %subplot(1,2,1); imshow(I3);title('Imagen Original');subplot(1,2,2);imshow(I);title('Imagen Cuantizada');
Ilustración 5 Imagen original e imagen cuantizada