Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Visión artificial

467 Respuestas
43 Usuarios
0 Reactions
1.1 M Visitas
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 20 años

Como ya estoy de medio vacaciones, pero a la vez no tengo demasiados medios técnicos, me dedico a recopilar datos y a procesarlos como puedo en mi cabecilla, para poder hacer cosas en verano.

Como sabeis estoy con el tema del Bluetooth... a falta de hacer algunas pruebas con otro ordenador, el tema del TouchPad... necesito más medios que mi portatil... y... ahora viene el proyecto guapi guapi... Visión artificial con una simple webcam, entonces aqui vienen mis preguntas y aclaraciones:
·Sé que es posible, porque si no me equivoco Golfus Hispanicus lo emplea, asi como otros proyectos como los de esta chiquita tan maja: Mavis
·¿Cómo se empieza en este mundito?
·¿Qué librerías usais para obtener imágenes de la webcam?
·¿Qué librerías usais para procesar la imagen?
·¿Es imprescindible programar el sistema en C?
·¿Tenemos algun proyecto de ejemplo?

Yo estoy comenzando con la librería WebCam.dll, pero me temo que es muy incompleta, y además consume demasiados recursos comparándolo con el proyecto de Mavis. Aun así, tengo un programa hecho que lo único que tiene es un botón, con el que al pulsarlo, se copia la imágen de la webcam en un control PictureBox... me imagino que es un primer paso en este mundo, y que me quedan miles de caminos que recorrer, pero esta librería no sé si da mucho más de si, de modo que me gustaría que alguno que haya trabajado con esto me eche un cablecillo.

Seguiré informando. Muchas gracias por la ayuda.
Ángel


Responder
466 respuestas
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 20 años

Hola,

Hay un error en el código en la línea:

for(x = 0; x<ImgOriginal>= Rojo - Tolerancia) //Si hay más azul que rojo sigue

Deberia poner:

for(x = 0; x < ImgOriginal ; x ++)
if( Azul >= Rojo - Tolerancia) //Si hay más azul que rojo sigue

Lo he intetado editar, pero no me deja

Independientemente de esto el problema Mif esta en como se define la distancia. En el código del tutorial tú lo haces de la forma siguiente (B= Azul, R = rojo, G = verde):

d = B - max(R, G)

y luego : d > tolerancia

(es otra forma de escribir lo mismo pero empleando el sistema de distancias).

Se puede probar otras distancias:

d = sqrt( (255-B)^2 + R^2 + G^2) ; // Esto sería la distancia euclidea con azul puro.
d = (255-B) + R + G; //Comparamos mejor con un valor conocido (Azul puro).
d = raizcubica((255-B)^3 + (-R)^3 + (-G)^3);
d = max((255-B), R, G);
...

luego solo tenemos que aplicar d> tolerancia y punto.

S2

Ranganok Schahzaman


Responder
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 20 años

Muy bueno Ranganok, en cuanto termine con los servos me pongo con ello de nuevo.
De momento yo estoy bloqueado, porque intento emplear el TMR0 para no gastar tiempo de ejecución en el micro, pero no resulta nada facil cuando trabajas con dos servos... teneis alguna idea de como hacerlo? o algun programa de ejemplo en asm, basic o C?


Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 20 años

MCD (maximo comun divisor) aunque te sirve cualquier divisor de los dos tiempos.

Imaginemos que quieres activar el servo 1 durante 25ms y el servo 2 durante 15 ms

En el TMR0 pones a contar un tiempo de 5ms activas los dos servos y a las 3 interrupciones desactivas el servo 2 y a las 5 el servo 1.

Como en principio no sabes cuanto tiempo tiene que estar activado un servo (la señal) tienes que definir un paso minimo y un tiempo maximo de trabajo.

S2

Ranganok Schahzaman


Responder
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 20 años

Ok, de modo que mi línea de investigación se tiene que centrar en crear un MCD para los servos, el problema es elegir el tiempo de MCD, porque la señal de un Futaba es algo asi:
0.9ms en alto = 0º
1.5ms en alto = 90º
2.1ms en alto = 180º

Frecuencia de la señal 50Hz

Así que lo unico que se me ocurre es un MCD de 100us, pero eso es una interrupción cada 100 instrucciones, no se que tal quedaría... puede que matando unos cuantos grados y perdiendo algo de resolucion pueda hacer un MCD de 200us.
Voy a investigarlo.
Muchas gracias por la idea, a ver si consigo algo


Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 20 años

Prueba con 150us o 300us pierdes resolución pero reduces el numero de interrupciones.

S2

Ranganok Schahzaman


Responder
Página 39 / 94
Compartir: