Ha llovido desde que empece a publicar cosas sobre vision artificial eh? La verdad es que ya lo tenia completamente aparcado, como muchos sabeis llevo ya bastante tiempo metido en otros sistemas de control, basicamente por voz, con el mando de la Wii y desde una PDA.

Hace poco menos de un mes que he retomado las clases en Estados Unidos, y este promete ser un semestre realmente interesante, hacia mucho que no sentia el gusanillo de querer “ir al cole” y una de las culpables de que haya renacido el friki que llevo en mi ha sido una asignatura que se llama Junior Design. Esta asignatura no pintaba nada bien al principio: el libro se llama Signals and Systems, la clase se centraba en MatLab y ademas parecia que iba a tener muchas matematicas de esas con las que me llevo horriblemente mal, pero mi sorpresa ha sido enorme cuando hoy, en la primera sesion de Laboratorio, el profesor ha empezado la clase con esta imagen:

Como algunos reconocereis se trata de la tipica captura de una web cam de baja resolucion (320×240), tomada mirando al suelo con intencion de procesar la linea roja.

Al ver la imagen ya empezaba a dar saltos de alegria mi pequeño friki…

VAMOS A PROCESAR IMAGENES CON MATLAB?!?!?!- me he preguntado tras calmar al mini-friki

el profesor ha hablado durante no mas de 5 minutos y todo lo que ha dicho ha sido: “Para el jueves de la semana que viene quiero que me entregueis el algoritmo que habeis implementado para reconocer la linea roja” (En ingles, claro, que para eso vivo aqui)

Todo el procesado que he hecho de imagenes anteriormente ha sido en C, C# o Visual Basic. Habia leido de gente que procesaba imagenes en MatLab por los foros de A.R.D.E., pero nunca habia pensado que pudiese ser tan entretenido! supongo que siempre he rechazado MatLab por la implicacion con las matematicas, pero ahora he entendido que puedo librarme mas de ellas si nos hacemos amigos.

Tras un rato de rememorar viejos tiempos mientras soltaba lineas de codigo, he acabado con un algoritmo de 60 lineas con el que estoy bastante contento… Si, ya se que se puede hacer mucho mejor, con menos lineas y menos recursos, pero ha sido mi primer contacto con MatLab, asi que no se puede pedir mucho mas…

Al ponerme a programar, me he acordado de lo que yo llame “Algoritmo de explosion” que consiste en buscar pixeles de interes dando saltos ordenados por la imagen hasta que se encuentra uno de ellos. Una vez encontrado algun pixel interesante, el algoritmo procesa los alrededores con una resolucion mucho mayor, de este modo se ahorra bastante tiempo y se gana en resolucion.

Como podeis ver, el algoritmo funciona suficientemente bien, aunque aun necesita algun ultimo retoque, pero incluso haciendole la vida un poco mas complicada consigue sacar buenos resultados, como en las dos siguientes imagenes creadas en Paint.

En la imagen original podemos ver como hay una linea algo difusa que cruza en diagonal de izquierda a derecha de un color rojo intenso. Ademas de esa linea, que es la que nos inetersa, hay un monton de manchas por la imagen que no tienen mas mision que estorbar y tratar de confundir al pobre algoritmo.

Imagen Original

Al procesar la imagen vemos como muchas de las manchas se han quitado pero han quedado las que tienen tonos suficientemente rojizos. La linea empieza a distinguirse mejor; ya se ven dos cuadrados blancos delimitando la linea por arriba y por abajo.

Imagen Preprocesada

Imagen Preprocesada

Tras eliminar las capas de preprocesado de la imagen y crear una linea entre los dos puntos detectados por el algoritmo, obtenemos la ultima imagen, que aunque parezca que la he hecho tambien en Paint, prometo que ha salido directamente de “PrintSrcreen”.

Resultado Final

Resultado Final

Ahora mismo estamos a Jueves, esta practica la tenemos que entregar la semana que viene, asi que en cuanto la entregue publicare el codigo… esta feo hacerlo antes, no?

3 Respuestas a “Procesar Imagenes en MatLab. Del “Odio al Amor”.”
  1. La verdad es que es interesante. Yo el matlab lo uso pero para procesado digital de la señal (hacer equalizadores y otras tonterias varias ) y sabia que podia hacer vision artificial pero no pensaba que era tan potente, ya estoy esperando el codigo con ansia ejejje

  2. Garrocha dice:

    Que gran verdad eso de que con matlab se pasa del amor al odio, y de vuelta al amor en un momento, hace unos meses estuve metiendole bastante caña procesando ficheros enoooormes (señales generadas a muy alta resolucion), de hecho peté un disco duro, creo que el pobre no estaba preparado pa tanto trasiego de gigas xDDD

    En fin, gran herramienta, si señor, ahora he “descubierto” el Mathematica, que para sus cosas también es jodidamente bueno.

    Saludos!

  3. Espero ver el codigo :P :P

    Saludos.

Deja una Respuesta