martes, 5 de marzo de 2013

Detección de círculos

Para esta semana la actividad consistió en realizar un programa capaz de identificar círculos a partir de una imagen.


Lo que utilice para realizar esto fue partiendo de lo que ya se tenia de detección de figuras y centros:
por lo que para poder realizarlo se tiene que contar con todo lo que se necesita para detección de figuras- formas ver esta entrada:http://m8sem.blogspot.mx/2013/02/clase-2-deteccion-de-formas.html


Partiendo de esto para no estar buscando los centros de nuevo una ves que se obtiene el centro de una figura lo que hago es lo siguiente:

Envió en una función llamada círculos el valor inicial en el cual se detecto la figura, este valor es donde se recorre toda la imagen y se encuentra un pixel blanco dando a entender que inicia una nueva figura,el centro de dicha figura obtenido con una formula ya empleada en la entrada anterior,la cantidad de pixeles que conforma la figura en este caso representara el área de la figura y por ultimo el color que tiene actualmente la figura, esto en dado caso de que si sea un circulo re-pintarlo de color azul para marcarlo.

Con todo esto podemos hacer uno de algunas formulas para confirmar si la figura es o no un circulo

Formulas a utilizar:


La formula para obtener el área de un circulo, para poder utilizar esta formula necesitamos el radio.

Para obtener el radio utilizaremos la formula de distancia:

Con la formula de distancia podremos obtener el radio ya que tenemos 2 puntos el punto de inicio donde se detecto una nueva figura y el punto donde se ubica el centro, estos serán nuestros valores de (x1,x2)(y1,y2).

Una ves que obtenemos el radio podemos utilizar la formula del área de un circulo con pi*r^2 el resultado nos dará el área de la figura que en caso de coincidir con el área en cantidad de pixeles que ya tenemos(puede haber una variación mínima de pocas décimas) podremos saber si la figura es un circulo.

Ejemplos:

Imagen original:
Circulo detectado:
Corrida:


Otro ejemplo

Imagen Original:
Circulo detectado:
En este caso el centro de la bandera y el del circulo casi están posicionados en el mismo punto.
Corrida:




Otro ejemplo:

Imagen original:


Circulo detectado:
El punto extra en el circulo del medio es el centro de la imagen total

Corrida:


Aclaro que el otro cambio de color es por lo utilizado anteriormente en formas y figuras todo lo que sea un circulo sera pintado de azul.

El código que realice es el siguiente:

Para saber si es un circulo:



Llamado de función círculos y pintado de los círculos:



Código Completo:

Fuentes:




1 comentario: