II31 SISTEMAS INFORMÁTICOS Memoria

Anuncio
UNIVERSITAT JAUME I
II31
SISTEMAS INFORMÁTICOS
INGENIERÍA INFORMÁTICA
Curso 2009-2010
Memoria Técnica del Proyecto
Localizador de las líneas de campo en un vídeo
deportivo
Proyecto presentado por el Alumno
Carlos Sorribes Ojeda
Dirigido por Raúl
Montoliu Colás
Castellón, a 18 de Septiembre de 2010
Resumen
Este documento presenta la memoria de la asignatura sistemas informáticos (II31), asignatura
troncal de segundo de ciclo de ingenierı́a informática de la Universidad Jaume I, que forma parte
de la última etapa de formación de los alumnos que finalizan sus estudios. En esta asignatura
se inicia al alumno en los aspectos de estudio, desarrollo, gestión y culminación de un proyecto
de ingenierı́a informática mediante la realización de un trabajo de investigación y desarrollo,
académicamente dirigido.
El proyecto elegido consiste en la detección de las principales lı́neas que delimitan una cancha
de baloncesto en un vı́deo deportivo. Adicionalmente también se ha desarrollado una interfaz
gráfica que permita ajustar los parámetros iniciales para cada vı́deo de una manera cómoda. Para
la realización de pruebas y análisis de resultados se han utilizado fragmentos de vı́deos de partidos
de baloncesto pertenecientes a la liga ACB, que es la principal liga de baloncesto profesional de
España.
La aplicación que detecta las lı́neas de campo se ha desarrollado en C++ utilizando la
librerı́a OpenCv para el tratamiento de los vı́deos e imágenes, mientras que la interfaz gráfica se
ha desarrollado en Visual Basic .NET.
Palabras Clave
Visión por computador, análisis de vı́deos deportivos, detección de lı́neas, OpenCv
1
2
Índice general
1. Introducción
11
1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.2. Conceptos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.3. Vista previa del trabajo realizado . . . . . . . . . . . . . . . . . . . . . . . . .
14
1.4. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
1.5. Organización del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2. Planificación
19
2.1. Identificación de las tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.2. Planificación inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.3. Planificación real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3. Detección de las lı́neas de campo
23
3.1. Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
23
Índice general
3.2. Diseño del algoritmo de detección de las lı́neas de campo en un vı́deo . . . . . .
25
3.3. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
3.3.1. Algoritmo que obtenga los pı́xeles pertenecientes a la lı́nea que se está buscando a partir de una imagen . . . . . . . . . . . . . . . . . . . . . . .
27
3.3.2. Algoritmo que ajuste a una recta a los puntos encontrados . . . . . . . .
31
3.3.3. Algoritmo que ajuste la zona de búsqueda de la lı́nea . . . . . . . . . . .
35
3.3.4. Algoritmo que recorte las lı́neas encontradas . . . . . . . . . . . . . . .
35
4. Aplicación gráfica
37
4.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.2. Entorno de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.3. Análisis de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.4. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.5. Resultado final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5. Pruebas y Resultados
49
5.1. Partido 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.2. Partido 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
6. Futuras ampliaciones
59
4
Índice general
7. Conclusiones
61
7.1. Conclusiones objetivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
7.2. Conclusiones personales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
5
Índice general
6
Índice de figuras
1.1. Aspecto de una pista de baloncesto . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
1.2. Detección de las lı́neas de campo en un vı́deo deportivo . . . . . . . . . . . . . . . . . .
14
1.3. Pantalla principal de la aplicación LineDetectorGUI . . . . . . . . . . . . . . . . . . . .
15
1.4. Pantalla de configuración de los parametros iniciales del partido . . . . . . . . . . . . . .
15
2.1. Estimación de la duración de las tareas del proyecto . . . . . . . . . . . . . . . . . . .
21
2.2. Duración real de las tareas del proyecto . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.1. Captura de uno de los vı́deos utilizados en el proyecto . . . . . . . . . . . . . . . . . .
24
3.2. Recorte de las lı́neas de la pista encontradas . . . . . . . . . . . . . . . . . . . . . . .
25
3.3. Zonas de búsqueda de las lı́neas de la pista . . . . . . . . . . . . . . . . . . . . . . .
27
3.4. Detalle de la lı́nea de banda superior . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.5. Máscaras utilizadas para la detección de las lı́neas de campo . . . . . . . . . . . . . . .
28
3.6. Ejemplo de funcionamiento del algoritmo . . . . . . . . . . . . . . . . . . . . . . . .
29
7
Índice de figuras
3.7. Ejemplo de funcionamiento del algoritmo . . . . . . . . . . . . . . . . . . . . . . . .
30
3.8. Ejemplo de ajuste por mı́nimos cuadrados a una recta . . . . . . . . . . . . . . . . . .
32
3.9. Ejemplo de ajuste por mı́nimos cuadrados a una recta con un falso positivo . . . . . . . . .
32
3.10. Distancia de los puntos a la recta . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.11. Segunda iteración del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.12. Ajuste de la zona de búsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.1. Diseño de la pantalla principal de LineDetectorGUI . . . . . . . . . . . . . . . . . . . .
39
4.2. Parámetros de la zona de búsqueda para la lı́nea de banda superior . . . . . . . . . . . .
41
4.3. Diseño de la pantalla de configuración . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.4. Aspecto final de la pantalla principal de LineDetectorGUI . . . . . . . . . . . . . . . . .
43
4.5. Cuadro de diálogo para seleccionar la carpeta del partido . . . . . . . . . . . . . . . . .
43
4.6. Partido sin fichero de configuración . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.7. Partido con fichero de configuración . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.8. Pantalla de configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.9. Cuadro de diálogo para seleccionar el archivo de vı́deo . . . . . . . . . . . . . . . . . .
45
4.10. Configuración guardada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.11. Botón de Ejecutar activado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
8
Índice de figuras
4.12. Ejecución de LineDetector con el partido seleccionado. . . . . . . . . . . . . . . . . . .
47
5.1. Captura del partido Girona - Pamesa.(1) . . . . . . . . . . . . . . . . . . . . . . . .
51
5.2. Captura del partido Girona - Pamesa.(2) . . . . . . . . . . . . . . . . . . . . . . . .
52
5.3. Captura del partido Real Madrid - Pamesa.(1) . . . . . . . . . . . . . . . . . . . . . .
54
5.4. Captura del partido Real Madrid - Pamesa.(2) . . . . . . . . . . . . . . . . . . . . . .
55
5.5. Problemas en las transiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
6.1. Ampliación del proyecto para averiguar la posición de los jugadores utilizando la posición de las
lı́neas de la pista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
9
Índice de figuras
10
Capı́tulo 1
Introducción
A lo largo de este capı́tulo se explicará cual es el hecho que nos ha movido a desarrollar
este proyecto, se definirán una serie de conceptos para facilitar al lector la compresión del resto
del documento y se expondrán los objetivos que se pretenden conseguir con la realización del
proyecto.
1.1
Motivación
El objetivo de este proyecto es implementar un serie de algoritmos que permitan detectar las
principales lı́neas de un campo de baloncesto en un vı́deo perteneciente a un partido de baloncesto.
Este proyecto forma parte de un proyecto más complejo que tendrı́a como objetivo conocer en
que lugar del campo se encuentra un determinado jugador en cada instante del partido. A partir
de esta información se podrı́an obtener estadı́sticas y patrones de movimiento de los jugadores
que podrı́an ser utilizados por los cuerpos técnicos de los equipos de baloncesto para analizar
tanto a su propio equipo como a los rivales.
El problema que se encuentra a la hora de determinar la posición de cada jugador es que
normalmente la posición de la cámara no es fija si no que se encuentra en movimiento, por lo
que es necesario tener algún tipo de referencia para saber la posición de un jugador. Por este
motivo es necesario poder determinar dónde se encuentran las lı́neas del campo. Ya que una vez
encontradas se podrá saber la posición de un jugador en relación a las mismas. Delimitar las
lı́neas del campo también evitará realizar calculos innecesarios ya que sólo se desea saber lo que
11
1.2. Conceptos
ocurre dentro de la pista y el resto de la imagen que queda fuera de los lı́mites del campo puede
ser ignorada.
1.2
Conceptos
Baloncesto
El baloncesto (del inglés basketball) es un deporte de equipo que consiste básicamente en
introducir una pelota en un aro, del que cuelga una red. En algunas regiones se llama básquet, al
castellanizar el término inglés para la palabra cesto. Se juega con dos equipos de cinco personas,
durante 4 periodos o cuartos de 10 minutos cada uno. Al finalizar el segundo cuarto, se realiza
un descanso, normalmente de 10 a 20 minutos según la reglamentación propia de campeonato al
cual el partido pertenezca. [1]
Pista de baloncesto
Una pista de baloncesto tiene que ser una superficie dura, plana, rectangular y libre de
obstáculos, con 15 m de ancho y 28 m de longitud. El campo está dividido en dos mitades iguales
separados por la lı́nea denominada de medio campo y con un cı́rculo que parte del centro de la
pista, el cı́rculo central mide 3,6 m diámetro. Para cada equipo, el medio campo que contiene la
canasta que se defiende se denomina medio campo defensivo y el medio campo que contiene la
canasta en la que se pretende anotar se denomina medio campo ofensivo. En los lados menores
se sitúan los aros que están a 3,05 m de altura y se introducen 1,20 m dentro del rectángulo de
juego. Paralela a la lı́nea de fondo encontramos la lı́nea de tiros libres, que se encuentra a 5,80
m de la lı́nea de fondo y a 4,60 m de la canasta. El cı́rculo donde se encuentra la lı́nea de tiros
libres tiene un diámetro de 3,6 m. Todas las lı́neas miden 5 cm. de ancho. [2]
A continuación se indica la denominación que se utilizará en este documento para hacer
referencia a cada una de las lı́neas de la pista.
Lı́neas de fondo. Son las lı́neas que delimitan la anchura de la pista.
Lı́neas de banda o laterales. Son las lı́neas que delimitan la longitud de la pista.
Visión por computador
12
1.2. Conceptos
Figura 1.1: Aspecto de una pista de baloncesto
La Visión por Computador (del inglés Computer Vision), es un subcampo de la inteligencia
artificial. El propósito de la visión por computador es programar un computador para que “entienda” una escena o las caracterı́sticas de una imagen. Los objetivos tı́picos de la visión artificial
incluyen:
La detección, segmentación, localización y reconocimiento de ciertos objetos en imágenes
(por ejemplo, caras humanas).
La evaluación de los resultados (ej.: segmentación, registro).
Registro de diferentes imágenes de una misma escena u objeto, i.e., hacer concordar un
mismo objeto en diversas imágenes.
Seguimiento de un objeto en una secuencia de imágenes.
Mapeo de una escena para generar un modelo tridimensional de la escena; tal modelo podrı́a
ser usado por un robot para navegar por la escena
Estimación de las posturas tridimensionales de humanos.
Búsqueda de imágenes digitales por su contenido.
Estos objetivos se consiguen por medio de reconocimiento de patrones, aprendizaje estadı́stico, geometrı́a de proyección, procesado de imágenes, teorı́a de gráficos y otros campos. La visión
artificial cognitiva está muy relacionada con la psicologı́a cognitiva y la computación biológica.
13
1.3. Vista previa del trabajo realizado
1.3
Vista previa del trabajo realizado
El resultado principal del desarrollo de este proyecto ha sido una aplicación que nos permita
detectar las principales lı́neas en una pista de baloncesto y ha recibido el nombre LineDetector.
Como complemento para facilitar el uso de LineDetector se ha implementado también una interfaz
gráfica que permita ajustar la configuración inicial de los vı́deos utilizados. Esta interfaz ha recibido
el nombre de LineDetectorGUI
A forma de presentación visual del trabajo realizado en este proyecto, se muestran a continuación algunas capturas de pantalla del resultado final de la aplicación.
En la figura 1.2 se muestra el resultado de ejecutar la aplicación LineDetector sobre uno
de los vı́deos que se han utilizado para la realización de las pruebas. Las lı́neas encontradas se
muestran de color rojo sobreimpresionadas en el vı́deo original.
Figura 1.2: Detección de las lı́neas de campo en un vı́deo deportivo
En la figura 1.3 se muestra la pantalla principal de la aplicación LineDetectorGUI. Desde esta
aplicación se puede ajustar la configuración inicial necesaria para el correcto funcionamiento de la
aplicación que detecta las lı́neas de campo. LineDetectorGUI también permite lanzar la ejecución
LineDetector.
14
1.3. Vista previa del trabajo realizado
Figura 1.3: Pantalla principal de la aplicación LineDetectorGUI
En la figura 1.4 se muestra la pantalla desde la cual se pueden cambiar los parámetros de
configuración iniciales del vı́deo del partido. En el capı́tulo 4 se explicarán con mayor profundidad
cada uno de estos parámetros.
Figura 1.4: Pantalla de configuración de los parametros iniciales del partido
15
1.4. Objetivos
1.4
Objetivos
Los principales objetivos que se desean conseguir con la realización de este proyecto son los
siguientes:
Diseñar e implementar una aplicación que detecte de forma automática las principales lı́neas
de una pista de baloncesto en un vı́deo deportivo.
Reducir el tiempo de ejecución de la aplicación lo mayor posible.
Crear una interfaz gráfica que permita interactuar con la aplicación que detecta las lı́neas
del campo de una forma fácil.
Un objetivo importante en este proyecto, es que el código presentado este bien estructurado,
que sea fácil de comprender y de utilizar.
Hay que mencionar que el desarrollo de una interfaz gráfica no era uno de los objetivos
iniciales del proyecto. Sin embargo, durante el desarrollo del proyecto se consideró de gran utilidad
desarrollar una interfaz gráfica que permitiera realizar la configuración necesaria para cada vı́deo
de una manera cómoda y ágil.
1.5
Organización del documento
La estructura que presenta este documento es la siguiente:
Capı́tulo 1 - Introducción. Es el capı́tulo actual y tiene como misión realizar una breve
introducción al proyecto, indicando la motivación, objetivos y definiendo una serie de conceptos
para facilitar la comprensión del resto del documento.
Capı́tulo 2 - Planificación. En este capı́tulo se muestra la planificación inicial propuesta
antes de iniciar la realización del proyecto y, la planificación real.
Capı́tulo 3 - Detección de las lı́neas de campo. Este capı́tulo abarca el análisis, diseño
e implementación de la aplicación que detecta las lı́neas del campo.
16
1.5. Organización del documento
Capı́tulo 4 - Aplicación gráfica. En este capı́tulo se detalla el análisis, diseño e implementación de la interfaz gráfica desarrollada para este proyecto.
Capı́tulo 5 - Pruebas y resultados. Este capı́tulo muestra los experimentos efectuados
para comprobar el correcto funcionamiento de la aplicación desarrollada.
Capı́tulo 6 - Futuras ampliaciones. Se analizarán las posibles mejoras y/o ampliaciones
que se podrán realizar a la aplicación en el futuro.
Capı́tulo 7 - Conclusiones. Se presentarán las conclusiones alcanzadas tras la realización
del proyecto.
17
1.5. Organización del documento
18
Capı́tulo 2
Planificación
En este capı́tulo se va a presentar la planificación realizada para este proyecto. En primer
lugar se identificarán las tareas necesarias para la realización de este proyecto y posteriormente
se estimará el tiempo necesario para su desarrollo. Finalmente se mostrará cuál ha sido el tiempo
real dedicado a cada una de las tareas.
2.1
Identificación de las tareas
A partir de los objetivos fijados para el proyecto se han identificado como necesarias para la
realización del proyecto las tareas que se muestran el Cuadro 2.1
19
2.1. Identificación de las tareas
Fase
Planificación
Análisis y diseño
Implementación
Experimentación
Documentación
Tareas
Definición de los objetivos del proyecto
Búsqueda e instalación del software necesario
Definición de las tareas
Estimación temporal de las tareas
Análisis de requisitos
Diseño del algoritmo de detección de las lı́neas del campo
Detección de las lı́neas del campo
Preparación de las pruebas
Realización de las pruebas
Conclusiones
Realización de la memoria
Preparación de la presentación del proyecto
Presentación del proyecto
Cuadro 2.1: Lista de tareas del proyecto
20
2.2. Planificación inicial
2.2
Planificación inicial
En la figura 2.1 se muestra una estimación inicial de la duración de las tareas identificadas.
Respecto al orden de ejecución de las tareas, como el proyecto ha sido realizado por una única
persona, las tareas se han ejecutado en orden secuencial.
Figura 2.1: Estimación de la duración de las tareas del proyecto
21
2.3. Planificación real
2.3
Planificación real
Una vez finalizadas todas las tareas pertenecientes a la realización del proyecto la duración del
mismo se ha visto aumentada de manera considerable. Esto es debido a que durante la realización
del proyecto se detectó la necesidad de implementar una interfaz gráfica que permitiera ajustar
la configuración de los vı́deos utilizados en el proyecto. En la figura 2.2 se muestra la nueva lista
de tareas junto con la duración real de cada una.
Figura 2.2: Duración real de las tareas del proyecto
22
Capı́tulo 3
Detección de las lı́neas de campo
En este capı́tulo se detallarán las fases de análisis, diseño e implementación de la aplicación
que detecta las lı́neas de campo. En un primer punto se analizarán los vı́deos utilizados en el
proyecto para identificar patrones comunes en todos ellos referentes a las lı́neas. Con la información
obtenida en el análisis, se diseñarán los algoritmos necesarios para el proyecto.
3.1
Análisis
En primer lugar se han de definir algunos aspectos referentes a los vı́deos utilizados en este
proyecto. Todos los vı́deos han sido grabados desde uno de los laterales de la pista y desde una
posición fija. Sin embargo, la cámara realiza movimientos laterales, verticales y de zoom para
seguir la acción del juego, ya que la imagen no muestra la pista entera.
Analizando los vı́deos se observa que las lı́neas que se desea detectar no siempre aparecen en
la imagen, pero cuando son visibles normalmente siempre se encuentran en la misma zona de la
imagen. Por ejemplo, la lı́nea de banda inferior siempre se encuentra en la mitad inferior de la
imagen. Esto propicia que no sea necesario recorrer toda la imagen para buscar cada una de las
lı́neas, si no que sólo se deberá buscar en las zonas en las que sea mas probable que se encuentre
la lı́nea.
Con respecto a las lı́neas se observa que son siempre de color blanco y se diferencia claramente
la zona que pertenece a la pista de la que se encuentra fuera de ésta. Incluso en la mayorı́a de los
23
3.1. Análisis
casos las zonas interior y exterior de la pista tienen colores distintos. Por ejemplo en la figura 3.1
se puede ver como la lı́nea de banda superior siempre tiene arriba un color determinado, azul en
este caso, y debajo tiene el color del parquet. La situación inversa ocurre con la lı́nea de banda
inferior dónde tiene en la partes superior el color del parquet y en la parte inferior de color azul.
Esto mismo también ocurrirá en las lı́neas de fondo.
Figura 3.1: Captura de uno de los vı́deos utilizados en el proyecto
Este hecho es muy importante ya que nos proporciona una serie de patrones o máscaras que
deben cumplir las zonas de la pista que pertenezcan a una lı́nea. El hecho de que estos patrones
sean distintos para cada una de las lı́neas también nos permitirá distinguir en cada caso cuál es
la lı́nea encontrada.
24
3.2. Diseño del algoritmo de detección de las lı́neas de campo en un vı́deo
3.2
Diseño del algoritmo de detección de las lı́neas de campo en un vı́deo
En primer lugar se ha de mencionar que un vı́deo se compone de una serı́e de imágenes
(frames) independientes la una de la otra y que reproducidas a una cierta velocidad producen
una sensación de movimiento. Dicho esto, se puede simplificar el problema que se desea resolver
detectando las lı́neas del campo para cada una de las imágenes que componen un vı́deo. De igual
manera, dentro de un frame la detección de cada una de las lı́neas se puede realizar de una manera
individualizada. Por lo que el problema se reduce a encontrar una sola lı́nea en una imagen.
Con el fin de mejorar el aspecto visual de la aplicación, también se implementará un algoritmo
que se encargue de recortar las lı́neas encontradas. En la figura 3.2 se muestra el resultado que
queremos obtener con el algoritmo que recorte las lı́neas encontradas.
Figura 3.2: Recorte de las lı́neas de la pista encontradas
25
3.3. Implementación
A continuación se muestra el algoritmo diseñado para la detección de las lı́neas de campo en
un vı́deo deportivo.
INPUT :
NombreVideo : Nombre d e l vı́ d e o d e l p a r t i d o a a n a l i z a r
OUTPUT:
S a l i d a por p a n t a l l a
BEGIN
CrearVentana ()
V i d e o = A b r i r V i d e o ( NombreVideo )
f r a m e = ObtenerFrame ( V i d e o )
w h i l e ( f r a m e != NULL )
r e c t a B a n d a S u p e r i o r = DetectarLineaBandaSuperior ( frame )
r e c t a B a n d a I n f e r i o r = D e t e c t a r L i n e a B a n d a I n f e r i o r ( frame )
rectaFondoDerecha = DetectarLineaFondoDerecha ( frame )
r e c t a F o n d o I z q u i e r d a = D e t e c t a r L i n e a F o n d o I z q u i e r d a ( frame )
f r a m e = R e c o r t a r L i n e a s ( frame , r e c t a B a n d a S u p e r i o r , r e c t a B a n d a I n f e r i o r ,
rectaFondoDerecha , r e c t a F o n d o I z q u i e r d a )
MostrarImagen ( frame )
end w h i l e
C e r r a r V i d e o ( Video )
CerrarVentana ()
END
3.3
Implementación
El proceso de detección de cada una de las lı́neas se ha dividido en la implementación de
varios algoritmos que realicen tareas menores, de modo que al unirlos, obtengamos un algoritmo
más complejo que realice las acciones deseadas para esta parte del proyecto. Los algoritmos que
se implementarán serán los siguientes:
Algoritmo que obtenga los pı́xeles pertenecientes a la lı́nea que se está buscando a partir
de una imagen.
Algoritmo que ajuste a una recta a los puntos encontrados.
Algoritmo que ajuste la zona de búsqueda de la lı́nea.
26
3.3. Implementación
3.3.1
Algoritmo que obtenga los pı́xeles pertenecientes a la lı́nea que
se está buscando a partir de una imagen
Como ya se ha mencionado anteriormente, tras visionar los vı́deos utilizados en este proyecto
se ha observado que las lı́neas de la pista siempre se encontrarán sobre una zona de la imagen.
Este hecho nos permite no tener que buscar sobre toda la imagen si no que podemos deshechar
algunas zonas de la imagen. Por ejemplo, no será necesario buscar la lı́nea de fondo superior en
la parte inferior de la imagen ya que es poco probable que se encuentre allı́. En el caso de que
se encontrara en esa posición significarı́a que la cámara no está enfocando a la pista por lo que
se tratarı́a de un trozo del vı́deo en el que no hay acción en la pista, por ejemplo en un tiempo
muerto.
Por lo tanto, cada una de las lı́neas tendrá asignada una zona de búsqueda dentro de la
imagen. Esta zona de búsqueda será distinta para cada vı́deo ya que la posición en la que se
encuentra la cámara será diferente. En la figura 3.3 se muestra una imagen en la que se pueden
observar de color gris las zonas de búsqueda utilizadas para cada una de las lı́neas de la pista.
Figura 3.3: Zonas de búsqueda de las lı́neas de la pista
Este algoritmo tiene como objetivo obtener una lista con los pı́xeles que pertenecen a una
lı́nea dentro de una imagen. Por lo tanto se deberá definir un método para poder determinar si un
pı́xel pertenece a la lı́nea. Anteriormente se ha mencionado que las lı́neas del campo son siempre
27
3.3. Implementación
de color blanco, por lo tanto una opción podrı́a ser identificar los pı́xeles de color blanco o de
un color cercano a blanco. Esta opción no es la más adecuada ya que este método detectarı́a
muchos puntos que son de color blanco pero que no pertenecen a la lı́nea, como publicidades o
equipaciones de los equipos.
También se ha mencionado anteriormente que la lı́nea diferencia claramente la zona interior
y exterior de la pista que normalmente son de distinto color. En la figura 3.4 se puede ver como
la lı́nea de banda superior tendrá siempre una zona de color azul seguida de una lı́nea blanca y
finalmente otra zona del color del parquet.
Figura 3.4: Detalle de la lı́nea de banda superior
Llamaremos a estas imágenes máscaras y serán utilizadas para determinar si un pı́xel pertenece
a la lı́nea. Obviamente cada una de las lı́neas necesitará como mı́nimo una máscara distinta y
puede que alguna de las lı́neas necesite más de una máscara. La figura 3.5 muestra las máscaras
utilizadas para la detección de las lı́neas de banda y la lı́nea de fondo derecha. Como se puede
observar el color del interior de la pista en la lı́nea de fondo no es siempre el mismo por lo que se
han tenido que utilizar dos máscaras distintas.
Figura 3.5: Máscaras utilizadas para la detección de las lı́neas de campo
28
3.3. Implementación
A continuación se muestra el algoritmo para obtener la lista de pı́xeles que forman parte de
una lı́nea.
INPUT :
I m g O r i g e n : Frame d e l vı́ d e o
M a s c a r a s [ ] : A r r a y con l a s i m á g e n e s de l a s m á s c a r a s de l a lı́ n e a
C o l I n i c i o : Columna de l a imagen en l a que c o m i e n z a l a zona de b ú s q u e d a
C o l F i n : Columna de l a imagen en l a que f i n a l i z a l a zona de b ú s q u e d a
F i l a I n i c i o : F i l a de l a imagen en l a que c o m i e n z a l a zona de b ú s q u e d a
F i l a F i n : F i l a de l a imagen en l a que f i n a l i z a l a zona de b ú s q u e d a
Umbral : E r r o r máximo p e r m i t i d o p o r pı́ x e l
OUTPUT:
L i s t a P u n t o s : L i s t a con l o s p u n t o s d e t e c t a d o s
BEGIN
ListaPuntos = CrearListaVacia ()
for c = C o l I n i c i o to ColFin
for f = F i l a I n i c i o to F i l a F i n
f o r mask i n m a s c a r a s
error = 0
f o r c c = 0 ; pC = c t o mask . Ancho
f o r f f = 0 ; pF = f t o mask . A l t o
e r r o r += C a l c u l a r E r r o r ( I m g O r i g e n [ pC ] [ pF ] , mask [ c c ] [ f f ] )
end f o r
end f o r
i f e r r o r < ( Umbral ∗ mask . Ancho ∗ mask . A l t o )
punto = C r e a r P u n t o ( c , f )
L i s t a P u n t o s . A g r e g a r ( punto )
end i f
end f o r
end f o r
end f o r
END
Figura 3.6: Ejemplo de funcionamiento del algoritmo
Supongamos el ejemplo que se muestra en la figura 3.6. Para calcular el error obtenido en el
29
3.3. Implementación
subconjunto de pı́xeles marcado en negrita procederı́amos de la siguiente forma:
ε = |a(1, 1) − m(1, 1)| + |a(1, 2) − m(1, 2)| + ... + |a(3, 3) − m(3, 3)| =
2 + 6 + 1 + 4 + 0 + 10 + 1 + 1 + 8 = 33
Para ese subconjunto de pı́xeles se ha obtenido un error con respecto a la máscara de 33
que dividido por el número de pı́xeles nos da un error promedio de 3,7. Si el error por pı́xel
permitido fuera menor que 3,7 el pı́xel (2,2) serı́a uno de los detectados como parte de la lı́nea. A
continuación se seguirı́a calculando el error del subconjunto formado por los pı́xeles del (1,2) al
(3,4) y ası́ sucesivamente hasta el último subconjunto formado por los pı́xeles del (2,3) al (4,5).
A continuación se muestra el resultado de ejecutar el algoritmo que obtenga los pı́xeles
pertenecientes a la lı́nea que se está buscando a partir de una imagen. En la figura 3.7 aparecen
de color verde los pı́xeles detectados como parte de una lı́nea.
Figura 3.7: Ejemplo de funcionamiento del algoritmo
30
3.3. Implementación
3.3.2
Algoritmo que ajuste a una recta a los puntos encontrados
Una vez tenemos una lista de los pı́xeles que pertenecen a una lı́nea debemos encontrar una
recta que se ajuste a ese conjunto de puntos. El método que se ha utilizado en este proyecto ha
sido el ajuste por mı́nimos cuadrados.
El ajuste por mı́nimos cuadrados es una técnica de análisis numérico encuadrada dentro de la
optimización matemática, en la que, dados un conjunto de pares se intenta encontrar la función
que mejor se aproxime a los datos de acuerdo con el criterio de mı́nimo error cuadrático. En su
forma más simple, intenta minimizar la suma de cuadrados de las diferencias ordenadas entre los
puntos generados por la función y los correspondientes en los datos.
En nuestro caso queremos ajustar una recta de la forma y = m ∗ x + n siendo,
m=
N Sxy − Sx Sy
N Sxx − Sx Sx
n=
Sxx Sy − Sx Sxy
N Sxx − Sx Sx
donde,
N . Número de puntos utilizados en el ajuste
Sx . Suma de los valores de x.
Sy . Suma de los valores de y.
Sxx . Suma de los valores de x2 .
Sxy . Suma de los valores de x ∗ y.
En la figura 3.8 podemos observar un ejemplo de ajuste por mı́nimos cuadrados con una
muestra de 8 puntos.
Un problema con el que nos hemos encontrado durante la realización de este proyecto es que
en ocasiones se detectan puntos que no pertenecen realmente a la lı́nea. Esto es lo que denominaremos falsos positivos o outliers. Estos falsos positivos pueden hacer que la recta calculada no
se ajuste bien. En la figura 3.9 se muestra lo que ocurre cuando introducimos un punto que se
31
3.3. Implementación
Figura 3.8: Ejemplo de ajuste por mı́nimos cuadrados a una recta
Figura 3.9: Ejemplo de ajuste por mı́nimos cuadrados a una recta con un falso positivo
aleja bastante del resto. Como se observa en la gráfica, la recta calculada en esta ocasión ya no
se ajusta tanto a los puntos como lo hacı́a anteriormente.
Para realizar el mejor ajuste posible de la recta intentaremos eliminar estos falsos positivos
del conjunto de puntos detectados utilizando un ajuste por mı́nimos cuadrados iterativo. En
primer lugar se calculará la recta de la misma forma que se ha indicado anteriormente. A continuación calcularemos la distancia que hay desde cada uno de los puntos hasta la recta encontrada
descartando para la siguiente iteración los puntos que estén a una distancia mayor que un cierto
valor umbral. Para calcular la distancia de un punto A y una recta R de la forma y = mx + n
utilizaremos la fórmula
32
3.3. Implementación
distancia(A, R) =
|mAx − Ay + n|
√
m2 + 1
Figura 3.10: Distancia de los puntos a la recta
En la siguiente iteración se volverá a calcular la recta pero sin utilizar los puntos que hemos
descartado anteriormente y tras calcular la recta se volverán a descartar los puntos más alejados.
Se seguirá iterando hasta que no se produzca ningún cambio entre una iteración y la siguiente.
Figura 3.11: Segunda iteración del algoritmo
33
3.3. Implementación
A continuación se muestra el algoritmo de ajuste de una recta por mı́nimos cuadrados iterativo.
INPUT :
L i s t a P u n t o s : L i s t a con l o s p u n t o s d e t e c t a d o s
MaxDist : D i s t a n c i a máxima de un punto a l a r e c t a
OUTPUT:
Recta
BEGIN
Recta = ( 0 , 0 )
rectaEncontrada = false
ListaDescartados = CrearListaVacia ()
do{
cambios = f a l s e
i f ( rectaEncontrada )
f o r punto i n L i s t a D e s c a r t a d o s
i f D i s t a n c i a R e c t a P u n t o ( punto , R e c t a ) <= MaxDist
L i s t a D e s c a r t a d o s . E l i m i n a r ( punto )
L i s t a P u n t o s . A g r e g a r ( punto )
end i f
end f o r
end i f
Recta = AjusteMinimosCuadrados ( L i s t a P u n t o s )
f o r punto i n L i s t a P u n t o s
i f D i s t a n c i a R e c t a P u n t o ( punto , R e c t a ) > MaxDist
L i s t a P u n t o s . E l i m i n a r ( punto )
L i s t a D e s c a r t a d o s . A g r e g a r ( punto )
end i f
end f o r
} while ( cambios )
END
34
3.3. Implementación
3.3.3
Algoritmo que ajuste la zona de búsqueda de la lı́nea
Ya se ha mencionado anteriormente que para detectar cada una de las lı́neas se utilizan zonas
de búsqueda en lugar de recorrer toda la imagen. También hemos de tener en cuenta que entre
dos fotogramas consecutivos que tienen lugar en un vı́deo, existen unas mı́nimas diferencias y por
lo tanto la posición de las lı́neas variará muy poco entre ambos. Sabiendo esto, una vez hayamos
encontrado una recta se reducirá su zona de búsqueda a 10 pı́xeles por encima y por debajo de la
recta. En el caso de que no se haya encontrado una recta para esa lı́nea en la imagen se volverá a
su zona de búsqueda original.
Figura 3.12: Ajuste de la zona de búsqueda
3.3.4
Algoritmo que recorte las lı́neas encontradas
Mediante los anteriores algoritmos se ha conseguido encontrar las rectas que definen cada
una de las lı́neas del campo dentro de la imagen. Una recta por definición tiene una longitud
infinita, pero eso no ocurre con las lı́neas de una pista de baloncesto. Cada una de las lı́neas
tiene una longitud definida y finaliza cuando se produce la intersección con alguna de las otras
lı́neas. Las lı́neas de banda tendrán como inicio y fin los puntos de corte con las lı́neas de fondo
y viceversa.
Para simular este comportamiento, una vez finalizado el proceso de detección de las lı́neas de
la pista para un frame determinado se deberán calcular los puntos de corte de las rectas calculadas
para lı́neas de fondo con las rectas de las dos lı́neas de banda y viceversa.
Para calcular el punto de corte entre dos rectas supongamos las rectas y = m1 x + n1 y
35
3.3. Implementación
y = m2 x + n2 . Estas rectas se cortarán en un punto único P (x, y), dónde la coordenada x del
punto P será
x=
n2 − n1
m1 − m2
Para obtener la coordenada y del punto bastará con sustituir x por el valor calculado anteriormente en cualquiera de las dos rectas.
36
Capı́tulo 4
Aplicación gráfica
4.1
Objetivos
El objetivo de esta tarea será diseñar y desarrollar una interfaz gráfica que ofrezca al usuario
opciones para interactuar con las operaciones implementadas en el punto anterior. Al finalizar, se
nos permitirá:
Seleccionar un archivo de vı́deo
Crear o modificar la configuración inicial de un vı́deo
Lanzar la ejecución de la aplicación LineDetector con el vı́deo seleccionado anteriormente.
Configurar los parámetros de ejecución de la aplicación LineDetector, fotogramas inicial y
final de reproducción y modo de ejecución.
4.2
Entorno de desarrollo
Para la realización de esta parte del proyecto se ha optado por utilizar el entorno de desarrollo
Microsoft Visual Basic 2005. El lenguaje de desarrollo elegido es Visual Basic.NET. Se ha elegido
37
4.3. Análisis de requisitos
este lenguaje de programación debido a que el alumno ya tenı́a conocimientos sobre el desarrollo de
aplicaciones en Visual Basic.NET adquiridos en una estancia en prácticas realizada anteriormente.
4.3
Análisis de requisitos
Cabe destacar que el desarrollo de una interfaz gráfica no formaba parte de la lista de tareas
inicial del proyecto. Se optó por desarrollar esta interfaz con el objetivo principal de facilitar la
utilización de la aplicación LineDetector ya que se trata de una aplicación de consola. Durante
el análisis de requisitos se expusieron las necesidades que deberı́a cubrir la aplicación gráfica y se
llegó a un acuerdo para intentar cubrirlas todas sin extender el proyecto más de lo necesario.
A la hora de realizar el diseño de la interfaz, se debı́a tener en cuenta cuál era el objetivo
principal de la aplicación, por lo tanto no se buscaba la realización de una interfaz compleja
que fuera capaz de ofrecer grandes funcionalidades, sino que se perseguı́a la realización de una
interfaz sencilla e intuitiva.
4.4
Diseño
Pantalla Principal
En la figura 4.1 se muestra un boceto del aspecto que debı́a tener la interfaz. Desde la pantalla
principal de la aplicación lo primero que deberemos hacer será elegir el vı́deo que queremos cargar.
Para esto se pulsará el botón (1) y se seleccionará la carpeta en la que se encuentra el vı́deo.
En este momento el programa automáticamente buscará en esa misma carpeta el archivo de
configuración de los parámetros iniciales. Este archivo debe tener el nombre config y seguir la
estructura que se especificará más adelante.
Al pulsar el botón (2) se abrirá la pantalla de configuración en la que nos permitirá crear
una configuración para el partido o modificar una existente en el caso de que se hubiera creado
anteriormente. El siguiente paso será seleccionar la ubicación del archivo ejecutable de LineDetector. Pulsando en el botón (3) se abrirá un cuadro de diálogo en el que podremos indicar a la
aplicación la localización del archivo.
38
4.4. Diseño
Figura 4.1: Diseño de la pantalla principal de LineDetectorGUI
El siguiente paso será configurar los parámetros de ejecución de LineDetector. Podremos
elegir el modo de ejecución de la aplicación entre Reproducir y grabar. Con el modo reproducir
simplemente veremos por pantalla el resultado de la ejecución, mientras que si se elige el modo
Grabar se guardará el resultado de la ejecución en un archivo de vı́deo. También se podrán
configurar cuales serán los frames inicial y final del vı́deo. Esta funcionalidad es de bastante
utilidad ya que en bastantes ocasiones hay trozos del vı́deo que no queremos analizar, como por
ejemplo los calentamientos de los equipos previos al comienzo del partido.
Una vez realizados los pasos explicados anteriormente al pulsar el botón Ejecutar(5) se lanzará el ejecutable de LineDetector que se ha seleccionado con la configuración indicada.
Pantalla de configuración
La pantalla de configuración se utilizará para crear y modificar el fichero de configuración
que contiene los parámetros de cada una de las lı́neas que se desea detectar. Este fichero será un
archivo de texto con la siguiente estructura:
39
4.4. Diseño
Listing 4.1: Ejemplo de fichero de configuración
Video = v i d e o . a v i
I n i c i o Linea
Nombre = banda s u p e r i o r
Row 0 = 0
Row F = 0
Col 0 = 0
C o l F = 640
Limite I n f e r i o r = 0.0 , 100.0
Limite Superior = 0.0 , 300.0
Mascara = m a s k b a n d a s u p . j p g
Fin Linea
I n i c i o Linea
Nombre = banda i n f e r i o r
Row 0 = 0
Row F = 0
Col 0 = 0
C o l F = 640
Limite I n f e r i o r = 0.0 , 420.0
Limite Superior = 0.0 , 480.0
Mascara = m a s k b a n d a i n f 1 . j p g
Fin Linea
I n i c i o Linea
Nombre = f o n d o d e r e c h a
Row 0 = 100
Row F = 400
Col 0 = 0
Col F = 0
L i m i t e I n f e r i o r = 3 2 . 0 , −15000.0
L i m i t e S u p e r i o r = 3 2 . 0 , −20000.0
Mascara = m a s k f o n d o d e r 1 . j p g
Mascara = m a s k f o n d o d e r 2 . j p g
Fin Linea
I n i c i o Linea
Nombre = f o n d o i z q u i e r d a
Row 0 = 100
Row F = 400
Col 0 = 0
Col F = 0
Limite I n f e r i o r = 32.0 , 0.0
L i m i t e S u p e r i o r = 3 2 . 0 , −5000.0
Mascara = m a s k f o n d o i z q 1 . j p g
Mascara = m a s k f o n d o i z q 2 . j p g
Fin Linea
Como se puede observar en el código 4.1 lo primero que se debe especificar es el nombre del
vı́deo a analizar. A continuación se especificarán los parámetros particulares de cada una de las
lı́neas. Estos parámetros son los que nos permitirán crear las zonas de búsqueda para cada una de
40
4.4. Diseño
las lı́neas. La configuración de cada lı́nea comenzará con la etiqueta Inicio Linea y finalizará al
encontrar la etiqueta Fin Linea. A continuación se van a explicar los parámetros referentes a
cada lı́nea:
Row 0, Row F. Estos parámetros solo se utilizan en las lı́neas de fondo. Indican las filas
inicial y final de la zona de búsqueda de la lı́nea.
Col 0, Col F. Estos parámetros solo se utilizan en las lı́neas de banda. Indican las columnas
inicial y final de la zona de búsqueda de la lı́nea.
Limite Inferior, Limite Superior. Son dos rectas de la forma y = mx + n donde
m es el primer parámetro y n el segundo. Serán dos rectas paralelas que determinarán la
zona de búsqueda de la lı́nea.
Mascara. Indica el nombre de la imagen que se utilizará como máscara para esa lı́nea. La
etiqueta Mascara puede aparecer todas las veces que se necesiten ya que una misma lı́nea
puede utilizar varias máscaras distintas.
Figura 4.2: Parámetros de la zona de búsqueda para la lı́nea de banda superior
En la figura 4.3 se muestra el boceto de la pantalla de configuración. En la parte superior
deberemos indicar el nombre del vı́deo que se desea analizar. Al pulsar el botón (1) se abrirá un
cuadro de diálogo para seleccionar el archivo de vı́deo que se desee. A continuación tendremos
una pestaña (2) para cada una de las lı́neas. Dentro de cada pestaña se podrán modificar los
valores de los parámetros de configuración de la lı́nea correspondiente.
41
4.5. Resultado final
También se pueden cambiar las máscaras utilizadas en cada lı́nea. Para agregar una lı́nea
pulsaremos el botón Agregar y seleccionaremos la imagen deseada en el cuadro de diálogo. Si
lo que se desea es eliminar una de las máscaras se deberá seleccionar de (3) y pulsar el botón
Quitar. Una vez se hayan configurado todos los parámetros se podrán almacenar pulsando el
botón Guardar (4). Al pulsar este botón la aplicación generará automáticamente el fichero de
configuración que deberá leer LineDetector.
Figura 4.3: Diseño de la pantalla de configuración
4.5
Resultado final
En este apartado vamos a mostrar el aspecto final de la interfaz gráfica que se ha desarrollado
en el proyecto. Se mostrarán varias capturas de pantalla del programa para mostrar las distintas
funcionalidades que ofrece.
En la figura 4.4 se muestra el aspecto final de la pantalla principal de la interfaz. Como se
puede observar el botón Ejecutar se encuentra deshabilitado porque aún no se ha cargado ningún
partido ni se ha especificado la ubicación del ejecutable de LineDetector. Para cargar el partido
deberemos seleccionar la carpeta en la que se encuentra el archivo de vı́deo desde el cuadro de
diálogo que se muestra en la figura 4.5
42
4.5. Resultado final
Figura 4.4: Aspecto final de la pantalla principal de LineDetectorGUI
Figura 4.5: Cuadro de diálogo para seleccionar la carpeta del partido
43
4.5. Resultado final
Una vez seleccionada la carpeta del partido, la aplicación automáticamente buscará en ese
directorio el fichero de configuración del partido que deberá tener el nombre config. Si no se ha
encontrado un fichero de configuración se mostrará un botón que permitirá acceder a la pantalla
de configuración de partido. En caso de que se haya encontrado un fichero de configuración se
permitirá su modificación . En las figuras 4.6 y 4.7 se muestran estos dos casos.
Figura 4.6: Partido sin fichero de configuración
Figura 4.7: Partido con fichero de configuración
En la figura 4.8 se muestra el aspecto de la pantalla de configuración cuando no habı́a un
fichero de configuración para ese partido. En el caso de que hubiera existido se hubiera cargado
la información en esta pantalla.
Lo primero que haremos será seleccionar el archivo de vı́deo del partido. Al pulsar el botón al
lado de la etiqueta de vı́deo se abrirá un cuadro de diálogo para que se seleccione el archivo deseado(figura 4.9). Este cuadro de diálogo sólo permitirá seleccionar archivos que tengan extensión
avi.
44
4.5. Resultado final
Figura 4.8: Pantalla de configuración
Figura 4.9: Cuadro de diálogo para seleccionar el archivo de vı́deo
45
4.5. Resultado final
Una vez cargado el vı́deo se configurarán el resto de parámetros para cada una de las lı́neas
cambiando entre las distintas pestañas. Para agregar las máscaras que sean necesarias en cada
lı́nea pulsaremos el botón Agregar y seleccionaremos en el cuadro de diálogo la imagen que
se desee. Al igual que en el otro cuadro de diálogo sólo se podrán seleccionar archivos con la
extensión jpg. Cuando se hayan acabado de configurar todos los parámetros se podrán guardar
los cambios realizados pulsando el botón Guardar (4.10).
Figura 4.10: Configuración guardada.
Figura 4.11: Botón de Ejecutar activado.
Tras configurar los parámetros iniciales del partido se deberá seleccionar la ubicación del
archivo ejecutable de LineDetector en un cuadro de diálogo. Tras seleccionar el archivo ejecutable
se activará el botón de Ejecutar.
46
4.5. Resultado final
Al pulsar el botón de Ejecutar se lanzará la ejecución del archivo ejecutable seleccionado
indicándole los parámetros de reproducción seleccionados, modo de ejecución, frame de inicio y
fin.
Figura 4.12: Ejecución de LineDetector con el partido seleccionado.
47
4.5. Resultado final
48
Capı́tulo 5
Pruebas y Resultados
En este capı́tulo se detallarán las pruebas realizadas para comprobar el correcto funcionamiento de los algoritmos desarrollados en el proyecto. Estas pruebas se han realizado utilizando vı́deos
correspondiente a partidos de la liga ACB.
5.1
Partido 1
En este partido se ha utilizado la configuración inicial indicada a continuación:
Listing 5.1: Configuración del partido Girona - Pamesa
V i d e o = 003 0 2 5 g i r p a m 2 0 0 7 1 0 1 7 0 . a v i
I n i c i o Linea
Nombre = banda s u p e r i o r
Row 0 = 0
Row F = 0
Col 0 = 0
C o l F = 640
Limite I n f e r i o r = 0.0 , 150.0
Limite Superior = 0.0 , 270.0
Mascara = m a s k b a n d a s u p 1 . j p g
Mascara = m a s k b a n d a s u p 2 . j p g
Mascara = m a s k b a n d a s u p 3 . j p g
Fin Linea
I n i c i o Linea
Nombre = banda i n f e r i o r
49
5.1. Partido 1
Row 0 = 0
Row F = 0
Col 0 = 0
C o l F = 640
Limite I n f e r i o r = 0.0 , 400.0
Limite Superior = 0.0 , 480.0
Mascara = m a s k b a n d a i n f 1 . j p g
Mascara = m a s k b a n d a i n f 2 . j p g
Mascara = m a s k b a n d a i n f 3 . j p g
Fin Linea
I n i c i o Linea
Nombre = f o n d o d e r e c h a
Row 0 = 100
Row F = 400
Col 0 = 0
Col F = 0
L i m i t e I n f e r i o r = 3 2 . 0 , −15000.0
L i m i t e S u p e r i o r = 3 2 . 0 , −20000.0
Mascara = m a s k f o n d o d e r 1 . j p g
Mascara = m a s k f o n d o d e r 2 . j p g
Fin Linea
I n i c i o Linea
Nombre = f o n d o i z q u i e r d a
Row 0 = 100
Row F = 400
Col 0 = 0
Col F = 0
Limite I n f e r i o r = 32.0 , 0.0
L i m i t e S u p e r i o r = 3 2 . 0 , −5000.0
Mascara = m a s k f o n d o i z q 1 . j p g
Mascara = m a s k f o n d o i z q 2 . j p g
Fin Linea
A continuación se muestran algunas capturas de pantalla correspondientes a la ejecución de
la aplicación con el partido entre Girona y Pamesa.
50
5.1. Partido 1
Figura 5.1: Captura del partido Girona - Pamesa.(1)
51
5.1. Partido 1
Figura 5.2: Captura del partido Girona - Pamesa.(2)
52
5.2. Partido 2
5.2
Partido 2
Listing 5.2: Configuración del partido Real Madrid - Pamesa
V i d e o = mad pam . a v i
I n i c i o Linea
Nombre = banda s u p e r i o r
Row 0 = 0
Row F = 0
Col 0 = 0
C o l F = 640
Limite I n f e r i o r = 0.0 , 100.0
Limite Superior = 0.0 , 300.0
Mascara = m a s k b a n d a s u p . j p g
Fin Linea
I n i c i o Linea
Nombre = banda i n f e r i o r
Row 0 = 0
Row F = 0
Col 0 = 0
C o l F = 640
Limite I n f e r i o r = 0.0 , 420.0
Limite Superior = 0.0 , 480.0
Mascara = m a s k b a n d a i n f 1 . j p g
Mascara = m a s k b a n d a i n f 3 . j p g
Fin Linea
I n i c i o Linea
Nombre = f o n d o d e r e c h a
Row 0 = 100
Row F = 400
Col 0 = 0
Col F = 0
L i m i t e I n f e r i o r = 3 2 . 0 , −15000.0
L i m i t e S u p e r i o r = 3 2 . 0 , −20000.0
Mascara = m a s k f o n d o d e r 1 . j p g
Mascara = m a s k f o n d o d e r 2 . j p g
Fin Linea
I n i c i o Linea
Nombre = f o n d o i z q u i e r d a
Row 0 = 100
Row F = 400
Col 0 = 0
Col F = 0
Limite I n f e r i o r = 32.0 , 0.0
L i m i t e S u p e r i o r = 3 2 . 0 , −5000.0
Mascara = m a s k f o n d o i z q 1 . j p g
Mascara = m a s k f o n d o i z q 2 . j p g
Fin Linea
53
5.2. Partido 2
Figura 5.3: Captura del partido Real Madrid - Pamesa.(1)
54
5.2. Partido 2
Figura 5.4: Captura del partido Real Madrid - Pamesa.(2)
55
5.2. Partido 2
Durante las pruebas realizadas se han encontrado problemas para detectar las lı́neas de fondo
cuando se producen transiciones de una parte del campo a la otra. La calidad del vı́deo produce
que las lı́neas se vean difuminadas y la aplicación no encuentra pı́xeles que coincidan con las
máscaras de la lı́nea (figura 5.5). Este problema se intentó resolver añadiendo nuevas máscaras a
las lı́neas de fondo pero no se consiguió mejorar el resultado. De todas formas este problema no
es tan importante de cara al objetivo del proyecto ya que lo que se desea realmente es obtener
la posición de las lı́neas cuando se realiza un ataque estático y no en la transición entre ataque
y defensa.
Figura 5.5: Problemas en las transiciones
En general los resultados obtenidos con las pruebas realizadas son satisfactorios aunque existen
momentos puntuales en los cuales no se localiza alguna de las lı́neas de la pista. Se han detectado
algunas de las causas que pueden provocar este hecho:
Calidad del vı́deo. Lógicamente la calidad con la que se ha grabado el partido afectará a
la detección de las lı́neas. Como se mencionado anteriormente en las pruebas realizadas se
han encontrado problemas con los movimientos laterales de la cámara que provocan que la
imagen quede difuminada.
56
5.2. Partido 2
Iluminación de la pista puede cambiar de una zona del campo a otra. Este problema se
puede resolver creando máscaras en las zonas con distinta iluminación.
Cambios en la iluminación. Este problema es parecido al anterior pero se diferencia en
que los cambios de iluminación son puntuales, creados por ejemplo por los flashes de las
cámaras o por los reflejos de la publicidad en el parquet.
Angulación de las lı́neas. La posición de las lı́neas con respecto a la cámara puede variar
en las distintas zonas del campo. Por lo tanto se deberán crear distintas máscaras cuando
se produzca este hecho.
Con respecto al tiempo de ejecución de la aplicación hay que decir que dependerá en gran
medida del número de máscaras utilizadas para cada lı́nea y del tamaño de las mismas. También
cabe destacar que el tiempo empleado en procesar cada uno de los frames también puede cambiar
ya que las zonas de búsqueda no siempre tendrán la misma superficie.
En las pruebas realizadas los tiempos de ejecución promedio han sido aproximadamente de
0.8 segundos por frame para el partido 1 y de 0.5 segundos por frame para el segundo partido.
Esta diferencia de tiempos se debe a que en el partido 1 ha sido necesario el uso de más máscaras
porque no todas las zonas de la pista tenı́an la misma iluminación.
57
5.2. Partido 2
58
Capı́tulo 6
Futuras ampliaciones
Como posibles ampliaciones tomando como punto de partida este proyecto, y con el fin de
que este proyecto funcionara mejor, se podrı́a modificar el algoritmo para la detección de las
lı́neas para intentar evitar los problemas encontrados en las transiciones entre ataque y defensa.
Otra mejora a realizar serı́a la detección del resto de lı́neas que componen una pista de baloncesto
como serı́an la lı́nea del centro del campo y las lı́neas que delimitan la zona.
Como ya se ha mencionado anteriormente este proyecto serı́a el punto de partida de un
proyecto de mayor tamaño que permitiera sacar estadı́sticas sobre cada uno de los jugadores
durante un partido. Por ejemplo, serı́a interesante poder conocer la distancia recorrida por un
jugador o las zonas del campo por las que se mueve. Para esto se considera esencial conocer la
posición de las lı́neas del campo, ya que se utilizarı́an como referencia para saber la posición de
los jugadores en el campo.
59
Figura 6.1: Ampliación del proyecto para averiguar la posición de los jugadores utilizando la posición de
las lı́neas de la pista
60
Capı́tulo 7
Conclusiones
7.1
Conclusiones objetivas
Se presenta un proyecto que consiste en el desarrollo de una aplicación capaz de detectar las
lı́neas de una pista de baloncesto en un vı́deo deportivo. A su vez también se ha desarrollado una
interfaz gráfica que permita al usuario trabajar con la aplicación anteriormente mencionada de
una manera más cómoda.
La aplicación desarrollada ha sido diseñada como parte inicial de un futuro proyecto que
permita analizar un partido de baloncesto de forma automática y obtenga estadı́sticas de los
jugadores, como por ejemplo la distancia recorrida o las zonas de la pista por las que se mueve.
En la realización de este proyecto, se ha tenido total libertad en la toma de decisiones, tanto
en la forma de trabajar, de elegir las tecnologı́as a utilizar, etcétera, para diseñar y dar solución
a los problemas que se iban apareciendo a lo largo del proyecto. También se ha de mencionar
que se ha intentado que el código desarrollado sea legible para facilitar futuras ampliaciones del
proyecto.
Tras la conclusión del proyecto, se puede afirmar que las aplicaciones desarrolladas cumplen
con los requisitos planteados al principio de este. Los resultados obtenidos con los algoritmos
implementados han sido buenos ya que se encuentran las lı́neas de la pista durante la mayor parte
del tiempo.
61
7.2. Conclusiones personales
7.2
Conclusiones personales
La realización de este proyecto me ha permitido conocer de cerca la realización al completo
de un proyecto informático. El desarrollo de esta aplicación supuso una gran motivación debido a
que previamente al desarrollo de este proyecto no habı́a realizado nada relacionado con la visión
por computador durante mi formación académica. Debido a este hecho no estaba familiarizado
con la librerı́a OpenCv utilizada en la realización de este proyecto.
La elección de este proyecto ha propiciado que haya tomado contacto con un campo tan
fascinante y novedoso como es la visión por computador, siendo consciente de las posibilidades
de estudio y desarrollo que ofrece.
62
Bibliografı́a
[1] Información sobre el Baloncesto.
http://es.wikipedia.org/wiki/Baloncesto
[2] Información sobre la pista de baloncesto.
http://es.wikipedia.org/wiki/Baloncesto#La_cancha
[3] Información sobre la visión por computador
http://es.wikipedia.org/wiki/Visi%C3%B3n_artificial
[4] Gary Bradsky, Adrian Kaehler. Learning OpenCV: Computer Vision with the OpenCV Library.
Editorial O’Reilly. Primera edición, 2008.
[5] OpenCv C++ Reference
http://opencv.willowgarage.com/documentation/cpp/index.html
[6] Ajuste por mı́nimos cuadrados.
http://es.wikipedia.org/wiki/Regresi%C3%B3n_lineal
[7] Ajuste de una recta por mı́nimos cuadrados.
http://www.uv.es/jbosch/PDF/RectaMinimosCuadrados.pdf
[8] Referencia de .NET Framework
http://msdn.microsoft.com/es-es/library/t7yeed4c.aspx
63
Descargar