Documente Academic
Documente Profesional
Documente Cultură
ASIGNATURA:
VISION ARTIFICIAL
TRABAJO:
IDENTIFICACIO DE COLORES
ALUMNOS:
DOCENTE:
ING. PEDRO RODRIGUEZ
HORARIO:
Lunes 17:00 a 18:30 hrs.
Arequipa – Perú
2019
1.- INTRODUCCION
El color es una de las características que nos permite a los seres humanos identificar y clasificar
los objetos. La percepción visual del color se genera en nuestro cerebro a partir de las ondas
electromagnéticas reflejadas por los objetos y captadas por los ojos. Desde el punto de vista del
procesamiento de imágenes por computador, es preciso recurrir a los llamados espacios de color,
se trata de conjuntos de fórmulas matemáticas que permiten describir los colores y
descomponerlos en distintos canales.
Los espacios de color más utilizados son el RGB y el CMYK, debido a que el modelo RGB se
utiliza en periféricos como pantallas, cámaras y escáneres, y el modelo CMYK en impresoras.
En este trabajo se analizará también el sistema de coordenadas tridimensional (tono, saturación e
intensidad) del espacio de color HSI, donde cada color está representado por un punto en el
espacio.
vid=imread ('D:\vision\000001.jpeg');
A
h=imshow(vid);
hp=impixelinfo;
set(hp,'Position',[5 1 300 20]);
A: Los comandos imread y impixelinfo permiten obtener el valor del pixel (color), que
queremos identificar en nuestro programa
OBJ = VideoReader('D:\color.avi');
numFrames = OBJ.NumberOfFrames;
n=numFrames;
Folder = 'D:\vision';
for iFrame = 1:n
frames = read(OBJ, iFrame);
imwrite(frames, fullfile(Folder, sprintf('%06d.jpeg', iFrame)));
end
B
FileList = dir(fullfile(Folder, '*.jpeg'));
for iFile = 1:length(FileList)
aFile = fullfile(Folder, FileList(iFile).name);
img = imread(aFile);
end
imR=double(vid(:,:,1));
imG=double(vid(:,:,2));
imB=double(vid(:,:,3));
imagenR=(imR-imG-imB);
imagen_Binaria=imagenR > -20;
imagen_Binaria_filtrada = medfilt2(imagen_Binaria); C
mascara=1-imagen_Binaria_filtrada;
imagen_roja=double(imagenGris)/255;
imagen_verde=double(imagenGris).* mascara/255;
imagen_azul=double(imagenGris).* mascara/255;
imagen_final=cat(3,imagen_roja,imagen_verde,imagen_azul);
figure
imshow(imagen_final)
C: Para poder identificar el color rojo , se utiliza un rango en el valor del color rojo, para
que pueda identificarlo, y es representado por la variable Imagen_Binaria. Después se
utiliza el filtro medfilt2 y se crea una mascara con la diferencia del valor unitario y la
imagen binaria filtrada. Despues a la imagen roja se le divide entre los 255 valores de
color (pixeles) y para la imagen final se usa el comando cat para concantenar la imagen
roja, verde y azul y obtener en la imagen final solo el color que queremos identificar en la
imagen.
COLOR AZUL
imR=double(vid(:,:,1));
imG=double(vid(:,:,2));
imB=double(vid(:,:,3));
imagenB=(imB-imR-imG);
imagen_Binaria=imagenB > 0;
imagen_Binaria_filtrada = medfilt2(imagen_Binaria); D
mascara=1-imagen_Binaria_filtrada;
imagen_roja=double(imagenGris).* mascara/255;
imagen_verde=double(imagenGris).* mascara/255;
imagen_azul=double(imagenGris)/255;
imagen_final=cat(3,imagen_roja,imagen_verde,imagen_azul);
figure
imshow(imagen_final)
D: Realizamos los mismos pasos que la explicación de la parte C, solo que lo único que
variamos es el valor numérico que se le da en la comparación de la variable de la imagen
Binaria
COLOR VERDE
imR=double(vid(:,:,1));
imG=double(vid(:,:,2));
imB=double(vid(:,:,3));
imagenG=(imG-imR-imB);
imagen_Binaria=imagenG >-30;
imagen_Binaria_filtrada = medfilt2(imagen_Binaria);
mascara=1-imagen_Binaria_filtrada; E
imagen_roja=double(imagenGris).* mascara/255;
imagen_verde=double(imagenGris)/255;
imagen_azul=double(imagenGris).* mascara/255;
imagen_final=cat(3,imagen_roja,imagen_verde,imagen_azul);
figure
imshow(imagen_final)
E: Realizamos los mismos pasos que la explicación de la parte C, solo que lo único que
variamos es el valor numérico que se le da en la comparación de la variable de la imagen
Binaria
EJEMPLO:
Utilizamos el comando impixelinfo, que permite conocer el valor del pixel (color) que
queremos identificar en la imagen de nuestro programa.
vid=imread ('D:\vision\000001.jpeg');
h=imshow(vid);
hp=impixelinfo;
set(hp,'Position',[5 1 300 20]);
OBJ = VideoReader('D:\color.avi');
numFrames = OBJ.NumberOfFrames;
n=numFrames;
Folder = 'D:\vision';
for iFrame = 1:n
frames = read(OBJ, iFrame);
imwrite(frames, fullfile(Folder, sprintf('%06d.jpeg', iFrame)));
end
Imagen Original
vid=imread ('D:\fotocolor.jpeg');
imshow(vid)
imagenGris=rgb2gray(vid);
imR=double(vid(:,:,1));
imG=double(vid(:,:,2));
imB=double(vid(:,:,3));
imagenR=(imR-imG-imB);
imagen_Binaria=imagenR > -20;
imagen_Binaria_filtrada = medfilt2(imagen_Binaria);
Aplicando el filtro medfilt2 en la imagen binaria o que se encuentra en
dos colores, el filtro permite reducir en la imagen el ruido
mascara=1-imagen_Binaria_filtrada;
imagen_roja=double(imagenGris)/255;
imagen_verde=double(imagenGris).* mascara/255;
imagen_azul=double(imagenGris).* mascara/255;
Aca se selecciona la región a través del escalado de grises utilizando
la mascara y un valor determinado en cada parte de la imagen según el
color
imagen_final=cat(3,imagen_roja,imagen_verde,imagen_azul);
figure
imshow(imagen_final)
La imagen final tiene seleccionado la región roja de toda la imagen
Filtro de la media
Filtro de la media
Ejemplo de máscara
media:
El modelo matemático es el siguiente
a la iluminación
a la óptica de la cámara
al canal de transmisión.