[Cursodrones] Perfeccionando la detección de objetos
Rosaluz Ducoing
ducoingpr en gmail.com
Vie Feb 27 14:35:32 CET 2015
Gracias Alberto, ya he visto cual era el problema con la ayuda de algunos
compañeros, era al dibujar el rectangulo. Ya me sale bien.
saludos,
El 27 de febrero de 2015, 14:24, Alberto Martin <almartinflorido en gmail.com>
escribió:
> Buenos dÃas Rosaluz,
>
> con el código que estás ejecutando en realidad estás realizando demasiados
> filtrados en la imagen con distintos tamaños de kernel. Para aplicar un
> filtro de Gauss a la imagen solamente tienes que ejecutarlo una vez, por
> ejemplo:
>
> imagen=cv2.GaussianBlur(self.getImage(),(5,5), 0)
>
> la ejecución anterior realizará un filtrado de Gauss en la imagen, con un
> kernel de 5x5 con una desviación estándar de 0. Con un único filtrado
> deberÃa funcionar, pruébalo y nos lo comentas. De todos modos también lo
> podemos ver hoy en clase.
>
> Un saludo
>
> 2015-02-27 10:31 GMT+01:00 Rosaluz Ducoing <ducoingpr en gmail.com>:
>
>> Buenos dias, lo que me esta pasando para detectar el objecto, es que solo
>> me encuentra un contorno, y el rectangulo resultante va desde la esquina
>> superior izquerda hasta donde comienza la pelota, creo que mi problema esta
>> en el filtro gaussiano, porque la thresoldImage me sale bien en la imagen,
>> sale en blanco y negro, mostrando la pelota en blanco, pero puede ser ruido.
>>
>> for i in xrange(1,self.width,2):
>> imagen=cv2.GaussianBlur(self.getImage(),(i,i), 0)
>>
>> gracias,
>>
>>
>>
>>
>> El 24 de febrero de 2015, 13:14, Alberto Martin <
>> almartinflorido en gmail.com> escribió:
>>
>> Volviendo a leer tu pregunta César, quizá mi respuesta no haya quedado
>>> muy clara. Te comento.
>>>
>>> Para detectar la pelota en la imagen tenemos que enfrentarnos
>>> principalmente a tres problemas:
>>> - La umbralización, filtrar los pÃxeles en cada uno de canales para
>>> quedarnos con aquellos que nos interesen (en este caso por su color).
>>> - La detección, con el conjunto de pÃxeles de la umbralización intentar
>>> extraer información útil de ellos (coordenadas, área,...).
>>> - El seguimiento, seguir al objeto a lo largo de los frames que componen
>>> la secuencia de imágenes. En la práctica no lo abordamos.
>>>
>>> Cada uno de los tres problemas anteriores tiene distintos enfoques.
>>> Nuestro enfoque para la práctica es el más simple, utilizamos la
>>> umbralización fija (función inRange() de OpenCV) pero existen más métodos
>>> para umbralizar una imagen como el algoritmo de otsu o métodos de
>>> umbralización adaptativa, incluso con algoritmos como kmeans. Utilizar
>>> estos métodos deberÃa traducirse en una mejor umbralización de la imagen de
>>> entrada pero complica el procesamiento y normalmente aumenta el coste de
>>> computo.
>>>
>>> El filtro de kalman que te he comentado antes estarÃa en el último
>>> problema (el seguimiento). Si lo que quieres es mejorar la primera etapa,
>>> la umbralización, puedes intentar implementar otro método de umbralización,
>>> te dejo un enlace en [1] con algunos ejemplos (recuerda siempre que en
>>> nuestro caso tenemos 3 canales el H, el S y el V). Aplicar técnicas como la
>>> dilatación y la erosión te ayudarán a limpiar tu imagen eliminando posibles
>>> candidatos a rectángulos (elimina ruido), al igual que el suavizado previo
>>> que realizamos con el filtro de Gauss. Tanto el suavizado como la
>>> dilatación y erosión son parametrizables, puedes decidir el tamaño del
>>> elemento estructural que realizará la erosión y la dilatación, al igual que
>>> puedes decidir el tamaño del kernel que utilizarás para el suavizado.
>>> Jugando con lo anterior deberÃas notar mejoras en la umbralización.
>>>
>>> Debido al enfoque de la práctica, cuando obtenemos los rectángulos
>>> necesitamos filtrarlos para decidir que rectángulo es el que con más
>>> probabilidad contenga nuestra pelota. Para no complicarlo en exceso podemos
>>> utilizar información a priori que tenemos de nuestra pelota como su tamaño,
>>> su velocidad, su trayectoria, ...
>>>
>>> En cualquier caso en la práctica estamos utilizando un enfoque para
>>> implementar un filtro de color. Utilizar como descriptor de un objeto su
>>> color tiene limitaciones y vosotros lo estáis comprobando en la práctica.
>>>
>>> Un saludo
>>>
>>> [1]:
>>> http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html
>>>
>>> 2015-02-24 8:51 GMT+01:00 Alberto Zapatero <alberto.zapatero en gmail.com>:
>>>
>>>> Gracias por la respuesta, investigaré sobre el filtro de Kalman.
>>>>
>>>> El tracking de la pelota lo realiza bastante bien; sólo es problemático
>>>> en ciertas zonas en las que, por asà decirlo, refleja el color en la
>>>> superficie de la caja y ese reflejo entra dentro de los valores HSV de
>>>> margen.
>>>> Pero claro, esto es para un entorno controlado (muy controlado). En un
>>>> entorno real, hay tonos del mismo color por todas partes y en cualquier
>>>> momento, y por eso (y según la teorÃa de la última clase) pensaba que podÃa
>>>> solucionarse con una combinación de erosión/dilatación, pero algo no debo
>>>> estar haciendo bien o, mejor dicho, estoy equivocado completamente; porque
>>>> no termino de conseguirlo.
>>>>
>>>>
>>>>
>>>> El 24 de febrero de 2015, 8:36, Alberto Martin <
>>>> almartinflorido en gmail.com> escribió:
>>>>
>>>> Buenos dÃas Alberto,
>>>>>
>>>>> en el caso en el que te encuentras es necesario que implementes un
>>>>> algoritmo para filtrar rectángulos. Puedes empezar a filtrar rectángulos
>>>>> que estén dentro de otros rectángulos, filtrar aquellos que sean demasiado
>>>>> pequeños (áreas pequeñas) o demasiado grandes, puedes seguir un enfoque
>>>>> donde almacenes el rectángulo detectado en la iteración anterior y filtrar
>>>>> el actual rectángulo en función de la posición y tamaño del rectángulo
>>>>> anterior. Si estás siguiendo una pelota puedes suponer que de un frame a
>>>>> otro la pelota no ha podido desplazarse demasiado y quedarte solo con el
>>>>> rectángulo que esté más cerca del rectángulo que obtuviste en la iteración
>>>>> anterior.
>>>>>
>>>>> Normalmente para los problemas de seguimiento se suele implementar un
>>>>> filtro de kalman, pero ese filtro escapa al temario del curso. Con lo
>>>>> expuesto en el párrafo anterior deberÃas poder seguir la pelota
>>>>> razonablemente bien.
>>>>>
>>>>> Un saludo
>>>>>
>>>>> 2015-02-23 23:02 GMT+01:00 Alberto Zapatero <
>>>>> alberto.zapatero en gmail.com>:
>>>>>
>>>>>> ¿Algunas directrices para perfeccionar el método de detección?
>>>>>> Detecto la pelotita roja, pero siguen saliendo más puntos de detección.
>>>>>> ¿Cómo se pueden eliminar? ¿Qué directrices se pueden seguir?
>>>>>>
>>>>>> Todo esto para un sólo color, claro. Cuando ya es luz natural...
>>>>>> Bueno...
>>>>>>
>>>>>> Muchas gracias
>>>>>> Un saludo.
>>>>>>
>>>>>> _______________________________________________
>>>>>> Cursodrones mailing list
>>>>>> Cursodrones en gsyc.es
>>>>>> http://gsyc.es/cgi-bin/mailman/listinfo/cursodrones
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Cursodrones mailing list
>>>>> Cursodrones en gsyc.es
>>>>> http://gsyc.es/cgi-bin/mailman/listinfo/cursodrones
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> Cursodrones mailing list
>>> Cursodrones en gsyc.es
>>> http://gsyc.es/cgi-bin/mailman/listinfo/cursodrones
>>>
>>>
>>
>
> _______________________________________________
> Cursodrones mailing list
> Cursodrones en gsyc.es
> http://gsyc.es/cgi-bin/mailman/listinfo/cursodrones
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.es/pipermail/cursodrones/attachments/20150227/bbbd7321/attachment-0001.htm
More information about the Cursodrones
mailing list