View
237
Download
10
Category
Preview:
Citation preview
Segmentación de colores con
MATLABDr. Alejandro Aceves
Seminario del Proyecto de
Investigación en robótica Humanoide
Objetivo
• Al finalizar el taller, el participante podrá analizar imágenes desde MATLAB para hacer procesos simpes de segmentación de colores y posterior mente detectar objetos de colores de una secuencia de video.
Lista de Material
• Una computadora
• Una web-cam
• MATLAB con Image Adquisition
MATLAB
>> ver-------------------------------------------------------------------------------------
MATLAB Version 7.9.0.529 (R2009b)
MATLAB License Number: 161051
Operating System: Microsoft Windows Vista Version 6.1 (Build 7600)
Java VM Version: Java 1.6.0_12-b04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode
-------------------------------------------------------------------------------------
MATLAB Version 7.9 (R2009b)
Simulink Version 7.4 (R2009b)
Control System Toolbox Version 8.4 (R2009b)
Data Acquisition Toolbox Version 2.15 (R2009b)
Fuzzy Logic Toolbox Version 2.2.10 (R2009b)
Genetic Algorithm and Direct Search Toolbox Version 2.4.2 (R2009b)
Image Acquisition Toolbox Version 3.4 (R2009b)
Image Processing Toolbox Version 6.4 (R2009b)
Model Predictive Control Toolbox Version 3.1.1 (R2009b)
Neural Network Toolbox Version 6.0.3 (R2009b)
Optimization Toolbox Version 4.3 (R2009b)
Real-Time Windows Target Version 3.4 (R2009b)
Real-Time Workshop Version 7.4 (R2009b)
Real-Time Workshop Embedded Coder Version 5.4 (R2009b)
Robust Control Toolbox Version 3.4 (R2009b)
Signal Processing Blockset Version 6.10 (R2009b)
Signal Processing Toolbox Version 6.12 (R2009b)
Simulink Control Design Version 3.0 (R2009b)
Spline Toolbox Version 3.3.7 (R2009b)
Statistics Toolbox Version 7.2 (R2009b)
Symbolic Math Toolbox Version 5.3 (R2009b)
System Identification Toolbox Version 7.3.1 (R2009b)
Video and Image Processing Blockset Version 2.8 (R2009b)
Drivers
>> info=imaqhwinfo
info =
InstalledAdaptors: {'coreco' 'winvideo'}
MATLABVersion: '7.9 (R2009b)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '3.4 (R2009b)'
Drivers
>> info=imaqhwinfo('winvideo')
info =
AdaptorDllName: [1x81 char]
AdaptorDllVersion: '3.4 (R2009b)'
AdaptorName: 'winvideo'
DeviceIDs: {[1]}
DeviceInfo: [1x1 struct]
Drivers
>> info=imaqhwinfo('winvideo',1)
info =
DefaultFormat: 'YUY2_176x144'
DeviceFileSupported: 0
DeviceName: 'USB 2821 Device'
DeviceID: 1
ObjectConstructor: 'videoinput('winvideo', 1)'
SupportedFormats: {1x8 cell}
Drivers
>> info.SupportedFormats'
ans =
'YUY2_176x144'
'YUY2_352x480'
'YUY2_352x576'
'YUY2_480x480'
'YUY2_480x576'
'YUY2_640x480'
'YUY2_720x480'
'YUY2_720x576'
Variable de VIDEO
>> vid=videoinput('winvideo',1,'YUY2_720x480')
Summary of Video Input Object Using 'USB 2821 Device'.
Acquisition Source(s): composite and svideo are available.
Acquisition Parameters: 'composite' is the current selected source.
10 frames per trigger using the selected source.
'YUY2_720x480' video data to be logged upon START.
Grabbing first of every 1 frame(s).
Log data to 'memory' on trigger.
Trigger Parameters: 1 'immediate' trigger(s) on START.
Status: Waiting for START.
0 frames acquired since starting.
0 frames available for GETDATA.
Preview
>> preview(vid)
Una Imagen
Imagen obtenida de Image Processing Toolbox For Use with MATLAB User’s guide v2.0, pp 1-8
Espacio de Colores
Imágenes obtenidas de los siguientes sitios:
http://commons.wikimedia.org/wiki/File:Cubo_YUV_con_las_capas_de_color.png
http://i.msdn.microsoft.com/Aa511283.color02%28en-us,MSDN.10%29.png
http://en.wikipedia.org/wiki/Color_space
RGB
Y - Luminance (brightness)
U (Cb) - Blueness (Blue vs. Green)
V (Cr) - Redness (Red vs. Green)
YUV
Espacio de Color
>> vid.VideoResolution
ans =
720 480
>> set(vid,'ReturnedColorSpace','rgb')
Capturar una imagen
>> foto=getsnapshot(vid);
>> figure(1)
>> imshow(foto)
Pixeles
>> pixels=impixel(foto)
pixels =
185 203 204
189 206 200
181 195 197
203 220 214
196 210 210
Elegir pixeles de un mismo color
Pixeles
>> figure(2)
>> plot3(pixels(:,1),pixels(:,2),pixels(:,3),'r*')
>> axis([0 255 0 255 0 255])
Pixeles>> maxR=max(pixels(:,1))
maxR =
194
>> minR=min(pixels(:,1))
minR =
178
>> maxG=max(pixels(:,2))
maxG =
214
>> minG=min(pixels(:,2))
minG =
192
>> maxB=max(pixels(:,3))
maxB =
209
>> minB=min(pixels(:,3))
minB =
187
Voxel
http://www.mathworks.com/matlabcentral/fileexchange/3280
Voxel
VOXEL function to draw a 3-D voxel in a 3-D plot
Usage:
voxel(start,size,color,alpha);
will draw a voxel at 'start' of size 'size' of color 'color'
and transparency alpha (1 for opaque, 0 for transparent)
Default size is 1
Default color is blue
Default alpha value is 1
start is a three element vector [x,y,z]
size the a three element vector [dx,dy,dz]
color is a character string to specify color
(type 'help plot' to see list of valid colors)
Clases de Coloresvoxel([minR minG minB],
[maxR-minR maxG-minG maxB-minB],'b',0.8)
Clasificador de pixeles
Segmentar (Azul)
>> foto=getsnapshot(vid);
>> figure(1); imshow(foto);
>> pixels=impixel(foto);
>> minR=min(pixels(:,1));
>> minG=min(pixels(:,2));
>> minB=min(pixels(:,3));
>> maxR=max(pixels(:,1));
>> maxG=max(pixels(:,2));
>> maxB=max(pixels(:,3));
>> segmenta
>> figure(2); imshow(foto);
Segmentar (Verde)
>> foto=getsnapshot(vid);
>> figure(1); imshow(foto);
>> pixels=impixel(foto);
>> minR=min(pixels(:,1));
>> minG=min(pixels(:,2));
>> minB=min(pixels(:,3));
>> maxR=max(pixels(:,1));
>> maxG=max(pixels(:,2));
>> maxB=max(pixels(:,3));
>> segmenta
>> figure(2); imshow(foto);
Segmentar (Blanco)
>> foto=getsnapshot(vid);
>> figure(1); imshow(foto);
>> pixels=impixel(foto);
>> minR=min(pixels(:,1));
>> minG=min(pixels(:,2));
>> minB=min(pixels(:,3));
>> maxR=max(pixels(:,1));
>> maxG=max(pixels(:,2));
>> maxB=max(pixels(:,3));
>> segmenta
>> figure(2); imshow(foto);
Programafoto=getsnapshot(vid); figure(1); pixels=impixel(foto);
minR=min(pixels(:,1)); minG=min(pixels(:,2)); minB=min(pixels(:,3));
maxR=max(pixels(:,1)); maxG=max(pixels(:,2)); maxB=max(pixels(:,3));
figure(2); axis([0 255 0 255 0 255]);
%voxel([minR minG minB],[maxR-minR maxG-minG maxB-minB],'b',0.8);
%voxel([minR minG minB],[maxR-minR maxG-minG maxB-minB],'g',0.8);
voxel([minR minG minB],[maxR-minR maxG-minG maxB-minB],'w',0.8);
res=vid.VideoResolution;
for x=1:res(2)
for y=1:res(1)
if foto(x,y,1)>= minR && foto(x,y,1)<=maxR && ...
foto(x,y,2)>= minG && foto(x,y,2)<=maxG && ...
foto(x,y,3)>= minB && foto(x,y,3)<=maxB,
% foto(x,y,1)=0; foto(x,y,2)=255; foto(x,y,3)=0;
% foto(x,y,1)=0; foto(x,y,2)=0; foto(x,y,3)=255;
foto(x,y,1)=255; foto(x,y,2)=255; foto(x,y,3)=255;
else
foto(x,y,1)=0;
foto(x,y,2)=0;
foto(x,y,3)=0;
end;
end;
end;
figure(3); imshow(foto)
Segmentación por colores
Referencias
[1] Image Processing Toolbox For Use with MATLAB User’s guide v2.0
[2] VOXEL function to draw a 3-D voxel in a 3-D plot, Suresh Joel Apr 15,2003, Updated Feb 25, 2004 http://www.mathworks.com/matlabcentral/fileexchange/3280
Recommended