1. FACULTAD DE INGENIERÍA DE
PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA
ELECTRÓNICA
CURSO: LABORATORIO DE PROCESAMIENTO DIGITAL
DE IMÁGENES.
TEMA: DETECCION DEL ANGULO DE INCLINACION DE
UN OBJETO CON RESPECTO AL CENTRO DE
GRAVEDAD USANDO MATLAB EN TIEMPO
REAL.
ALUMNOS: AHUANLLA GONZALES, PEDRO JESUS
HORARIO: JUEVES 7:00-9:00 AM.
2014-A
2. SEGUIMIENTODE OBJETOS DE COLORES CONWEBCAM EN MATLAB
1.-Captura de Imágenes Mediante Cámara Conectadas a la Pc.
Resulta de suma utilidad para implementar algoritmos de visión o adquisición de imágenes en
tiempo real utilizando dispositivos simples y de bajo costo tales como las webcams.
Para este fin es necesario tener el toolbox ‘Image Acquisition’.
El toolbox incluye la herramienta Image Acquisition tool ‘imaqtool’ que se utilizara
posteriormente.
2.-Comandos a utilizar.
Imaqhwinfo
Devuelve lainformación del hardware y software disponibles, tales como: Adaptador de
video instalado, versión de Matlab, Toolbox (nombre y versión).
Imaqhwinfo (‘adaptor’)
Donde adaptor es el nombre del adaptador instalado, por lo general suele ser winvideo.
Este comando devuelve información relacionada al adaptador.
Imaqhwinfo (‘adaptor’, DeviceID)
Donde DeviceIDesel IDdel dispositivoautilizarobtenidoconel comandoanterior. Si solo
se cuenta con un dispositivo conectado el DeviceID será 1. Este comando muestra
información del dispositivo conectado (cámara).
3. El adaptador instalado es ‘winvideo’.
Hay un dispositivo de adquisición de imágenes instalado (DeviceID).
Este dispositivo instalado es una webcam ‘TOSHIBA Web Camera - HP’.
Además soporta 7 formatos de adquisición. Formato por
defecto:’YUY2_128X1024’.
3.-Coneccion del Hardware.
1.1.- Conecte el dispositivo de adquisición de imágenes al PC (En nuestro caso es el de la
misma laptop).-
4.-Marco Teórico.
Procesamientode imágenesenMatlab.
¿Qué compone una imagen?
Cada imagense compone de unamatrizde MXN pixeles(contracciónde ‘elementode imagen’)
con M filasy N columnasde pixeles.Cadapixelcontiene unciertovalorde rojo,verde yazul.La
variaciónde estosvaloresparael rojo,verde,azul (RGB) podemosconseguircasi cualquiercolor.
Almacenamientode imágenesenMatlab.
4. Deteccionde color
El formatoRGB es un métodopracticopara representarimágenesen color. Matlab crea
tresmatrices(otresmatricesde MXN) con cada matriz que representaloscomponentes
normalizadosde rojo,verde oazul para leeryalmacenarcada uno de losfotogramas del
video.El colorde cualquierpixel se determinaporlacombinaciónde valoresAzul Rojo
Verde yalmacenadaentresmatricesenla ubicaciónde ese pixel.AsícomoMatlab lee y
manipulaarchivosjpg.
5.
6.
7.
8.
9. 6.-Codigoen Matlab.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%
close all;clear all;clc;
% primero se captura un stream de video usando videoinput, con argumento
%de winvideo, numero de dispositivo y formato de la camara, si no sabes
usa la
%funcion imaqtool para averiguarlo es YUY o RGB
vid=videoinput('winvideo',1,'YUY2_640x480');
%640x480 160x120
% Se configura las opciones de adquision de video
set(vid, 'FramesPerTrigger', Inf);
set(vid, 'ReturnedColorspace', 'rgb')
vid.FrameGrabInterval = 5;
%framegrabinterval significa que tomara cada 5 frame del stream de video
adquirida
%con start(vid) se activa la adquisicion, pero todavia se toma la primera
foto
start(vid)
% creamos un bucle que puede ser while always o while true en este caso
%y como mi compu es una netbook trucha(trucha=cagada=lenta=barata)
%hago que despues de 100 frames adquiridos se salga del bucle para evitar
colgadas
while(vid.FramesAcquired<=100)
% se toma una snapshot del stream y se la almacena en data para trabajar
mas
%facil
data = getsnapshot(vid);
% ahora vamos a reconocer el color rojo en tiempo real
% tenemos que extraer el color rojo
% de la imagen en escala de grises de la imagen adquirida en data
diff_im = imsubtract(data(:,:,1), rgb2gray(data));
%imsubstract sirve para sacar algun valor constante de una imagen, usamos
como
10. %argumento el array de data y la funcion rgb2gray de data
%se usa medfilt2 para filtrar la senial del ruido
diff_im = medfilt2(diff_im, [3 3]);
% Convertir la imagen en escala de grises a una imagen binaria.
diff_im = im2bw(diff_im,0.18);
% para determinar el tamanio a reconocer se usa bwareopen para descartar
%imagen de rojo de menos de 300 pixels
diff_im = bwareaopen(diff_im,300);
% Etiquetamos los elementos conectados en la imagen
bw = bwlabel(diff_im, 8);
% Ahora hacemos el analisis del "objeto" detectado(que solo son pixels
rojos)
%agrupados de mas de 300
% onfiguramos la region etiquetada
stats = regionprops(bw, 'BoundingBox', 'Centroid');
% centro de gravedad
[N M]= size(bw);
M00=0;M10=0;M01=0;
M20=0;M02=0;;M11=0;
for i=1:N
for j=1:M
if(bw(i,j)==1) %(SI ES UNA IMAGEN BLANCA)
M00=M00+1; % ENTONCES
M10=M10+j; % SUMATORIA DE LOS MOMENTOS DE LA IMAGEN
M01=M01+i;
M20=M20+j*j; % VER LA ECUACION DE LOS MOMENNTOS CENTRALES DE
ORDEN PQ
M02=M02+i*i;
M11=M11+i*j;
end
end
end
cx=M10/M00;
cy=M01/M00;
disp(cx);
disp(cy);
u00=M00; % ver ecuacion en copias de momentos centrales en forma
resumida,
u20=M20-cx*M10;% ver ecuacion en copias de momentos centrales en forma
resumida,
u02=M02-cy*M01;% ver ecuacion en copias de momentos centrales en forma
resumida,
u11=M11-cy*M10;% ver ecuacion en copias de momentos centrales en forma
resumida,
hold on
plot(cx,cy,'-m+');
%eje mayor
l=sqrt((u20+u02+sqrt(((u20-u02)^2)+(4*u11^2)))/(u00/2))
%eje
% menor
w=sqrt((u20+u02-sqrt(((u20-u02)^2)+(4*u11^2)))/(u00/2))
%orientcion eje mayor
th=0.5*atan2(2*u11,(u20-u02))% atan arco tangente en cuatro cuadrantes
% coordenadas eje mayor
p1=[cx+0.5*l*cos(th) cy+0.5*l*sin(th)];
11. p2=[cx-0.5*l*cos(th) cy-0.5*l*sin(th)];
%coordenadas eje menor
p3=[cx+0.5*w*sin(th) cy-0.5*w*cos(th)];
p4=[cx-0.5*w*sin(th) cy+0.5*w*cos(th)];
line([p1(1,1) p2(1,1)],[p1(1,2) p2(1,2)]); % une con una linea 2 puntos
line([p3(1,1) p4(1,1)],[p3(1,2) p4(1,2)]); % une con una linea 2 puntos
disp(th*180/pi)
cx=M10/M00;
cy=M01/M00;
disp(cx);
disp(cy);
u00=M00; % ver ecuacion en copias de momentos centrales en forma
resumida,
u20=M20-cx*M10;% ver ecuacion en copias de momentos centrales en forma
resumida,
u02=M02-cy*M01;% ver ecuacion en copias de momentos centrales en forma
resumida,
u11=M11-cy*M10;% ver ecuacion en copias de momentos centrales en forma
resumida,
hold on
plot(cx,cy,'rs');
%eje mayor
l=sqrt((u20+u02+sqrt((u20-u02)^2+4*u11^2))/(u00/2))
%eje menor
w=sqrt((u20+u02-sqrt((u20-u02)^2+4*u11^2))/(u00/2))
%orientcion eje mayor
th=0.5*atan2(2*u11,(u20-u02))% atan arco tangente en cuatro cuadrantes
p1=[cx+0.5*l*cos(th) cy+0.5*l*sin(th)];
p2=[cx-0.5*l*cos(th) cy-0.5*l*sin(th)];
p3=[cx+0.5*w*sin(th) cy-0.5*w*cos(th)];
p4=[cx-0.5*w*sin(th) cy+0.5*w*cos(th)];
line([p1(1,1) p2(1,1)],[p1(1,2) p2(1,2)]); % une con una linea 2 puntos
line([p3(1,1) p4(1,1)],[p3(1,2) p4(1,2)]);% une con una linea 2 puntos
disp(th*180/pi)
%dispth
% mostramos la imagen
imshow(data)
hold on
%este es un bucle para encerrar el objeto rojo en un rectangulp y una
cruz en el
%centroide(solo es programacion basica de matlab)
for object = 1:length(stats)
bb = stats(object).BoundingBox;
12. bc = stats(object).Centroid;
rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
plot(bc(1),bc(2), '-m+')
%a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ',
num2str(round(bc(2)))));
%set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12,
'Color', 'yellow');
end
hold off
end
% aqui terminan los 2 bucles
% detenemos la captura
stop(vid);
%FLUSHDATA remueve la imagen del motor de adquisicion y la almacena en el
buffer
flushdata(vid);
clear all
% borramos todo(como en cualquier programa)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7.-Concluciones.
Hay que teneren cuentadiversospatronesporque cuandovaríala luzóseadisminuye o
aumentanopodría llegara reconoceral objeto.
Algomuyimportante esque antesde empezartodotenemosque asegurarnosde que este
instaladoel toolbox ‘ImageAcquisition’. Yaque sin ellonose podrállevara cabo este
trabajo.
El trabajoen realidaderaseguimientocualquieraque fuese el objeto,peroparamayor
simplicidadoptamosenescogerunpatrónenrealidadexistenmuchocomoporejemplo
identificarunobjetoporcolor,forma, dimensión,etc.Nosotrosoptamosidentificarun
objetoporel color.
8.-Bibliografia
http://cnx.org/contents/9061fd10-2fec-426d-a107-
8272eb37ab92@2/Webcam_Color_Tracking_in_Matla
http://es.wikipedia.org/wiki/Segmentaci%C3%B3n_(procesamiento_de_im%C3%A1genes)
http://alojamientos.us.es/gtocoma/pid/tema4.pdf