top of page

RECONOCIMIENTO DE NÚMEROS MEDIANTE UNA CAMWEB, RECINTO DE ADQUISICIÓN DE DATOS e INTERFAZ VISUAL GUI

Hola a todos , sean bienvenidos una vez mas al blog, donde vamos a elaborar un proyectos sumamente interesante, se trata de un sistema de adquisición de imágenes mediante una camweb e interfaz GUIDE en MATLAB.

El presente proyecto consiste en lo siguiente:

1. construir un sistema conformado por un recinto de adquisición de imágenes, una cámara, un computador y un programa en MATLAB.

El sistema deberá realizar las 4 operaciones matemáticas básicas, es decir, suma, resta, multiplicación y división.

Figura 1. Ejemplo de Imagen a adquirir por el sistema

Estas operaciones serán de un dígito y sobre números y signos impresos (el tamaño al gusto).

Se tomará en cuenta el tamaño de estos, también el color de los dígitos y el fondo sobre los que se encontraran estos los decide el usuario.

En la Figura 1 se muestra un ejemplo de la imagen a adquirir por el sistema

2. El resultado de la operación detectada será visualizado en una pantalla a través de una interfaz visual GUIDE. Asimismo, debera visualizarse todas las imágenes resultantes de cada bloque de procesamiento y segmentación.

3. El sistema debe analizar una imagen por vez en cada adquisición.

4. Cada grupo de trabajo deberá construir un recinto de adquisición de imágenes con iluminación y posicionamiento apropiado de la cámara.

Asimismo, el fondo del recinto sobre el cual se colocará la mano deberá ser definido.

5. El recinto de adquisición de imágenes deberá tener una abertura apropiada para el ingreso de la hoja que contiene los dígitos.

6. La configuración de la cámara para la adquisición de las imágenes la define cada UNO . 5+3

7. El resultado de la operación matemática deberá ser mostrado a través de una interfaz visual GUIDE, la cual deberá mostrar la imagen capturada y el resultado obtenido. A través de esta misma interfaz se deberá también operar el sistema y mostrar los resultados del valor agregado.

8. Se requiere que todas las funciones del software sean programadas con funciones de MATLAB.

Bueno pongamos nos Manos a la obra:

Interfaz Guide.

Figura 2. Interfaz GUIDE


En la figura 2, se muestra el interfaz GUIDE, esto cuenta con 6 texcam, 9 botonesm que permiten visualizar cada etapa de la adquisición y procesamiento de los datos:

El botón ENCENDER CAM : enciende la cámara web, realiza las configuraciones iniciales de la cámara web.

para realizar las configuraciones de la camara web y saber si el math lab lo reconoce, debemos previamente consultar a la función imaqtool, esta función propia de matlab genera una pantalla y nos muestra los dispositivos conectados a nuestro equipo y sus características, así como en el tipo de escala (grises o RGB), entre otros.

La función permite seleccionar la resolución, escala, y el encendido de la misma, ademas

genera automáticamente los códigos para su encendido, captura y apagado de la CAMWEB.

Figura 4. Imaqtool MATLAB

vid = videoinput('winvideo', 2, 'YUY2_640x480'); // resolucion de la imagen ,(2) indica que es la camara 2. src = getselectedsource(vid); vid.FramesPerTrigger = 1; vid.ReturnedColorspace = 'rgb'; // escala rgb o grises.

haciendo click al boton encerder cam de la figura 2. podemos ingresar el codigo como se muestra a continuacion:

podemos apreciar cuando el programa inicia, solo se visualiza el botón " encender cam", al seleccionarlo, habilita los botones "captura" y "apagar cam" , esto se realizo con la finalidad de poder mostrar el procesamiento de la imagen paso a paso.

Recordar que si deseamos activar visualizar un botón o cuadro, previamente debemos ponerlo en off, haciendo doble click en la figura a ocultar y seleccionando en el uicontrol la casilla visible: off.

así mismo, mediante la función image, solicitamos que el screem de la cámara se visualice en texcam1.

Una vez encendida la CAM, debemos controlar la iluminación, esta parte es muy importante, ya que sin una buena iluminación con luz BLANCA se obtendrá una imagen de baja resolución, ademas que tendríamos que realizar varios filtros, los cuales volverían a nuestro programa poco eficiente en la gestión del tiempo por adquisición.

Figura 3. Encendido de la CAM y Captura de la imagen.

De manera análoga, ingresamos el código para la captura de la imagen este codigo due extraido del imaqtool.

set(handles.texcam1,'visible','on'); foto=getsnapshot(vid); axes(handles.texcam1); imshow(foto);

la imagen obtenida de la cámara se visualiza en texcam2 en la parte inferior de la figura 3, como podemos notar se obtiene una imagen bien iluminada, la cual proporciona poder decernir cual es el fondo y cual es el numero, aun no hemos realizado ningún procesamiento en la imagen, a continuación vamos realizar 3 operaciones en un solo botón denominado PROCESAR:

Mediante el botón procesar, vamos adquirir la imagen

img = im2bw(foto) ;// 1) convertir la imagen a binario. img2=not(img); // 2) invertir la imagen. M=img2;

// realizamos un filtro gausisian [f,l,k]=size(M); %figure,imshow(M),impixelinfo %h=fspecial('gaussian',[100 100],125)% creo la mascaras

// filtro de mediana MF1=medfilt2(M,[3,3]); % proceso de convolucion M1=MF1 [f,l,k]=size(M1); h=(1/49)*ones(7,7) % macara promediadora MF=imfilter(M1,h)

en esta etapa nosotros vamos a eliminar el ruido producido por la calidad de la imagen, la "sal y pimienta" generado por la falta de iluminacion en algunas zonas, dando como resultado una imagen con 3 objetos facilmente reconocibles (Ver figura4), ya que la etapa siguiente se busca etiquetar, cuando digo etiqueta me refiero al simple echo de reconocer objetos, aun en esta etapa la computado no sabe aun que representan estos objetos ya que solo son un aglomerado de pixeles agrupados muy proximos.

Figura 4. Imagen Procesada y filtrada

Al seleccionar el boton procesar se genera la imagen binaria, filtrada y se visualiza el boton segmentar.

El botón segmentar tiene el objetivo de etiquetar cada aglomerado de pixel que van a representar un objeto, ademas de etiquetarlo tenemos que segmentar cada objeto para poder realizar el reconocimiento de cada objeto.

Figura 3. Imagen Procesada y filtrada

A continuacion se muestra el codigo para realizar la etapa de segmentado de cada objeto, la interpretacion del codigo se lo dejo al lector, como tip adicional indicarle que la imagen es una matriz de pixeles en funcion de ello se creo el siguiente codigo: imginvertida=MF; [me,etiquetas]=bwlabel(imginvertida,8); figure,imshow(me),impixelinfo; for i=1 [fi,co]=find (me==i); f1=min(fi); f2=max(fi); c1=min(co); c2=max(co); a=me (f1:f2,c1:c2); figure,imshow(a); %figure,imshow(a); end axes(handles.texcam3); imshow(a) for i=2 [fi,co]=find (me==i); f1=min(fi); f2=max(fi); c1=min(co); c2=max(co); b=me (f1:f2,c1:c2); figure,imshow(b); end axes(handles.texcam4); imshow(b) for i=3 [fi,co]=find (me==i); f1=min(fi); f2=max(fi); c1=min(co); c2=max(co); c=me (f1:f2,c1:c2); figure,imshow(c); end axes(handles.texcam5); imshow(c)

Al finalizar esta etapa de segmentado, prosigue la etapa de reconocimiento de la imagen, pero como hacer esto se preguntara, muy facil, debemos generar un sub programa que cuente con una base de datos como plantillas para cada numero, del 0 hasta el 9 incluyendo los 4 símbolos que son +,-,/ y * (suma, resta, división y multiplicación).

la base de datos debe contener las matrices de cada numero y símbolo en binario, ademas de un tamaño determinado, en este caso elabore 13 plantilla de 7x7 cada matriz de 0 y unos. como se puede apreciar a continuación:

Figura 5. Imagen Procesada y filtrada

Podéis crear tus propias plantillas de varias maneras, una de ellas es mediante el PAINT, crear imagen de un numero,guardarla en Mathlab, aplicar reimsize('fig.bmp',[7x7]), con esta función de Matlab la imagen de modelo que tenia un tamaño x,(para saber el tamaño podéis usar la función size('fig.bmp')), pasarlo a una dimensión fija de 7x7 como se puede apreciar en la figura 5.

De igual forma se realizara al objeto adquirido, ya que su tamaño puede llegar a ser de 200x200, por lo tanto debemos escalarlo al tamaño de nuestra plantilla.

Para poder comparar nuestro objeto ya escalado y nuestra plantilla debemos primero corroborar si son del mismo tamaño y si esta en binario, comprobado esto utilizaremos la función corr2() de Matlab la cual permite comparar las dos imagenes en una escala de 0 a 1. razón por la cual debemos de realizar la correlación a los 10 números y 4 símbolos, con el objetivo de reconocer quien es el segundo con mayor proximidad al 1, ya que el numero que coincida a la plantilla tendera a 1 y los demás no, pero habrá algunos que por su forma se aproximaran 0.6 o 0.7 dependiendo de la buena adquisición de la imagen y diseño de la plantilla.

Figura 6. Matriz de coincidencias

La figura 6, muestra la matriz de coincidencias, ya que es la correlacion de un objeto en este caso el 3, con las 14 plantillas, desde el 0 hasta 9 y los 4 simbolos, como podemos observar el el 3 por coincidir con el tiende a 1 dando como resultado 0.9599 y siendo el 5 el segundo con mayor aproximidad a la forma nos resulta 0.6761, he aqui donde definimos la condicion para este objeto ya que para todo numero mayor a 0.85 sera 3 y por que 0.85, y no 0.6761 ya que debemos darle una tolerancia, en caso aparezca un 0.7 o 0.8, siendo las probabilidades que esto suceda.

Podéis descargar la función pato a continuación:

finalmente, se reconocen los numeros y se obtiene 3 variables las cuales indican cada numero, a partir de aqui se realiza, las operaciones basicas en matlab.

VIDEO

Podeis descar y mejorar el programa, dejanos tus comentario he indicanos si tienes alguna duda para aclaratelo a la brevedad posible.

Contactanos en Facebook: https://www.facebook.com/MICROTECSD/

Agradecimiento:

Un especial agradecimiento al Prof. Ing. Christian del Carpio Damián por los consejos y por el suministro de los conocimientos previos para la elaboración del presente proyecto,

Ademas un especial saludo, a mis compañeros Ana Maria Del Carmen, Flores Rio Jonathan jack

que me apoyaron en todo momento con sus ocurrencias.

Fuentes :

Un cordial saludo.

G.A.


About Me.

I'm a paragraph. Click here to add your own text and edit me. I’m a great place for you to tell a story and let your users know a little more about you.

  • Black Facebook Icon
  • Black Instagram Icon
  • Black Twitter Icon
Never Miss a Post!
bottom of page