Você está na página 1de 7

Asignación 5

Nombre del Alumno: Uriel Ruiz Reyes

Número de Matrı́cula: 120758

Objetivo Realizar un clasificador que distinga vehı́culos. La idea es que en el movimiento


en que un auto entre en escena se reconozca que es un automóvil, y se cuente. si
en algún momento entra un nuevo vehı́culo también debe informar, además si otro
objeto que no sea un vehı́culo entra en escena, no se debe hacer nada.

Introducción Primero se debe comprender que un video es una sucesión de imágenes continua
durante un periodo de tiempo, lo cual hace posible aplicar las mismas técnicas de
procesamiento de imágenes que en las mismas imágenes estáticas. Las limitaciones
serian que se tiene un tiempo limitado para procesar las imágenes de los fotogramas,
precisamente procesar una imagen antes de que se adquiera la siguiente. Además
de que se requieren computadores de una mayor capacidad y velocidad.

Materiales y Equipo
1. Bases de datos UACJ

2. IEEE
3. Overleaf
4. Internet

5. Información propuesta por el docente


6. Matlab

Esquema

Figure 1: Diagrama de flujo del procesamiento digital de imágenes

1 of 7
Procedimiento
1. Abrir Matlab
2. Abrir guide en Command Window

3. Abrir el Editor de Scripts

Inicio del programa


El programa consta de una Interfaz gráfica de usuario con dos botones un texto
tipo edit, un texto constante y caja axis, el pushbutton 1 será el play de nuestro
sistema que iniciará la captura de video, el segundo pushbutton será el botón de
Stop. El cuadro edit1 es el encargado de mostrar el Sting del contador de vehı́culos
identificados en el video, y el texto mostrar la etiqueta que identificar la caja de
texto anterior, el video será mostrado en el elemento ”axis”.

Figure 2: Interfaz GUI

Configuración del video


Al crear la interfaz GUI, la herramienta guide de Matlab automáticamente gen-
era un programa, se seleccionó la función del pushbutton1 que es el botón que
corresponde al play del video.
Dentro de esta función se programó el siguiente código:

s e t ( h a n d l e s . pushbutton1 , ’ Enable ’ , ’ o f f ’ ) ;
s e t ( h a n d l e s . pushbutton2 , ’ UserData ’ , 0 ) ;
v i d = v i d e o i n p u t ( ’ w i n v i d e o ’ , 1 , ’ YUY2 320x240 ’ ) ;
v i d . R e t u r n e d C o l o r s p a c e= ’ rgb ’ ;
src = g e t s e l e c t e d s o u r c e ( vid ) ;
v i d . FramesPerTrigger =1;
v i d . FrameGrabInterval =3;
v i d . T r i g g e r R e p e a t=I n f ;
s t a r t ( vid ) ;
c o n t e r =0;

2 of 7
Se utilizan dos handles uno para cada pushbutton, para permitir que inicie el video,
posteriormente utilizaremos un while para que el programa capture los frames del
video que estará ejecutándose cuando mientras la señal que obtendremos del push-
button2 sea ”true” o verdadera, por lo que se agregó la segunda lı́nea de han-
dles.pushbutton2, ’UserData’, 0. El caso opuesto se da en la función del pushbutton
2.
s e t ( h a n d l e s . pushbutton1 , ’ Enable ’ , ’ on ’ ) ;
s e t ( h a n d l e s . pushbutton2 , ’ UserData ’ , 1 ) ;
Las siguientes lı́neas en la función de pushbutton1 son para configurar los colores,
los frames y el comienzo del video, la variable ”conter” que es un contador que se
utilizara para arrojar la información de cuantos vehı́culos aparecerán en el video.

Identificación de los vehı́culos


Se creó un ciclo while que se estará ejecutando mientras el valor ”true” se cambiado
a ”false” por el pushbutton2 del Stop.
Iniciando con el procesamiento de imágenes se requiere primero adquirirlas lo cual
se hará con a la función getdata que esta igualada a la variable ”imagen”. Poste-
riormente se procede a convertir la variable ”imagen” a escala de grises, después
es convertida a tipo binario seleccionando un umbral del 0.3 y es se obtiene la ne-
gación.

imagen=g e t d a t a ( vid , 1 , ’ u i n t 8 ’ ) ;
g r i s=r g b 2 g r a y ( imagen ) ;
b i n=im2bw ( g r i s , 0 . 3 ) ;
n e g b i n=not ( b i n ) ;
Se dilataron y erosionaron los frames del video para obtener una mejor definición
de las figuras que aparecerı́an en las imágenes. Posteriormente utilizamos un han-
dles para ”axes” que es el elemento que contendrá esta sucesión de imágenes y
seleccionamos la imagen que se desea mostrar precisamente en el cuadro del axes
con un imshow.
forma=s t r e l ( ’ d i s k ’ , 5 ) ;
i m g d i l=i m d i l a t e ( negbin , forma ) ;
imgero=imerode ( i m g d i l , forma ) ;
i m g d i l 2=i m d i l a t e ( imgero , forma ) ;

