1 / 28

Introducción a la librería MIL

Introducción a la librería MIL. Matrox Imaging Library (MIL) Filosofía MIL Elementos de una aplicación MIL Integración de las MIL en VC++ Adquisición de Imágenes. Matrox Imaging Library (MIL). MIL es una librería modular de tratamiento de imágenes. Características:. Independiente de HW*

Download Presentation

Introducción a la librería MIL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introducción a la librería MIL • Matrox Imaging Library (MIL) • Filosofía MIL • Elementos de una aplicación MIL • Integración de las MIL en VC++ • Adquisición de Imágenes Prácticas de Visión Artificial

  2. Matrox Imaging Library (MIL) MIL es una librería modular de tratamiento de imágenes. Características: • Independiente de HW* • Permite la adquisición de imágenes • Módulos: • Procesamiento de Imágenes • Análisis de Blobs • Reconocimiento de Formas • Reconocimiento de Caracteres • Medidas • Soporte para varios entornos de Prog. Prácticas de Visión Artificial

  3. Filosofía MIL • La librería MIL utiliza un modo de trabajo • basado en la utilización de elementos • independientes. • A partir de la definición de los elementos • básicos se realizan el resto de operaciones. • El ciclo de vida de una aplicación MIL • sería: • Creación de los elementos básicos • Creación de elementos adicionales • Llamadas a funciones de la librería • Destrucción de los elementos creados Prácticas de Visión Artificial

  4. Arquitectura Software Usuario Aplicación MIL Proc. de Imágenes Pattern Matching Elementos MIL Básicos Aplicación MIL Sistemas y Disp. Adq. Datos y Visualiz. Análisis de Blobs Medidas HW Driver HW Prácticas de Visión Artificial

  5. Notación • Las funciones MIL siempre comienzan por • la letra M, seguida por letras minúsculas • correspondientes al Modulo, y a continuación • la función que hacen: • MmodFuncion • Modulos: • app, blob, buf, dig, disp, gen, gra, • im, meas, ocr, pat, sys. • Funciones Comunes: • Alloc, Control, Inquire, Free • Notación Curso: • MmodFuncion() • Tipo Parámetro1 Descripción • Tipo Parámetro2 Descripción • .... Prácticas de Visión Artificial

  6. Elementos de una aplicación MIL • Toda aplicación MIL debe contener los • siguientes elementos básicos: • La aplicación MIL y • un sistema. • La aplicación MIL crea un entorno que • controla la ejecución de las funciones MIL • dentro de nuestra aplicación. • Los sistemas son los recursos HW que • utilizará nuestra aplicación. • Cada sistema se encarga de gestionar sus • recursos, que pueden ser: • buffers (imágenes). • digitizers (dispositivos de adquisición). • displays (dispositivos de visualización). Prácticas de Visión Artificial

  7. Elementos de una aplicación MIL Los elementos básicos de una aplicación MIL siguen el siguiente esquema: Aplicación Sistema 2 Sistema 1 Buffer Digitizer Display Prácticas de Visión Artificial

  8. Elementos básicos MIL • MIL_ID • Tipo de datos que se utiliza para todos los elementos MIL (es un nº de identificación). • MappAlloc () • long InitFlagFlag de inicialización • MIL_ID *ApplicationIdPtrValor de retorno(Id. Ap.) • MappFree () • MIL_ID ApplicationId Identificador de la App. • MsysAlloc () • void *SystemTypePtrTipo de sistema • long SystemNumNúmero de sistema • long InitFlagFlag de inicialización • MIL_ID *SystemIdPtrValor de retorno(Id. Sistema) • MsysFree () • MIL_ID SystemId Identificador del sistema Prácticas de Visión Artificial

  9. Imágenes • Podemos ver una imagen como una estructura de datos: un array de pixels • Dimensión del array: • Imagen MIL Buffer + M_IMAGE MbufAlloc1d() MbufAlloc2d() MbufAllocColor() • Tipos de datos: Prácticas de Visión Artificial

  10. Buffers • Atributos: • MbufAlloc1d () • MIL_ID SystemIdIdentificador del sistema • long SizeXDimensión Y • long DataTypeTipo de datos • long Attribute Atributos del Buffer • MIL_ID *BufferIdPtrValor de retorno(Id.Buffer) • MbufAlloc2d () • Igual que MbufAlloc1d() más: • long SizeYDimensión Y • MbufAllocColor () • Igual que MbufAlloc2d() más: • long SizeBandNúmero de canales Prácticas de Visión Artificial

  11. Display La forma de visualizar una imagen es utilizando el elemento display, que controla la visualización de imágenes. • MdispAlloc () • MIL_ID SystemIdIdentificador del sistema • long DispNum Número de display (M_DEVX) • char* DispFormatFormato (“M_DEFAULT”) • long InitFlag Flag de inicialización (M_DEFAULT) • MIL_ID *DisplayIdPtrValor de retorno(Id.Disp.) • MdispFree () • MIL_ID DisplayIdId. del Display • MdispSelect () • MIL_ID DisplayIdId. del Display • MIL_ID DisplayIdId. del Buffer (Imagen) Prácticas de Visión Artificial

  12. Dispositivos de Adquisición Las MIL soportan una amplia variedad de dispositivos de adquisición (cámaras), mediante el elemento digitizer, que controla el proceso de adquisición. • MdigAlloc () • MIL_ID SystemIdIdentificador del sistema • long DigNum Número de dispositivo (M_DEVX) • char* DataFormatFormato (Std. o ficheros .dcf) • long InitFlag Flag de inicialización (M_DEFAULT) • MIL_ID *DigitizerIdPtrValor de retorno(Id.Dig.) • MdigFree () • MIL_ID DigitizerIdId. del Digitizer • MdigChannel () • MIL_ID DigitizerIdId. del Digitizer • long ChannelCanal de entrada (Depende del frame grabber) Prácticas de Visión Artificial

  13. Inicialización Rápida • Es posible inicializar el entorno con una • sóla función: • MappAllocDefault () • long InitFlagFlag de inicialización • MIL_ID *ApplicationIdPtrAplicación • MIL_ID *SystemIdPtrSistema • MIL_ID *DisplayIdPtrDisplay • MIL_ID *DigIdPtrDigitizer • MIL_ID *ImageBufIdPtrBuffer (Imagen) • MappFreeDefault () • Con los Id. Colocados en el mismo orden. Prácticas de Visión Artificial

  14. Integración de las MIL en VC++ • Desde el punto de vista de código, las MIL • son un conjunto de Librerías escritas en C. • Por tanto, la mejor forma de aprovechar todo su potencial es utilizar un entorno de programación para C/C++. • Microsoft Visual C++ 5.0 • Existen cuatro posibles tipos de aplicación • que podemos hacer con las MIL y el VC++ • Cónsola MS DOS. • Diálogo. • Documento/Vista. • Active MIL. • Integración de las MIL en el entorno. Prácticas de Visión Artificial

  15. Integración de las MIL en el entorno. Includes Tools|Options Librerías *.lib Prácticas de Visión Artificial

  16. Aplicación de Cónsola La aplicación cónsola utiliza una ventana MS-DOS para ejecutarse, y una ventana MIL para la visualización. Prácticas de Visión Artificial

  17. Aplicación de Diálogo Aprovechando que VC++ es un entorno de desarrollo de aplicaciones para los sistemas operativos W95, W98 y NT, realizaremos aplicaciones con interficie gráfica. La más sencilla, es una aplicación que consta sólo de una ventana sin menús, a la que se le pueden añadir componentes: un Diálogo. Para crear una aplicación Diálogo se utiliza la herramienta AppWizard del VC++. Para llamar a esta herramienta: File|New Y la opción: Dialog based Prácticas de Visión Artificial

  18. Clases Cuando se crea una aplicación AppWizard el entorno nos crea el esqueleto de la apli- cación. Esta será una aplicación C++ basada en la librería MFC. La forma de acceder a el código es con la vista de clases: Prácticas de Visión Artificial

  19. MIL en aplicaciones Diálogo • La programación en Windows está basada • en la respuesta a eventos. Hemos de conocer • los eventos para llamar a las funciones MIL. • Eventos básicos: • WM_INITDIALOG OnInitDialog() • Inicialización del entorno MIL. • WM_DESTROY OnDestroy() • Destrucción del entorno. • Realizar el ejemplo 1 basado en diálogo. Prácticas de Visión Artificial

  20. Visualización Windows Para Visualizar hemos de modificar los recursos de nuestra aplicación: • Debemos añadir el componente Bitmap, y modificar • sus propiedades: • Type: bitmap • Activar Center Image • Cambiar nombre: IDC_? Prácticas de Visión Artificial

  21. MdispSelectWindow Para poder visualizar una imagen en una ventana, utilizaremos una función que define el display en una ventana: • MdispSelectWindow () • MIL_ID DisplayIdId. del Display • MIL_ID DisplayIdId. del Buffer (Imagen) • HWND ClientWindowHandle Handle a ventana ¿Cómo acceder a él? ClassWizzard Prácticas de Visión Artificial

  22. Eventos Propios Si nos interesa controlar el flujo de la aplicación debemos crear nuestros eventos, para ello añadimos controles. Y enlazamos el código a la respuesta a un evento (ClassWizzard): void CEj2Dlg::OnDisplay() { MbufClear(MilImage, 0L); MgraColor(M_DEFAULT, 255L); MgraArcFill(M_DEFAULT, MilImage, 256L, 240L, 100L, 100L, 0.0, 360.0); MdispSelectWindow(MilDisplay, MilImage, m_Imagen); } Prácticas de Visión Artificial

  23. Adquisición de Imágenes De la adquisición de imágenes se encarga el módulo digitizer, con las siguientes funciones: Adquirir una imagen • MdigGrab () • MIL_ID DigIdIdentificador del digitizer • MIL_ID BufferIdBuffer donde se guardará la ima. • MdigGrabContinuous () • MIL_ID DigIdIdentificador del digitizer • MIL_ID BufferIdBuffer donde se guardará la ima. • MdigHalt () • MIL_ID DigIdIdentificador del digitizer Adquirir en contínuo Parar adquisición (cuando está en contínuo) Prácticas de Visión Artificial

  24. Doble Buffer • A veces es interesante realizar proceso • mientras se adquiere la siguiente imagen. • Para ello, utilizaremos la técnica del doble • buffer, poniendo el digitizer el modo • Asíncrono: • MdigControl(DigId, M_GRAB_MODE, • M_ASYNCHRONOUS); • De esta forma, devuelve el control a la • aplicación antes de terminar la adquisición. • Si queremos asegurarnos de que se ha proce- • sado la imagen antes de adquirir la siguiente: • MdigGrabWait () • MIL_ID DigIdIdentificador del digitizer • long FlagM_GRAB_END, _GRAB_NEXT_FRAME, ... Prácticas de Visión Artificial

  25. Ejemplo de doble buffer // Reservar dos buffers MbufAlloc2d(..., &MilImage[0]); MbufAlloc2d(..., &MilImage[1]); // Grabar en el primer buffer MdigGrab(MilDigitizer, MilImage[0]); // Poner digitizer en modo Asíncrono MdigControl(MilDigitizer, M_GRAB_MODE, M_ASYNCHRONOUS); // Procesar un Buffer mientras se adquiere en otro while( !kbhit() ) { // Adq. segunda imagen mientras se procesa la primera MdigGrab(MilDigitizer, MilImage[1]); // Procesar primera imagen Mim...(..., MilImage[0]); // Adq. primera imagen mientras se procesa la segunda MdigGrab(MilDigitizer, MilImage[0]); // Procesar segunda imagen Mim...(..., MilImage[0]); } Prácticas de Visión Artificial

  26. Trabajar con ficheros de imágenes • Si no se dispone de un dispositivo de adqui- • sición, podemos trabajar con imágenes • guardadas en fichero en alguno de los • siguientes formatos: • MIM (Formato de imagen MIL) • TIFF • BMP • RAW • También podemos grabar en disco imágenes • adquiridas en los formatos anteriormente • mencionados. • Para trabajar con ficheros de imágenes • utilizaremos funciones del módulo buffer. Prácticas de Visión Artificial

  27. Recuperación de imágenes en disco Pedir información del fichero imagen • MbufDiskInquire () • char* FileNameNombre del fichero • long ParamToInquireParámetro • void* UsersVarPtr Variable de usuario • MbufImport () • char* FileNameNombre del fichero • MIL_ID FileFormatId Formato del fichero • long Operation Modo de importación • MIL_ID SystemId Id. del Sistema • MIL_ID* BufferIdPtr Valor de retorno (Id.buffer) • MbufLoad (FileName, BufId) • MbufRestore (FileName, SystemId, *BufId) Leer de Fichero y guardar en un buffer MIL Leer de Fichero en Formato MIL Prácticas de Visión Artificial

  28. Almacenamiento de imágenes a disco Guardar en Fichero • MbufExport () • char* FileNameNombre del fichero • MIL_ID FileFormatId Formato del fichero • MIL_ID SrcBufferId Identificador del buffer • MbufSave (FileName, BufId) Guardar en Fichero en Formato MIL Diálogo Windows de gestión de Ficheros: static char BASED_CODE szFilter[] = "TIFF Image (*.tif)|*.tif|All Files (*.*)|*.*||"; CFileDialog d( FALSE, "tif", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL ); CString nombre; d.m_ofn.lpstrInitialDir= "c:\\"; if (d.DoModal()==IDOK) { nombre = d.GetPathName() ; char FileName[200]; strcpy (FileName, LPCTSTR(nombre)); MbufExport(FileName, M_TIFF, MilImage); } Prácticas de Visión Artificial

More Related