Está en la página 1de 12

FACULTAD DE INGENIERA DE

PRODUCCIN Y SERVICIOS

ESCUELA PROFESIONAL DE INGENIERA


ELECTRNICA
CURSO:
LABORATORIO
DE
PROCESAMIENTO DIGITAL DE IMGENES.
TEMA:
DETECCION DEL ANGULO DE
INCLINACION DE UN OBJETO CON
RESPECTO AL CENTRO DE
GRAVEDAD USANDO MATLAB EN
TIEMPO REAL.
ALUMNOS:
HORARIO:

AHUANLLA GONZALES, PEDRO JESUS


JUEVES 7:00-9:00 AM.
2014-A

SEGUIMIENTO DE OBJETOS DE COLORES CON WEBCAM EN MATLAB


1.-Captura de Imgenes Mediante Cmara Conectadas a la Pc.
Resulta de suma utilidad para implementar algoritmos de visin o adquisicin
de imgenes 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 la informacin del hardware y software disponibles, tales
como: Adaptador de video instalado, versin de Matlab, Toolbox (nombre
y versin).
Imaqhwinfo (adaptor)
Donde adaptor es el nombre del adaptador instalado, por lo general
suele ser winvideo. Este comando devuelve informacin relacionada al
adaptador.
Imaqhwinfo (adaptor, DeviceID)
Donde DeviceID es el ID del dispositivo a utilizar obtenido con el
comando anterior. Si solo se cuenta con un dispositivo conectado el
DeviceID ser 1. Este comando muestra informacin del dispositivo
conectado (cmara).

El adaptador instalado es winvideo.


Hay un dispositivo de adquisicin de imgenes instalado
(DeviceID).
Este dispositivo instalado es una webcam TOSHIBA Web Camera HP.
Adems soporta 7 formatos de adquisicin. Formato por
defecto:YUY2_128X1024.
3.-Coneccion del Hardware.
1.1.- Conecte el dispositivo de adquisicin de imgenes al PC (En nuestro
caso es el de la misma laptop).-

4.-Marco Terico.
Procesamiento de imgenes en Matlab.
Qu compone una imagen?
Cada imagen se compone de una matriz de MXN pixeles (contraccin de
elemento de imagen) con M filas y N columnas de pixeles. Cada pixel contiene
un cierto valor de rojo, verde y azul. La variacin de estos valores para el rojo,
verde, azul (RGB) podemos conseguir casi cualquier color.

Almacenamiento de imgenes en Matlab.

Deteccion de color
El formato RGB es un mtodo practico para representar imgenes en
color. Matlab crea tres matrices(o tres matrices de MXN) con cada
matriz que representa los componentes normalizados de rojo, verde o
azul para leer y almacenar cada uno de los fotogramas del video. El color
de cualquier pixel se determina por la combinacin de valores Azul Rojo
Verde y almacenada en tres matrices en la ubicacin de ese pixel. As
como Matlab lee y manipula archivos jpg.

6.-Codigo en 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

%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)];

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;
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 tener en cuenta diversos patrones porque cuando vara la luz
sea disminuye o aumenta no podra llegar a reconocer al objeto.
Algo muy importante es que antes de empezar todo tenemos que
asegurarnos de que este instalado el toolbox Image Acquisition. Ya que
sin ello no se podr llevar a cabo este trabajo.
El trabajo en realidad era seguimiento cualquiera que fuese el objeto,
pero para mayor simplicidad optamos en escoger un patrn en realidad
existen mucho como por ejemplo identificar un objeto por color, forma,
dimensin, etc. Nosotros optamos identificar un objeto por el color.

8.-Bibliografia
http://cnx.org/contents/9061fd10-2fec-426d-a1078272eb37ab92@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

También podría gustarte