matrox imaging library (mil) prácticas de visión artificial 1 introducción a la librería mil...
TRANSCRIPT
Prácticas de Visión Artificial
1
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
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
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Matrox Imaging Library (MIL)
MIL es una librería modular de tratamientode 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
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Filosofía MIL
La librería MIL utiliza un modo de trabajobasado en la utilización de elementosindependientes.
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 MILserí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
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Arquitectura Software
Aplicación
Análisisde Blobs
PatternMatching
AplicaciónMIL
Sistemas yDisp. Adq.
Datos yVisualiz.
Elementos MIL Básicos
Proc. deImágenes
Medidas
MIL
Driver HWHW
Usuario
Prácticas de Visión Artificial
5
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Notación
Las funciones MIL siempre comienzan porla letra M, seguida por letras minúsculas correspondientes al Modulo, y a continuaciónla 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ónTipo Parámetro2 Descripción....
Prácticas de Visión Artificial
6
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Elementos de una aplicación MIL
Toda aplicación MIL debe contener lossiguientes 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 susrecursos, que pueden ser:
• buffers (imágenes).• digitizers (dispositivos de adquisición).• displays (dispositivos de visualización).
Prácticas de Visión Artificial
7
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Elementos de una aplicación MIL
Los elementos básicos de una aplicaciónMIL siguen el siguiente esquema:
Aplicación
Sistema 1
Buffer
Sistema 2
Digitizer Display
Prácticas de Visión Artificial
8
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
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 InitFlag Flag de inicialización
MIL_ID *ApplicationIdPtr Valor de retorno(Id. Ap.)
• MappFree ()
MIL_ID ApplicationId Identificador de la App.
• MsysAlloc ()
void *SystemTypePtr Tipo de sistema
long SystemNum Número de sistema
long InitFlag Flag de inicialización
MIL_ID *SystemIdPtr Valor de retorno(Id. Sistema)
• MsysFree ()
MIL_ID SystemId Identificador del sistema
Prácticas de Visión Artificial
9
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
• Podemos ver una imagen como una estructura de datos: un array de pixels
• Dimensión del array:Cámara lineal 1D
Cámara B/N 2DCámara color 3x2D
Imágenes
• Tipos de datos:Binarios 1 bit
Enteros (con o sin signo) 8, 16 o 32 bitsReales 32 bits
• Imagen MIL Buffer + M_IMAGE
MbufAlloc1d()MbufAlloc2d()MbufAllocColor()
Prácticas de Visión Artificial
10
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Buffers
• MbufAlloc1d ()
MIL_ID SystemId Identificador del sistema
long SizeX Dimensión Y
long DataType Tipo de datos
long Attribute Atributos del Buffer
MIL_ID *BufferIdPtr Valor de retorno(Id.Buffer)
• MbufAlloc2d ()
Igual que MbufAlloc1d() más:
long SizeY Dimensión Y
• MbufAllocColor ()
Igual que MbufAlloc2d() más:
long SizeBand Número de canales
• Atributos:M_IMAGE M_GRAB
M_LUT M_PROCM_STRUCT_ELEMENT M_DISP
M_KERNEL
Prácticas de Visión Artificial
11
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Display
La forma de visualizar una imagen esutilizando el elemento display, que controla la visualización de imágenes.
• MdispAlloc ()
MIL_ID SystemId Identificador del sistema
long DispNum Número de display (M_DEVX)
char* DispFormat Formato (“M_DEFAULT”)
long InitFlag Flag de inicialización (M_DEFAULT)
MIL_ID *DisplayIdPtr Valor de retorno(Id.Disp.)
• MdispFree ()
MIL_ID DisplayId Id. del Display
• MdispSelect ()
MIL_ID DisplayId Id. del Display
MIL_ID DisplayId Id. del Buffer (Imagen)
Prácticas de Visión Artificial
12
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Dispositivos de Adquisición
Las MIL soportan una amplia variedadde dispositivos de adquisición (cámaras),mediante el elemento digitizer, que controlael proceso de adquisición.
• MdigAlloc ()
MIL_ID SystemId Identificador del sistema
long DigNum Número de dispositivo (M_DEVX)
char* DataFormat Formato (Std. o ficheros .dcf)
long InitFlag Flag de inicialización (M_DEFAULT)
MIL_ID *DigitizerIdPtr Valor de retorno(Id.Dig.)
• MdigFree ()
MIL_ID DigitizerId Id. del Digitizer
• MdigChannel ()
MIL_ID DigitizerId Id. del Digitizer
long Channel Canal de entrada (Depende del frame grabber)
Prácticas de Visión Artificial
13
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Inicialización Rápida
Es posible inicializar el entorno con una
sóla función:
•MappAllocDefault ()
long InitFlag Flag de inicialización
MIL_ID *ApplicationIdPtr Aplicación
MIL_ID *SystemIdPtr Sistema
MIL_ID *DisplayIdPtr Display
MIL_ID *DigIdPtr Digitizer
MIL_ID *ImageBufIdPtr Buffer (Imagen)
• MappFreeDefault ()
Con los Id. Colocados en el mismo orden.
Prácticas de Visión Artificial
14
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Integración de las MIL en VC++
Desde el punto de vista de código, las MILson 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
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Integración de las MIL en el entorno.
Includes Tools|Options
Librerías
*.lib
Prácticas de Visión Artificial
16
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Aplicación de Cónsola
La aplicación cónsola utiliza una ventanaMS-DOS para ejecutarse, y una ventanaMIL para la visualización.
Prácticas de Visión Artificial
17
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Aplicación de Diálogo
Aprovechando que VC++ es un entorno dedesarrollo de aplicaciones para los sistemasoperativos W95, W98 y NT, realizaremosaplicaciones con interficie gráfica.
La más sencilla, es una aplicación que constasólo de una ventana sin menús, a la que se lepueden añadir componentes: un Diálogo.
Para crear una aplicación Diálogo seutiliza 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
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Clases
Cuando se crea una aplicación AppWizardel entorno nos crea el esqueleto de la apli-cación.
Esta será una aplicación C++ basada en lalibrería MFC.
La forma de acceder a el código es con la vista de clases:
Prácticas de Visión Artificial
19
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
MIL en aplicaciones Diálogo
La programación en Windows está basadaen la respuesta a eventos. Hemos de conocerlos 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
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Visualización Windows
Para Visualizar hemos de modificar losrecursos de nuestra aplicación:
Debemos añadir el componente Bitmap, y modificarsus propiedades:
• Type: bitmap• Activar Center Image• Cambiar nombre: IDC_?
Prácticas de Visión Artificial
21
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
MdispSelectWindow
Para poder visualizar una imagen en una ventana, utilizaremos una función quedefine el display en una ventana:
•MdispSelectWindow ()
MIL_ID DisplayId Id. del Display
MIL_ID DisplayId Id. del Buffer (Imagen)
HWND ClientWindowHandle Handle a ventana
¿Cómo acceder a él? ClassWizzard
Prácticas de Visión Artificial
22
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
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 unevento (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
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Adquisición de Imágenes
De la adquisición de imágenes se encargael módulo digitizer, con las siguientesfunciones:
• MdigGrab ()
MIL_ID DigId Identificador del digitizer
MIL_ID BufferId Buffer donde se guardará la ima.
• MdigGrabContinuous ()
MIL_ID DigId Identificador del digitizer
MIL_ID BufferId Buffer donde se guardará la ima.
• MdigHalt ()
MIL_ID DigId Identificador del digitizer
Adquirir una imagen
Adquirir en contínuo
Parar adquisición (cuando está en contínuo)
Prácticas de Visión Artificial
24
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Doble Buffer
A veces es interesante realizar procesomientras se adquiere la siguiente imagen.
Para ello, utilizaremos la técnica del doblebuffer, poniendo el digitizer el modoAsí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 DigId Identificador del digitizer
long Flag M_GRAB_END, _GRAB_NEXT_FRAME, ...
Prácticas de Visión Artificial
25
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Ejemplo de doble buffer
// Reservar dos buffersMbufAlloc2d(..., &MilImage[0]); MbufAlloc2d(..., &MilImage[1]);
// Grabar en el primer bufferMdigGrab(MilDigitizer, MilImage[0]);
// Poner digitizer en modo AsíncronoMdigControl(MilDigitizer, M_GRAB_MODE,
M_ASYNCHRONOUS);
// Procesar un Buffer mientras se adquiere en otrowhile( !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
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Trabajar con ficheros de imágenes
Si no se dispone de un dispositivo de adqui-sición, podemos trabajar con imágenesguardadas en fichero en alguno de lossiguientes formatos:
• MIM (Formato de imagen MIL)• TIFF• BMP• RAW
También podemos grabar en disco imágenesadquiridas en los formatos anteriormentemencionados.
Para trabajar con ficheros de imágenes utilizaremos funciones del módulo buffer.
Prácticas de Visión Artificial
27
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Recuperación de imágenes en disco
• MbufDiskInquire ()
char* FileName Nombre del fichero
long ParamToInquire Parámetro
void* UsersVarPtr Variable de usuario
• MbufImport ()
char* FileName Nombre 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)
Pedir información del fichero imagen
Leer de Fichero y guardar en un buffer MIL
Leer de Fichero en Formato MIL
Prácticas de Visión Artificial
28
Matr
ox Im
ag
ing
Lib
rary
(M
IL)
Almacenamiento de imágenes a disco
•MbufExport ()
char* FileName Nombre del fichero
MIL_ID FileFormatId Formato del fichero
MIL_ID SrcBufferId Identificador del buffer
• MbufSave (FileName, BufId)
Guardar en Fichero
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); }