axes ( handles . axes1 ) ;


imshow ( imagen ) ;
Se creó la variable ”descript” con todas las mediciones arrojadas por regionprops
y se obtienen sus mediciones con la función ”lenght” y se deposita en la variable
”tam”.

[ e t i q , num]= b w l a b e l ( i m g d i l 2 ) ;
d e s c r i p t=r e g i o n p r o p s ( i m g d i l 2 , ’ a l l ’ ) ;
tam=l e n g t h ( d e s c r i p t ) ;

3 of 7
Se creó un ciclo ”for” que se ejecutara según el tamaño de la variable ”tam”. Den-
tro del ciclo for obtenemos el MajorAxisLength y el MinorAxisLenght de todas las
formas que aparecerán en el video. El MajorAxisLength arroja la medición del eje
mayor suponiendo que la figura es una elipse ósea el radio ”a” y MajorAxisLength
el eje menor o radio menor llamado ”b”. Obteniendo estas dos mediciones podemos
calcular el área de la ”elipse”. El área calculada con los ejes es comparada con el
área que regionprops calcula, la razón que existe entre estas dos áreas se utilizara
para parametrizar las figuras.

a e l p = d e s c r i p t ( i ) . MajorAxisLength / 2 ;
b e l p = d e s c r i p t ( i ) . MinorAxisLength / 2 ;
a1 ( i , 1 ) = ( p i ∗ a e l p ∗ b e l p ) ;
a2 ( i ,1)= d e s c r i p t ( i ) . Area ;
r e s ( i ,1)= a2 ( i , 1 ) / a1 ( i , 1 ) ;

kelp = res ( i , 1 ) ;
e l p=1−k e l p ;
elpmat ( i ,1)= e l p ;
Se obtuvo el Bounding Box de cada una de las figuras que aparecerán en el video
y el número de figura que es posteriormente se grafica en el imshow.

thisBB = d e s c r i p t ( i ) . BoundingBox ;
r e c t a n g l e ( ’ P o s i t i o n ’ , [ thisBB ( 1 ) , thisBB ( 2 ) , thisBB ( 3 ) , thisBB ( 4 ) ]
, ’ EdgeColor ’ , ’ r ’ , ’ LineWidth ’ , 2 )

c e n t r o=d e s c r i p t ( i ) . C e n t r o i d ;
t x t 1=num2str ( i ) ;
t e x t ( c e n t r o ( 1 ) , c e n t r o ( 2 ) , txt1 , ’ V e r t i c a l A l i g n m e n t ’ , ’ top ’ , . . .
’ H o r i z o n t a l A l i g n m e n t ’ , ’ l e f t ’ , ’ C o l o r ’ , ’m’ , ’ FontWeight ’ , ’ Bold ’ )

Figure 3: Relacion entre el área de la elipse y el área de la región de la figura.

Al momento de analizar los datos obtenidos por ”elp”, que es la razón entre las
áreas menos 1, se observó que los autos tenı́an un valor siempre menor a 0.03 y

4 of 7
cualquier otra figura un valor mayor a 0.1 y se parametrizaron estos lı́mites dentro
de un if. Dentro de estos ciclos se utilizó un contador que mostrar el número de
figuras que representan a los autos y que mostrar 0 cuando hubiese ausencia de los
mismos en el video.

f o r i =1:tam
i f e l p >0.1
c o n t e r =0;
end
i f e l p <0.03
c o n t e r=tam−1;
s e t ( h a n d l e s . e d i t 1 , ’ S t r i n g ’ , num2str ( c o n t e r ) ) ;
end
hold o f f
end

Figure 4: Mediciones arrojados por las figuras y utilizadas para parametrizar el


sistema.

Resultados
Al momento de probar el programa primero se visualizó el video en binario para
ajustar el umbral y la luz que afectaba al video. Una vez ajustado el umbral los
resultados fueron buenos.

Figure 5: Video en binario, y el sistema detectando 3 figuras e identificando 2


autos.

5 of 7
Figure 6: El sistema contando correctamente el único auto que existe en el video

Figure 7: El sistema contando correctamente los dos autos del video

Figure 8: El sistema contando correctamente los tres autos del video e ignorando
el objeto desconocido.

6 of 7
Referencias S. Somaraj and M. A. Hussain, ”A Novel Image Encryption Technique Using RGB
Bibliográficas Pixel Displacement for Color Images,” 2016 IEEE 6th International Conference on
Advanced Computing (IACC), Bhimavaram, 2016, pp. 275-279. doi: 10.1109/I-
ACC.2016.59

7 of 7

Você também pode gostar