TODOPIC
Otros Microcontroladores / Dispositivos programables => ** PROYECTOS ** => Mensaje iniciado por: rolansel en 27 de Julio de 2011, 17:53:19
-
Hola, en este tema se va a reunir importante informacion acerca de procesamiento de imagenes para vision artificial no es un proyecto hecho que solo vaya a publicar, al contrario debido a lo desafiante que aparece me animo a publicarlo aqui con la esperanza de reunir a los demas interesados en el tema que existen en el foro a fin de compartir conocimiento. Por otra parte ire publicando los avances conforme se vaya generando asi como informacion relacionada no solo de pics sino de lo que se vaya necesitando: matlab, c,basic, libros, diagramas etc.
consiste en la adquisicion de imagenes mediante camara, y su procesamiento para reconocimiento de objetivos, en mi caso sera deteccion de rostros, pero confio que se habra un abanico amplio de aplicaciones.
por ahora la primera etapa consiste en encontrar la camara o sensor de imagen que sea la interface que conecte al mundo real con el sistema en cuestion.
existen multiples opciones:
- la CMU cam que viene bien documentada y su procesador arm promete potencia de calculo, el inconveniente es su alto costo.
- camaras IP sabiendo manejar el protocolo de comunicacion que usan podria ser una alternativa(tambien son un poco caras)
- camaras de comunicacion serial desafortunadamente no he encontrado una que tenga buena resolucion aunque parecen faciles de manejar
- adaptacion de camaras web
- construir la camara desde cero opcion mas compleja pero brinda total flexibilidad sobre las especificacions y dominio completo del sistema.
- Camaras digitales-analogas aquellas que modulan su salida en formato pal, ntsc o mediante la señal de video compuesto.
en el proximo post voy a subir el libro de image sensors and signal processing for digital still cameras
-
muy interesante! :), me uno al hilo, me gustaria ver que se puede lograr con una camara web normal
-
hola pongo el enlace del libro de sensores de imagen y procesamiento de señales(en ingles) por si a alguien lo quiere
*** link eliminado***
-
:rolleyes: dale una leida a las reglas del foro
-
uy ni modo bueno por lo menos pongo el titulo si pueden conseguirlo seria muy util
Titulo: Image sensors and signal processing for digital still cameras de Junichi Nakamura
por cierto al parecer han salido muchos titulos nuevos referentes al tema de ccds y cmos
-
yo lei una tesis en la que usaban un circuito CMOS para tomar imagenes a color, el que usaban era el LM9627, me interezo hacer algo parecido, pero busque el integrado y ya no lo fabrican. la resolucion se me hizo bastante buena(si la encuentro pongo unas imagenes), y creo que funcionaria para los propositos que buscas, habria que ver algun otro IC que aun se fabrique y pueda funcionar igual
-
Este es un tema interesante en el cual estoy trabajando. ¿Has mirado la librería OpenCV?
Un saludo
-
Hola yo me uno tmb, estoy trabajando con linux Ubuntu y la libreria openCV de intel en fuerzo con universidades importantes, esta librería nació con la necesidad de grupos de investigación que trabajaban en visión artificial y procesamiento para no comenzar todo de cero y reinventar la rueda, sino que ordenar todo y utilizarlo para problemas mas específicos y difíciles. El lenguaje de programación que voy a usar en ubuntu es el c++ con la ayuda del QT CREATOR de nokia.
-
Tras despiezar algunas camaras se me hizo patente una situacion, es que anteriormente critique la baja resolucion de las camaras seriales, pero ahora soy mas conciente que la camara que critique posee una lente fija de hecho presenta tambien aberracion cromatica, por eso los diseñadores de camaras profesionales utilizan complejos sistemas de lentes como tessar, por simplicidad es mejor usar una camara de lente fijo, ya empece a revisar la datasheet de la camara serial de linksprit LSY201.
por ahora debo estar seguro que sirve para conectar con algun dsp o microcontrolador
por cierto aun no he revisado lo de opencv espero que sirva tambien para correr en DSP
-
mencione el modelo linksprite lsy201 porque junto con la cmucam son los 2 unicos modelos que vende robodacta la unica tienda de electronicos que conozco tiene un costo de 930 pesos mexicanos, por lo que no me precipitare al comprarlo, la pagina web del vendedor me ofrece la datasheet del producto.
-Es una camara VGA es decir(640x480)
Transmite en el protocolo UART de 9600 a 115200 BAUDIOS
El formato de salida es JPEG de 640x480,320x240 y 160x120 configurable por comando
El control de la camara se realiza por la misma interfaz serie y soporta los siguientes comando
-reset - dejar de capturar -configurar baudrate
-capturar imagen - relacion de compresion
-leer tamaño de imagen -comfigurar tamaño de imagen
-leer contenido de imagen - ahorro de energia
aparentemente su operacion es muy sencilla solo debo encontrar la forma de descomprimir ese formato JPEG para ponerlo en una matriz RGB de 640x480x3.
ya he revisado brevemente como funciona el formato jpeg en teoria se resta 128 a toda la matriz asi los valores tienen un rango entre -128 y 128 a continuacion se aplica la transformada discreta del coseno DCT se cuantiza aplicando una matriz que viene en la misma teoria(fuente wikipedia) y se codifica utilizando coeficientes de Huffman. despues se supone solo faltaria montarle la cabecera de archivo EXIF y vuala habria hecho compresion Jpeg por lo que la descompresion solo seria seguir el camino inverso.
Desafortunadamente la explicacion es para imagenes blanco y negro, una imagen de color son 3 matrices en lugar de una y no estoy seguro como se realiza el algoritmo en este caso. :(
-
"Robodacta", entonces, asumo que estas en mexico, mira estos links
http://www.mecatronicadigital.com/mystore/esp/catalogo.php?kw=camara&Submit=Buscar (http://www.mecatronicadigital.com/mystore/esp/catalogo.php?kw=camara&Submit=Buscar)
http://www.cosasdeingenieria.com/mystore/esp/catalogo.php?id=69 (http://www.cosasdeingenieria.com/mystore/esp/catalogo.php?id=69)
tal vez la otra camara tambien te pueda servir "Electronic brick - Serial CMOS ".
-
Hola a todos!
Yo les recomiendo que usen la cámara OV7670 o aun mejor OV3640, estas se comunican por el protocolo SCCB muy parecido al I2C
yo estoy viendo si puedo conseguir una para implementarla en mi fpga lo único malo es que las vende en ebay y no tengo cuenta de paypal :P
-
je yo estoy en las mismas, hoy fui a banorte para recargar credito a mi recien formada cuenta de paypal y me dijeron que el numero estaba mal, mañana voy a ir a otro banco, pero tambien me agrada mas OV7670 cuando lo tenga comento que tal va
-
jaja esos bancos. Otra opción es comprar una cámara de un celular la mayoría de estas cámaras se manejan por la interfaz SCCB
me parece que los celulares sony no lo usan, tal vez use la cámara del ipod :-/
-
Hablando de comprar en ebay y pagar con paypal quisiera comentar mi experiencia pues yo me atore casi un mes en esa nimiedad, resulta que no cuento con tarjeta de credito asi que abri cuenta banorte para poder hacer mi transferencia pero no pude en su banca por internet, fui a la sucursal y no supieron como hacer la transferencia, intente vincular tarjeta, pero la visa electron que me proporcionaron no dio la talla, investigue y encontre que las mastercard si PUEDEN vincular a paypal. Sin embargo ese tramite esta demorando pues una semana despues aun no me envian el numero para verificar.
Ayer encontre un intermediario en mercado libre que por una comision me enviaba el saldo hoy le pague el dinero y 2 horas despues por fin tengo saldo en paypal para comprar el ov7670 un sensor de imagen de omnivision de 640x480 , tambien voy a pedir el que viene con una memoria fifo integrada, la al422 de averlogic.
Como tardaran hasta 40 dias en llegar mis piezas voy a trabajar mientras en crear un modelo de Isis para el ov7670 aunque aun no se como :D
-
jaja esos bancos. Otra opción es comprar una cámara de un celular la mayoría de estas cámaras se manejan por la interfaz SCCB
me parece que los celulares sony no lo usan, tal vez use la cámara del ipod :-/
yo tambien tengo ahi un cmos de una camara de video, pero son un poco latosas la que tengo ahi es un BGA, asi que sin pistola de aire caliente no hay nada que hacerle.
en cambio las camera modules de ebay ya vienen adaptadas para proto y con lente incluida :-/
-
Yo adquirí por medio de Ebay una OV7670, que quería usarlo con un LCD TFT. Pero erré en la compra de este último :x tiene que ser uno a 8-bits para comunicarlos directamente cuando se quiera visualizar algo :? Más adelante será :P
-
ahora una breve introduccion a los C-mos espero no ser muy obvio.
El sensor cmos consiste en un arreglo de celdas con 3 sensores sensibles a la luz, un microlente filtra el haz incidente de tal forma que cada uno de los 3 sensores tiene una mayor respuesta hacia un color ya sea rojo, verde o azul.
Una vez que la exposición termina el Cmos deja de sensar y evalúa la cantidad de fotones incidentes una celda debido a esto la resolución del sensor es menor ya que solo un 50% de los pixeles del arreglo acepta información de color verde, 25% información de color rojo y 25 % de color azul.
Tras el periodo de exposición los pixeles presentan un voltaje y al proceso de lectura de esos valores se le llama escaneo, este escaneo puede realizarse mediante direccionamiento X-Y o bien en esquema de transferencia de cargas donde un pulso de reloj incrementa la dirección actual de lectura mientras la señal de referencia horizontal nos indica con estado lógico 1 cada que inicia una nueva fila.
(http://www.imagengratis.org/thumbs/clipimagepe1sp.jpg) (http://www.imagengratis.org/?v=clipimagepe1sp.jpg)
Debido a la configuración del arreglo en mosaico de Bayer se envía primero la línea con el patrón RGRGRG… y después BGBGBG…, a este formato de salida se le conoce como Raw RGB. Después un convertidor analógico digital convierte la señal a palabras de 8 bits.
Para conservar la fidelidad de los datos el resultado del escaneo debe ser almacenado inmediatamente en memoria, aquí se almacena primero la imagen de la matriz obtenida con el sensor para efectuar el proceso de demosaicing, paso fundamental antes de proceder a al procesamiento de la imagen.
El demosaicing consiste en que un sensor de imagen tiene los pixeles ordenados de acuerdo a la configuración básica de la celda de Bayer
(http://www.imagengratis.org/images/clipimageuj2xu.gif)
Configuración Básica de la celda Bayer
Para obtener la información de los colores restantes se debe aplicar un algoritmo de interpolación los mas comunes son
a) Duplicado de pixeles
b) Interpolación Bilineal
c) Interpolación Basada en gradiente
d) Interpolación Lineal de alta calidad
-
Que tal amigos!
Yo creo tener la solucion a sus problemas :mrgreen:
Ya que siempre he querido colocarle una camara a mi robot para ver por donde anda asi que les coloco esto (http://www.ateksoft.com/) por si les sirve, vean el video abajo :mrgreen:
Nota: Esto lo acabo de sacar del horno asi que no lo he probado aun, porque ademas, me faltan algunos condimentos :D
-
jeje se acabo el dia y vuelvo a sentir que no avanzo un centimetro en fin los traumas al psicologo.
Tratar de crear un modelo para proteus del ov7670 y que sea "realista" esta medio lejos bueno me conformo con una burda simplificacion que ayude a comprender el funcionamiento
primero una escena de prueba, que tal el patron de colores de la tele me fui a internet y busque uno, en JPG lo transforme a BMP de 24 bits
(http://www.imagengratis.org/images/b6coloresdq3yd.png)
luego este algoritmo basado en la teoria de demosaicing para producir el RGB raw ejecutado en matlab me produce una matriz identica a como seria la imagen en el CCD
%%%%%%%%%%%%%codigo matlab%%%%%%%%%%%%%%%%%
imagen=imread('barrasdecolor.bmp');
[fil,col,capa]=size(imagen);
for i=1:2:fil-2
for j=1:2:col-2
raw(i,j)=imagen(i,j,1);
raw(i,j+1)=imagen(i,j+1,2);
raw(i+1,j)=imagen(i+1,j,2);
raw(i+1,j+1)=imagen(i+1,j+1,3);
end
end
%%%%%%%%en cuanto pueda lo trasladare a C%%%%%%%%%%%
ahora faltaria hacer el algoritmo para enviar cada byte de acuerdo al comportamiento del CCD real
-
Hola ayer me eche un clavadito en la datasheet de OV7670 y aunque no he tenido tiempo de avanzar en lo del modelo entendi mejor las especificaciones del sensor asi a grandes rasgo les platico
-comunicacion paralela es decir los pines D0-D7 proporcionan la salida de datos un byte a la vez
-Se requiere una señal de reloj de 24 Mhz
-cuenta con 3 pines de salida con señales importantes:
-Pclock indica cada ciclo la transmision de un nuevo pixel muestreado
-Href nos indica la transmision de una nueva columna
-Vsinc nos indica el inicio y termino de cada frame
se utilizan 2 pines de control para escribir los registros de configuracion de la camara mediante comunicacion semejante a la I2C
bueno la comunicacion SCCB no la he revisado asi que se muy poco
al parecer tambien se va a necesitar una memoria pues al parecer el sensor solo sabe mandar frames una y otra vez refrescando la informacion tan rapido como dura un barrimiento, siendo asi hay que almacenarla en algun lugar para procesarla y extraer informacion a gusto :)
-
Bueno habia comentado que el modulo lo unico que hace es mandar frames de forma infinita, aunque no me consta estoy casi seguro que asi es, solo se configura para funcionar al gusto del usuario ya sea que quieras VGA;QVGA;CIF formato de bytes YUV,raw RGB,Procesed RGB, con/sin AGC,AEC, Correccion de lente etc.
la configuracion se usa por el puerto SCCB que tras leer la hoja de Datos resulta que es un tipo de I2C con solo 3 bytes: Address del Sensor[7bits]+1bit de lectura/escritura+ACKN[1bit]
Registro del Sensor[8bits]+1bit ACKN
valor a setear[8bits]+1bit ACKN
bastante facil verdad?
espero que pronto mas gente se anime a experimentar con camaras :-/