FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Trazar lineas en una imagen y Calcular Angulo???
Hola a todos, les cuento un poco lo que estoy trabajando, estoy trabajndo en un proyecto de la universidad (Lic en criminalistica )donde estamos viendo algunos metodos basicos que utilizan para calcular la velocidad del viento algun personal del ejercito y me surgio la idea de ver si es posible pasarlo a un pequeño programita en delphi hace años estudie programacion y ando oxidado por eso requiero su ayuda.
Bien el metodo consiste en observar una bandera que ondea y en base al angulo que genera hacer una pequeña operacion matematica y nos da la velocidad del viento, ejemplo vi demos que entre el asta de la bandera y la bandera se forma un angulo de 60° entonces dividimos estos 60/4= 15 MillasxHora. Bien no tiene nada de complicado pero se me ocurrio que si cargara yo una imagen o fotografia de una bandera en un componente de imagen cuya asta es de color verde por ejemplo y la bandera es blanca o negra y en su extremo le coloco una marca de color amarillo, podria trazar una linea entre estos dos puntos??????? Me imagino que si si conosco el valor del color no??? nadamas que el problema es que no se como empezar Bueno ahora supongamos que ya traze una linea entre esos puntos y se que mi vertical es el asta de color verde puedo calcular el angulo que se genera de la interseccion de estas lineas?????????? Esto lo he hecho con Photoshop o CorelDraw no recuerdo ahorita cual es... Bueno si alguien me puede ayudar con ideas le agradecer mucho, anexe unas imagenes de una bandera espero se vean que es basicamente lo que pretendo hacer ojala me ilustren si es posible, saludos atodos. Última edición por erikmx fecha: 15-09-2008 a las 04:01:20. |
#2
|
||||
|
||||
Lo de detectar los puntos amarillos es un poco difícil, sobre todo si no es una imagen con colores planos. (un mástil verde, según sombras y luces puede tener muchísimos verdes)
Lo de calcular el ángulo es fácil: Teoría de triángulos rectángulos. - Primero deberías tener las coordenadas x,y de los trés puntos de la imagen. - Luego podrás calcular la distancia entre x1 y x2 y entre y1 e y2 para saber el largo de los catetos (opuesto y adyacente). - Utilizando las funciones seno y coseno podrás averiguar toda la información que necesitas. NOTA: Todo esto funciona, suponiendo que la foto la sacas al nivel de la bandera y perpendicular a la dirección del viento. |
#3
|
||||
|
||||
Bueno, yo he entendido que tú puedes marcar los puntos sobre la imagen de la bandera.
De esa forma es bastante sencillo hacer los cálculos. Lo que no me ha quedado claro es si los puntos los marcas sobre la imagen o ya vienen en la imagen. De todas formas, te coloco un ejemplillo. Sobre eso si quieres haz tus pruebas o corrigeme si he entendido mal.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Vaya, parece que el milagroso programa que utilizan en la serie de ficción científica CSI-Las Vegas para obtener el número de matrícula del coche que se ve el reflejo del objetivo de la cámara que se refleja en la pupila del sujeto que se refleja en el cristal del comercio fotografiado por casualidad por un testigo que "pasaba por ahí" está más cerca de conseguirse...
Lo siento, no pude reprimirme. De cualquier modo, suerte con el proyecto. |
#5
|
||||
|
||||
Tienes razón.
A mi lo que me encanta es que tienen Bases de datos de todo. El asesino pierde cualquier cosa y siempre está la Base de Datos de cordones de zapatos, la de tapones de bolígrafo, que si has perdido el tapón del bic, sale allí el año en que lo compraste, la tienda, el color y si lo llevas medio gastado o la de Logotipos de marcas de papel de water; Por si encuantras un trozo de 2 milímetros de papel, lo pasas por el programa y te identifica la marca y si has comido lentejas; Y si te has limpiado con un periódico, a partir de la tinta sale el día que lo has comprado, si has hecho el cruzigrama y la quiniela resuleta de la semana siguiente...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
Cita:
|
#7
|
|||
|
|||
Cita:
Voy a checar bien el ejemplo que amablemente me mando Neftali y les comento si funciona con todo gusto coloco el proyecto terminado con codigo para quienes quieran ver que algo tan simple se puede complicar jajajaja tanto como queramos un saludote a todos |
#8
|
||||
|
||||
Un algoritmo que te podría servir:
Si el color es poco comun (cielo azul, bandera negra y marcas amarillas): vas sumando la cantidad de color que hay en cada linea del color de la marca (pixeles amarillos). vas sumando la cantidad de color que ha de cada columna del color de la marca. Tendrás dos vectores. Código:
linea 1 2 3 4 5 6 7 8 9 10 color 0 0 0 0 2 3 1 0 0 0 columna 1 2 3 4 5 6 7 8 9 10 color 0 0 0 1 3 2 0 0 0 0 Si logras 4 puntos, obtendrás un rectángulo y con el podrás calcular el ángulo. Si obtienes una línea, será un viento de la OSTIA!!! Última edición por duilioisola fecha: 16-09-2008 a las 08:06:55. |
#9
|
||||
|
||||
Cita:
...pensando...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#10
|
||||
|
||||
El mayor problema que le veo es identificar los puntos (pixels) que "pertenecen" a la imagen de la bandera y cuales no. La mayor dificultad que le veo es detectar el "color" ya que este varía dependiendo de la iluminación. Claro que, sabiendo que la bandera no se va a mover se puede acotar bastante y facilitarlo.
Si se sabe que el fondo va a ser estático (cuidado con los pájaros y las nubes...) se podría "enmascarar" la bandera fácilmente simplemente comparando el color de los puntos entre dos fotogramas ya que si este cambia es que la bandera se ha movido. Claro que debería establecerse un rango de "error aceptable" de forma que si cambia el color levemente no se asuma como movimiento sino como cambio en la iluminación. Si no cambia puede asumirse que es el fondo. A partir de ahí pueden buscarse los bordes (cadenas de puntos que se han movido) y medir la diferencia. La forma de implementarlo no la tengo muy clara, no obstante. |
#11
|
||||
|
||||
Bueno, una aproximación para identificar colores podría ser esta. Son una pruebas sencillas, pero básicamente o que hacer es a partir de un color de referencia, intentar identificar el mismo color (con una tolerancia) en la imagen de la bandera (en este caso).
Además intenta identificar aquellos puntos que nos servirán para calcular luego el ángulo que necesitamos. Aquí y con la imagen que nos has dado funciona bien, el problema es que una foto real con muchos más tonos, mucho más ruido y bastante mas "imprecisa" habrá que "afinar" mucho más el algoritmo, pero supongo que te puede servir de partida. AÑADO: Me dejé el link.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 16-09-2008 a las 11:53:46. |
#12
|
|||
|
|||
Hola,
yo le aplicaria un filtro de contrastre, para asi diferenciar las zonas de la bandera. Una vez esto, recorriendo otra vez la imagen se podrian recuperar todos los puntos y ponerlos en un array: encontrando el punto medio (la suma de todos los puntos partido por el numero de ellos) , el de mayor altura y a la izquierda, y el de menor a la derecha, podrias trazar la linea y tendrias una aproximacion del angulo bastante correcta. Te dejo aqui un link en el q tratamos algo parecido para encontrar zonas y filtro de contrastes. Saludos Última edición por coso fecha: 16-09-2008 a las 13:54:21. |
#13
|
|||
|
|||
Gracias :)
Muchas gracias a todos Ñuño Martínez, coso, duilioisola y el buen Neftali, bien pensando en eso tiene razon la cuestion de la iluminacion podria ser un problema asi que tengo que buscar colores digamos "claros y poco variables" por ejemplo si es de dia no puedo usar azul claro porque podria condundirese con las nubes, pero e pensado que la bandera podria ser completamente negra y en el extreo inferior ponerle una esfera de unicel como les habia comentado de color por ejemplo rojo o amarilla y otra en el punto donde se une con el asta, para tratar de conectarlos y el hasta podria ser del mismo color o diferente para diferenciarlo, neftali voy a checar muy bien tus amables ejemplos porque me esta dando lata mi compu y no me quiere compilar pero espero solucionarlo hoy ya que ahora si me captaste hasta donde lei la idea de esto , gracias a todos y todo comentario es bien recibido
|
#14
|
||||
|
||||
Bueno haz las pruebas con el ejemplo y algunas fotos y modificando la tolerancia a ver qué resultados obtienes.
La imagen debes convertirla a BMP para que funcione con el ejemplo; Prueba con algunas fotos (si puedes a ver qué tal). A partir de ahí puedes mejorarlo o modificarlo a ver si mejoran los resultados.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#15
|
|||
|
|||
Gracias Neftali
Cita:
|
#16
|
||||
|
||||
Cita:
La vertical, puedes obtenerla (lo que obteníamos del ASTA): * A partir del punto superior izquierdo de la Bandera (y trazando la vertical). * O a partir del punto inferior izquierdo de la bandera * O utilizando ambos.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#17
|
|||
|
|||
Detalle con los angulos..
Aunque todavia mi cacharra esta com que me da lata esperare al sabado para darle su coco wash mientras checaba el ejmplo de neftali el cual agradesco infinitamente y aunque estoy checando el tipo de tela que me puede servir decidi hacer unas banderas en Paint ( mmm mas bien unas lineas y despues una rellenada jajaja ) y a simplevista no detecta el pixel final, o tal ves es que no estoy haciendo el procedimiento correcto?? ya que deberia trazar la linea como con el digujo de la primera bandera que subi pero depues no lo hace como digo igual y estoy cometiendo un error, pensando en lo que me dijo neftali nuevamente simplifique dejando solo el codigo que es el util.
(Esta es la primera que mande y parece que detecta bien todo y el angulo creo que tambien es correcto ) (Esta es la Pseudo bandera que dibuje aproximandome a los 90 grados pero que no traza las lineas como en el anterior) (Esta la hice aproximandome a los 50 grados pero no detecta el punto punto del extremo inferior lo toma antes) Aqui dejo el archivo del programa como lo simplifique y agrege lo de calculo de angulos espero que este bien calculado con los datos que tome con los BMP que utilice como ejemplos http://criminalistic.org/Bandera3Mod.zip Un saludo y gracias a todos, un saludo neftali |
#18
|
||||
|
||||
Antes de nada comentar que el ángulo que yo tomo para el cálculo no es el que se pinta en los dibujos (esas son líneas para delimiar vértices) sino el que forman lel ASTA (vertical) y la parte INFERIOR de la bandera.
De todas formas en el ejemplo nuevo los he pintodo en color AZUL para que se diferencie. Cita:
Cita:
Con esos cambios parace que ahora detecta bien los vértices (ROJO) y genera bien las líneas para calcular los ángulos (AZULES); Teniendo esas dos líneas azules y basándote en ellas ya se pueden realizar los cálculos. Un saludo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 19-09-2008 a las 13:15:28. |
#19
|
|||
|
|||
:)
Gracias Neftali por tu valiosa ayuda, y perdon por la tardanza en contestar, estoy buscando los materiales (tela) que funcionen mejor para la cuestion de que detecte bien los colores hice una pequeña prueba pero con la webcam de la compu sobre una pequeña bandera hecha de plastico (bolsa negra) pero no me funciono claro que la luz era de foco y lo ideal es que sea con luz solar para que la imagen salga con mejor calidad, y creo sera mejor tela para que no cree "reflejos" sobre la superficie de la bandera.
Por otro lado detecta muy bien ahora con los cambios los contornos independientemente de los colores que tenga la bandera claro una vez seleccionado el color de la misma, solo el detalle de los angulos que cheque, parece que no detecta correctamente los mismos: Creo que el detalle esta en la orientacion, es decir en el punto que se concidera el grado 0° o tal ves me equivoco ya que para poder calcular con el metodo de la bandera utilizan este transportador como referencia Por cierto Neftali muchas gracias por tu paciencia Última edición por erikmx fecha: 21-09-2008 a las 01:41:05. Razón: Me desconfiguro el codigo delphi :( |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Calcular la posicion del cursor sobre imagen | adrian76 | Gráficos | 0 | 12-11-2007 10:15:35 |
Determina la amplitud de un ángulo dada su tangente. | Roilo | Varios | 4 | 02-05-2007 17:54:49 |
Trazar un vector teniendo un determinado ángulo | juanchi | Gráficos | 3 | 08-12-2006 23:21:02 |
Como trazar un arco | Luli | Gráficos | 3 | 09-06-2005 00:59:06 |
Boton con imagen y texto en varias líneas | Novás | Varios | 2 | 08-03-2004 13:12:22 |
|