Sei sulla pagina 1di 0

Manual de usuario

Ver.1.0










visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
3

Nota preliminar

Sherlock constituye una herramienta estndar de ejecucin de aplicaciones de
visin artificial orientado a entornos industriales.

Infaimon pretende con este manual facilitar el acceso y la utilizacin de
Sherlock a cualquier persona con inters e iniciativa para la configuracin de
sistemas de visin de forma sencilla y gil.

Este manual se completa con los manuales originales suministrados por los
fabricantes del producto y con la informacin distribuida por Infaimon en
conjunto con este manual de usuario.

Asimismo, ponemos a su disposicin nuestro equipo tcnico para cualquier
duda o consulta al respecto de este manual y de Sherlock mediante el correo
electrnico stecnic@infaimon.com.





















INFAIMON (Spain)

INFAIMON(Spain)

INFAIMON (Portugal)

INFAIMON Mxico
Vergs, 55

Ribera del Loira, 46

Rua Sra. do Alamo, 48

Av. Insurgentes Sur, 600 - 301
E-08017 Barcelona

E-08042 Madrid

Esgueira 3800-262

Col. Del Valle
Espaa

Espaa

Aveiro - (Portugal)

03100 Mxico D.F.
Tel. (+34) 93 252 5757

Tel. (+34) 902 463 246

Tel. (+351) 234 312 034

Tel. (+52) 55 1107 0814
Fax. (+34) 93 252 5758

Fax. (+34) 91 503 0090

Fax.(+351) 234 312 035

Fax. (+52) 55 1107 1904 ext. 121
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
4

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
5
INDICE
n de pgina

1. Instalacin del Software....................................................................6
2. Compativilidad con Hardware ...........................................................7
3. Licencias...........................................................................................8
4. Herramientas ....................................................................................9
4.1. ROIs ...........................................................................................9
4.1.1. ROIs rea.........................................................................9
4.1.2. ROIs Lnea......................................................................10
4.2. Preproceso ...............................................................................13
4.2.1. [1x3,1x5, 1x7, 3x1, 3x3, 5x1, 5x5 y 7x1] .......................14
4.2.2. Constant .........................................................................14
4.2.3. Dice.................................................................................14
4.2.4. Dilate y Erode ...............................................................15
4.2.5. Equalize..........................................................................15
4.2.6. Proceso First...................................................................15
4.2.7. Proceso Flip....................................................................16
4.2.8. Gain Offset......................................................................16
4.2.9. Procesos Gausianos ......................................................16
4.2.10 Gradient ..........................................................................17
4.2.11 Procesos Highpass.........................................................17
4.2.12 Procesos Aridmticos.....................................................17
4.2.13 Invert...............................................................................18
4.2.14 Procesos ........................................................................18
4.2.15 Median............................................................................18
4.2.16 Noise ..............................................................................19
4.2.17 Normalize .......................................................................19
4.2.18 Outline ............................................................................20
4.2.19 Procesos de Gradiente...................................................20
4.2.20 Project H, Project V ........................................................20
4.2.21 Random..........................................................................21
4.2.22 Rotate.............................................................................21
4.2.23 Sharpen..........................................................................21
4.2.24 Skeleton..........................................................................21
4.2.25 Smooth ...........................................................................22
4.2.26 Procesos de Binarizacin ...............................................22
4.3. Algorithms................................................................................22
4.4. Herramientas monocromo........................................................22
4.4.1. Inside Caliper y Outside Caliper ......................................23
4.4.2. Edge Count......................................................................24
4.4.3. First Edge ........................................................................25
4.4.4. Conectivity .......................................................................26
4.4.5. Barcode ...........................................................................27
4.4.6. Search .............................................................................28
4.4.7. OCR Gray Scale..............................................................33
4.5. Herramientas de color..............................................................37
4.5.1. Color Presece Meter........................................................37
4.5.2. Spot Meter .......................................................................40
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
6


n de pgina

4.5.3. Color Mapping ................................................................46
5. Calibracin .....................................................................................51
5.1. Calibracin Software, mtodo 1: Puntos..................................52
5.2. Calibracin Software, mtodo 2: Valores de Transf. ................55
6. Landmarks y Alineaci ...................................................................59
7. GUI .................................................................................................66
7.1. Interfaz.....................................................................................66
7.1.1. La barra de herramientas ................................................68
7.1.2. El men principal .............................................................68
7.2. Ventana de imagen (image Windows) .....................................70
7.2.1. La barra de herramientas de la ventana de imagen ........71
7.3. ROIs, Algoritmos y Preprocesos ..............................................72
7.3.1. ROIs rea.......................................................................73
7.3.2. ROIs Lnea......................................................................74
7.3.3. Algoritmos.......................................................................76
7.3.4. Pre-procesadores ...........................................................77
7.3.5. Posicionados de ROIs ....................................................80
7.3.6. Propiedades de las ROI ..................................................82
7.4. Programa, Readings y Variables ............................................87
7.5. Variables.................................................................................91
7.6. Instrucciones...........................................................................94
7.6.1. Instrucciones de flujo del programa ................................96
7.6.2. Subrutinas.....................................................................100
7.7. Monitor and Reporter ............................................................105
7.8. Depuracin (Debugging) .......................................................107
7.8.1. Ejecucin del modo paso a paso ..................................107
7.8.2. Ejecucin en Modo ralentizado.....................................107
7.8.3. Modo de Instrucciones Resaltadas...............................108
7.8.4. Breakpoints...................................................................108
7.9. Imgenes ..............................................................................110
7.10. Progamacin con JavaScript ................................................113
8. Controles ActiveX .........................................................................117
8.1. Introduccin ..........................................................................117
8.1.1. Ejemplos .......................................................................117
8.2. Arquitectura GUI de usuario..................................................118
8.3. Implementacin de la GUI ....................................................119
ADENDUM.........................................................................................122

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
7

1 1. . I In ns st ta al la ac ci i n n d de el l S So of ft tw wa ar re e

Sherlock debe ser instalado en sistemas operativos Windows 2000 o Windows
XP desde el CD-ROM de Sherlock. En el caso de que el CD-ROM no arranque
automticamente, haga clic en Inicio de Windows, seleccione ejecutar, e
introduzca setup.exe de la unidad donde est el CD.

Se recomienda realizar el proceso de instalacin por defecto, o bien utilizar el
explorador de Windows, para navegar en el CD-ROM, y hacer un doble-clic en
el archivo setup.exe del CD-ROM. Se abrir una pantalla de instalacin en la
que se debe seleccionar el sistema operativo y el sofware a instalar. Una vez
seleccionados los campos, deber ir a la opcin Install Sofware, y seleccionar
la direccin donde se deber instalar el programa, tras el proceso de
instalacin, Sherlock aparecer automticamente en el men Inicio de
Windows.

Para utilizar Sherlock 7 como software de captura, deber asegurarse de tener
instalados alguno o varios de los siguientes softwares de adquisicin (en
dependencia del tipo de cmara a utilizar para la adquisicin) previamente al
proceso de instalacin:

1. Sapera LT Runtime (5.2 o superior).
2. IFC Runtime (5.9 o superior).
3. CI1394 para cmaras AVT.

Por ltimo deber instalar el Software Sentinel si su licencia de software est
ligada a una llave externa USB o puerto paralelo.




visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
8

2 2. . C Co om mp pa at ti ib bi il li id da ad d c co on n H Ha ar rd dw wa ar re e

Sherlock puede funcionar con imgenes bmp, jpeg o gif guardadas en el disco
duro o bien con imgenes de cmaras capturadas con:

Plataforma frame grabber Libreras IFC / SAPERA LT:

Las libreras IFC y Sapera, y sus utilidades para configurar cmaras
funcionan de forma separada del Sherlock. Sherlock puede funcionar sin
necesidad de estas libreras. Las libreras runtime y los drivers estn
incluidos en el CD-ROM de Sherlock.

Sherlock necesita las libreras Sapera o IFC, para capturar imgenes de
los frame grabbers de Coreco.

Frame grabbers basados en:

IFC SAPERA LT

Pc2Vision X64
PcVision Bandit II
PcVisionplus Netsight II CL / VA50
PcCamlink
PcDig
PcRGB
Netsigth II analog / VA40
VA21


Plataforma cmara digital IEEEa.
Las CI1394 son un subconjunto de las libreras IFC, con ellas podr
capturar con cmaras AVT, accediendo a todas sus funcionalidades.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
9

3 3. . L Li ic ce en nc ci ia as s

Sherlock requiere de una licencia que puede estar ligada a una llave externa
(Mochila USB o puerto paralelo) o al Frame Grabber de DALSA Coreco.

Sherlock 7 no funciona con licencias de Sherlock 6.x o inferior.

Sherlock, sin licencia, funcionar en modo DEMO, pudiendo realizar todas las
funciones exceptuando la adquisicin de imagen.

Para poder instalar las licencias de llave externa (USB o puerto paralelo), se
deber instalar el software Sentinel, una vez ya est instalado el software
Sherlock.

Sentinel se utiliza para monitorizar las licencias y define si se esta trabajado en
(Full o Demo mode).

La utilidad License Manager de Sherlock 7 se utiliza para supervisar las
licencias instaladas. El programa License Manager se encuentra en:

Start > Programs > ipd ... > Sherlock > License Manager.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
10

4 4. . H He er rr ra am mi ie en nt ta as s

En Sherlock 7 los procesos o preprocesos que se utilizan en las herramientas
de rea, lnea o multilnea, los tendremos que clasificar en dos grupos:
monocromo y color. Esta separacin se realiza ya que no sern los mismos
procesos y preproceso que podamos utilizar, dependiendo de si la imagen es
en color o en blanco y negro.

A una imagen colorse le pueden aplicar todos los preprocesos y procesos, ya
que se puede convertir en monocromo y trabajar posteriormente con ella.


4 4. .1 1. . R RO OI Is s

Una ROI (regin de inters) define el rea de pxels a procesar. Una ventana
de imagen puede contener tantas ROI como sean necesarias.

Hay dos tipos de ROIs: rea y lnea.



4 4. .1 1. .1 1. . R RO OI Is s d de e r re ea a

En las ROI de rea se procesan los pxels interiores del rea incluyendo los
contenidos en los bordes.




Las ROIs de rea se utilizan para procesar grupos de pxeles de dos
dimensiones.


Lectura de un cdigo de barras con un ROI rectangular
Rectngulo Anillo Polgono Toroide rea Circular
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
11


Realizacin de un anlisis Blob con una ROI anular

Cuando la ROI anular procesa sus pxels, los redistribuye en un
rectngulo, y puede tener cierta distorsin. Los cuadrados rojos que enmarcan
los botones de los ROI polgonos, toroides y crculos significan que procesan
sus pxeles en el lugar, sin remapearlos en un rectngulo, por tanto no ocurre
distorsin.


4 4. .1 1. .2 2. . R RO OI Is s d de e L L n ne ea a

Los ROIs de tipo lnea procesan los pxels a lo largo de la lnea. Hay dos tipos
de ROIs de lnea: Simple y Mltiple.

Simple




Mltiple





Las ROI circunferencia, arco iris y ojos de buey procesan los pxels a lo
largo de sus lneas, no dentro o entre ellas.
Punto Lnea Poli-lnea Arco Circunferencia
Rastrillo Radial Arco iris Ojo de Buey
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
12
Para aadir una ROI a una ventana de imagen, hay que hacer clic en el botn
ROIs, en la barra de herramientas de la ventana, y despus hay que hacer clic
en la ventana de imagen para definir la posicin y tamao de la misma.

Diferentes ROIs requieren diferentes nmeros de clic para definir su tamao y
posicin.

Punto Un Clic.
Lnea Dos clics, uno para cada extremo de la lnea.
Poli-lnea n clics, uno para cada vrtice de la lnea; doble clic izquierdo
para completar la lnea.
Arco Tres clics, uno para cada lmite del arco, uno que define la
curvatura.
Circunferencia Dos clic, uno para el centro y otro que define el radio.
Rastrillo Dos clic, uno para cada esquina del rectngulo que lo define.
Radial
(Spoke)
Tres clics, uno para situar el centro de la rueda, dos ms
para situar el inicio y el fin del radio.
Arco Iris Cuatro clics, uno para cada extremo del arco iris, uno para
definir la curvatura del arco interior o exterior y uno para definir
la concentricidad del arco interno o externo.
Ojo de Buey Tres clics, uno para posicionar el centro del ojo de buey, uno
para definir el radio del crculo interno o externo y otro para
definir el otro radio interior o exterior.
Rectngulo Dos clics, uno para cada esquina opuesta.
Anillo Cuatro clics, uno para cada extremo del arco, uno para definir
el arco interno o externo y otro para definir el arco externo o
interno.
Polgono n clics, uno para cada vrtice del polgono y hacer doble clic
izquierdo para completar el polgono.
Toroide Tres clics, uno para posicionar el centro del crculo, uno para
definir el radio interno o externo del crculo y uno para definir el
radio externo o interno del crculo.

Se asignan nombres por defecto a las ROIs que indican su tipo y orden de
creacin: RectA, TorusA, RectB, RectC, SpokeA, etc. Para renombrar una
ROI, haga doble clic en ella dentro de la ventana de imagen o dentro del panel
de Programa abriendo el dialogo Edit.




Con la versin 7 de Sherlock se pueden realizar 7 preprocesos y 3 procesos
por ROI. Estos preprocesos y procesos los definimos en la pestaa
Processing:

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
13



En la pestaa Position se definen las coordenadas del ROI y el ngulo del
mismo. En esta pestaa se puede fijar ROI para que no sea movida
involuntariamente:





De la misma forma, se pueden variar las coordenadas y el ngulo de forma
precisa o centrar la ROI respecto a la imagen.

En la ltima pestaa Properties, se puede observar el Histograma y la
intensidad de la imagen adems de realizar el proceso de alineacin al cual
nos referiremos en el punto 6 de este manual.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
14



A continuacin se enumeran los preprocesos y los procesos ms significativos
tanto para imgenes color como para imgenes monocromo.


4 4. .2 2. . P Pr re ep pr ro oc ce es so o: :

A continuacin se enumeran todos los prepocesos existentes. Dependiendo del
tipo de ROI seleccionado y de si la imagen es Monocromo o Color, se activarn
unos u otros. Son los siguientes:

1x3, 1x5, 1x7, 3x1, 3x3, 5x1, 5x5, 7x 1, Constant, Dice, Dilate, Equalize, Erode,
Fill, First DiffX, First Diff XY, First Diff Y, Flip H, Flip HV, Flip V, Gain Offset,
Gaussian, Gaussian 5x5, Gradient, Highpass, Highpass 5x5, Image Add, Image
AND, Image Extract, ImageInject, Image Max, Image Min, Image OR, Image
Retrieve, Image save, Image Sub AB, Image Sub Abs, Image Sub BA, Image
Windows, Image XOR, Invert, Laplace, Laplace 5x5, Median, Noise, Normalize,
Outline, Prewitt X, Prewitt XY, Prewitt Y, Project H, Project V, Random,
Roberts, Roberts Down, Roberts Up, Rotate, Second Diff X, Second Diff XY,
Second Diff Y, Sharpen, Skeleton, Smooth, Sobel X, Sobel XY, Sobel Y,
Treshold, Treshold Adaptive, Treshold Band, Treshold Down, Treshold Down
Masked, Treshold Local Adaptive, Threshold Up y Threshold Up Masked.

Pasamos a agrupar los diferentes Preprocesos por su funcionalidad

Como muestra, empleamos la siguiente imagen original.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
15



4 4. .2 2. .1 1. . P Pr re ep pr ro oc ce es so os s c co on nv vo ol lu ut ti iv vo os s [ [1 1x x3 3, , 1 1x x5 5, , 1 1x x7 7, , 3 3x x1 1, ,
3 3x x3 3, , 5 5x x1 1, , 5 5x x5 5 y y 7 7x x1 1] ]

Todos estos preprocesos no son ms que diferentes tipos de convoluciones.
Una convolucin consiste en multiplicar una matriz dada, en este caso la
imagen, considerada tambin como una matriz de niveles de gris, por una
matriz creada por el usuario.

Estas herramientas servirn para crear filtros de usuario, ya que la mayora de
filtros que se aplican a la imagen, se basan en convoluciones.




4 4. .2 2. .2 2. . C Co on ns st ta an nt t

Este preproceso convierte todos los pixels dentro de la ROI, en un valor
predeterminado por el usuario.



4 4. .4 4. .3 3. . D Di ic ce e

Este preproceso proyecta sobre la imagen una cuadricula, que se puede definir
por el usuario y que definir el tamao de el rectngulo que cortar la imagen
separando los cuadros entre ellos. Este preproceso se emplea para segmentar
la imagen en n subimgenes.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
16



4 4. .2 2. .4 4. . D Di il la at te e y y E Er ro od de e

Con este preproceso se dilata o erosiona los objetos binarios (blobs) que se
encuentren en la ROI. La suma de un dilate ms un erode tendr como
consecuencia un Open, y la suma de un erode ms un dilate tendr como
consecuencia un Close, que servirn para separar o juntar blobs sin variar su
forma.





4 4. .2 2. .5 5. . E Eq qu ua al li iz ze e

Este preproceso vara el nivel de gris de todos los pixels del ROI, toma el valor
mnimo en nivel de gris de todos los pixels de la ROI y lo convierte 0. Realiza la
misma operacin para el valor mximo convirtindolo en 255, de modo que
realiza un escalado de valores segn este mximo y mnimo obteniendo una
imagen mucho ms contrastada.






4 4. .2 2. .6 6. . P Pr re ep pr ro oc ce es so os s F Fi ir rs st t [ [F Fi ir rs st t D Di if ff fX X, , F Fi ir rs st t D Di if ff f X XY Y y y F Fi ir rs st t
D Di if ff f Y Y] ]

Encuentra la primera diferencia o salto en nivel de gris en el eje que se
especifique.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
17




4 4. .2 2. .7 7. . P Pr re ep pr ro oc ce es so os s F Fl li ip p [ [F Fl li ip p H H, , F Fl li ip p H HV V y y F Fl li ip p V V] ]

Con este grupo de preproceso se obtiene una imagen especular colocando el
eje de simetra del espejo en V-vertical, H- Horizontal y HV- en los dos ejes.


4 4. .2 2. .8 8. . G Ga ai in n O Of ff fs se et t

Este filtro actuar como si se variara la ganancia de la cmara sobre la ROI
seleccionada, aumentando la intensidad en todos los pixels de la ROI.





4 4. .2 2. .9 9. . P Pr re ep pr ro oc ce es so os s G Ga au us si ia an no os s. . G Ga au us ss si ia an n y y G Ga au us ss si ia an n
5 5x x5 5

Con este preproceso se realiza un filtro de suavizado, que aplicar una
Gaussiana pudiendo variar la distribucin de la Gaussiana.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
18



4 4. .2 2. .1 10 0. . G Gr ra ad di ie en nt t

Realiza un Gradiente de la lnea.



4 4. .2 2. .1 11 1. . P Pr re ep pr ro oc ce es so os s H Hi ig gh hp pa as ss s. . H Hi ig gh hp pa as ss s y y H Hi ig gh hp pa as ss s
5 5x x5 5

Aplica un filtro paso alto, dejando pasar las frecuencias altas dentro de la
imagen. Lo que equivale a marcar los detalles, como el perfil de las formas.





4 4. .2 2. .1 12 2. . P Pr re ep pr ro oc ce es so os s A Ar ri it tm m t ti ic co os s. . [ [I Im ma ag ge e A Ad dd d, , I Im ma ag ge e
A AN ND D, , I Im ma ag ge e E Ex xt tr ra ac ct t, , I Im ma ag ge eI In nj je ec ct t, , I Im ma ag ge e M Ma ax x, , I Im ma ag ge e
M Mi in n, , I Im ma ag ge e O OR R, , I Im ma ag ge e R Re et tr ri ie ev ve e, , I Im ma ag ge e s sa av ve e, , I Im ma ag ge e S Su ub b
A AB B, , I Im ma ag ge e S Su ub b A Ab bs s, , I Im ma ag ge e S Su ub b B BA A, , I Im ma ag ge e W Wi in nd do ow ws s y y
I Im ma ag ge e X XO OR R] ]

Este grupo de funciones trabajar directamente sobre la imagen, restando,
sumando o realizando funciones lgicas con una o ms imgenes
seleccionadas.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
19
4 4. .2 2. .1 13 3. . I In nv ve er rt t

Con esta funcin se invierte el valor de los pixels de toda la ROI pasando el 0 a
255, el 1 a 254 y as todos los pixels respectivamente.








4 4. .2 2. .1 14 4. . P Pr re ep pr ro oc ce es so os s L La ap pl la ac ci ia an no os s. . L La ap pl la ac ce e y y L La ap pl la ac ce e 5 5x x5 5

Con este preproceso se realiza un filtro de contorno que aplicar una
Laplaciana pudiendo variar la distribucin de la misma.





4 4. .2 2. .1 15 5. . M Me ed di ia an n

Este filtro realiza el filtro de mediana con una matriz de 3x3. Eliminando ruido
aleatorio de la imagen.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
20




4 4. .2 2. .1 16 6. . N No oi is se e

Con este preproceso se aplicar a la ROI seleccionada ruido aleatorio, esto
puede servir al realizar las pruebas, para determinar la robustez del proceso
posterior.




4 4. .2 2. .1 17 7. . N No or rm ma al li iz ze e

Esta herramienta es parecida al equalize pero funciona de forma ligeramente
distinta. Normalizar la imagen es tomar un porcentaje de mximo y de mnimo y
reconvertirlo en el valor mximo y mnimo y escalar el resto de valores.

Ej. Tomamos un 10% al mximo y al mnimo. Esto convertir los valores entre
0 y 25 en 0. Entre 240 y 255 en 255 y los dems los reescalar.





visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
21

4 4. .2 2. .1 18 8. . O Ou ut tl li in ne e

Para poder utilizar este preproceso es necesario que la imagen este binarizada
previamente, para ello anteriormente se debe realizar un preproceso de
Threshold. Esta herramienta definir la lnea perimetral de los blobs.






4 4. .2 2. .1 19 9. . P Pr re ep pr ro oc ce es so os s d de e G Gr ra ad di ie en nt te e [ [P Pr re ew wi it tt t X X, , P Pr re ew wi it tt t X XY Y
, , P Pr re ew wi it tt t Y Y, , R Ro ob be er rt ts s, , R Ro ob be er rt ts s D Do ow wn n, , R Ro ob be er rt ts s U Up p, , S So ob be el l
X X, , S So ob be el l X XY Y , , S So ob be el l Y Y, , S Se ec co on nd d D Di if ff f X X, , S Se ec co on nd d D Di if ff f X XY Y y y
S Se ec co on nd d D Di if ff f Y Y] ]

Este grupo de preprocesos permite marcar los cambios de intensidad en la
imagen, encuentra el gradiente de la imagen y marca los puntos mximos. Se
utiliza para ver contornos.





4 4. .2 2. .2 20 0. . P Pr ro oj je ec ct t H H y y P Pr ro oj je ec ct t V V

Realiza la suma de todos los pixels de la lnea o columna. Existe la posibilidad
de ecualizar la ventana en la misma herramienta.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
22
4 4. .2 2. .2 21 1. . R Ra an nd do om m

Crea una imagen dentro del ROI sin tener en cuentra lo que hay previamente y
de forma aleatoria le da valor a los pixels.





4 4. .2 2. .2 22 2. . R Ro ot ta at te e

Este preproceso rotar la imagen un ngulo predefinido.



4 4. .2 2. .2 23 3. . S Sh ha ar rp pe en n

Esta herramienta incrementa el enfoque de la imagen y a la vez crea ruido
aleatorio en la misma.





4 4. .2 2. .2 24 4. . S Sk ke el le et to on n

Para poder utilizar este preproceso es imprescindible realizar primero un
threshold para binarizar la imagen. Esta herramienta erosiona los puntos
perifricos del blob hasta encontrar la lnea media del blob y deja un esqueleto
del mismo.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
23

4 4. .2 2. .2 25 5. . S Sm mo oo ot th h

Suaviza la imagen para eliminar ruido, pero a la vez atena los cambios de
nivel de gris.

4 4. .2 2. .2 26 6. . P Pr re ep pr ro oc ce es so os s d de e B Bi in na ar ri iz za ac ci i n n. . [ [T Th hr re es sh ho ol ld d, ,
T Th hr re es sh ho ol ld d A Ad da ap pt ti iv ve e, , T Th hr re es sh ho ol ld d B Ba an nd d, , T Th hr re es sh ho ol ld d D Do ow wn n, ,
T Th hr re es sh ho ol ld d D Do ow wn n M Ma as sk ke ed d, , T Th hr re es sh ho ol ld d L Lo oc ca al l A Ad da ap pt ti iv ve e, ,
T Th hr re es sh ho ol ld d U Up p y y T Th hr re es sh ho ol ld d U Up p M Ma as sk ke ed d] ]

Este grupo de preprocesos convierten la imagen en binaria, es decir en 0 y 1,
utilizando diferentes mtodos de corte. De la misma forma, alguno de estos
filtros modifica nicamente parte de la imagen procesada.


4 4. .3 3. . A Al lg go or ri it tm mo os s

Sherlock realiza una separacin de algoritmos dependiendo de la herramienta
empleada.

Los algortmos de lnea son: Detect Edges, First edges, Inside Caliper, Max
Edge, Min Max, Outside Caliper.

Los Algoritmos de rea disponibles son: Average, Barcode 1D, Barcode Data
Matrix, Barcode QR, Centroid, Connectivity, Count, Extrema, HVLine, Image
Extract, Inspect, MinMax, OCR Plus, Search-Correlation, Search-Geometric,
Search-LineBased, Statistics, Average(Channel), Color Correction Coefs, Color
Map, Color Presence Meter, Count(channel), Count(color), MinMax(channel),
Spot Meter-Block y Spot Meter-Statistical.



4 4. .4 4. . H He er rr ra am mi ie en nt ta as s M Mo on no oc cr ro om mo o

A continuacin citamos algunos de los algoritmos ms comunes relacionados
con la herramienta a la cual estn asignados.


Herramientas de Lnea:

A continuacin se describen los procesos ms utilizados en ROI de Lneas.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
24
4 4. .4 4. .1 1. . I IN NS SI ID DE E C CA AL LI IP PE ER R y y O OU UT TS SI ID DE E C CA AL LI IP PE ER R

Este algoritmo se emplea para encontrar un cambio de intensidad del nivel de
gris en la lnea. Funciona buscando dos cambios, desde dentro hacia fuera o
desde fuera hacia dentro. Se utiliza para localizar los dos lados de un objeto,
utilizando uno u otro, dependiendo de donde sea ms fcil encontrar ruido o
cambios no deseados de la imagen, fuera o dentro.

De esta forma podemos realizar mediciones lineales dentro de nuestra imagen.

La diferencia entre Inside Caliper y
Outside Caliper es desde donde
empieza a buscar el gradiente. En
Inside Caliper lo buscar del centro de
la lnea hacia fuera, mientras que en
Outside Caliper lo buscar de los
extremos hacia dentro.

Cada Proceso dispone de unas
propiedades a las que podemos
acceder haciendo clic sobre el botn
parameters.



En el cuadro de dilogo Parameters,
estn incluidas las variables de cada
parmetro:

Edge Type.
Edge sharpness threshold.
Edge strenght treshold.
Smooth filter size.

Los resultados obtenidos de este
Proceso son:

Edge Ponint: las coordenadas
de los dos puntos.
Gradiente de los dos puntos.
Sharpress: la derivada del
gradiente.





visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
25
4 4. .4 4. .2 2. . E ED DG GE E C CO OU UN NT T

El algoritmo Edge Count cuenta el nmero de saltos de oscuro a claro o de
claro a oscuro, en una lnea.


Para parametrizar la herramienta
se deben tener en cuenta los
siguientes parmetros:

Nmero mximo de
transiciones a contar.
Nivel mnimo de la
transicin.
Nmero de pxels entre
transiciones.
Direccin de deteccin.






Los resultados obtenidos del
Edge Count son:

El nmero de transi-
ciones de oscuro a claro.
El nmero de transi-
ciones de claro a oscuro.
Las coordenadas de
transiciones.







Herramientas Multilnea:

A continuacin se describen los procesos ms utilizados en ROI de tipo
Multilneas.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
26

4 4. .4 4. .3 3 F FI IR RS ST T E ED DG GE E: :

El algoritmo first Edge detecta el primer punto de transicin bajo unas
condiciones determinadas.


Para parametrizar la herramienta
se deben tener en cuenta estos
parmetros:


Nivel mnimo de la
transicin.
Direccin de la transicin.




Los resultados que se obtienen
son:
un vector con la posicin
de todas las transiciones
en cada linea.
Un vector con el nivel de
gris de cada transicin.
Un vector con las coor-
denadas de cada punto.






H He er rr ra am mi ie en nt ta as s r re ea a: :

Quizs la ROI ms usada de todas en Sherlock es la de rea debido a sus
mltiples aplicaciones y posibilidades.

A continuacin se detallan los Procesos ms usados en la ROI de rea.






visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
27

4 4. .4 4. .4 4. . C Co on ne ec ct ti iv vi it ty y

Conectivity es un proceso que siempre debe ir precedido por un preproceso de
threshold (binarizacin). Con Connectivity se obtiene informacin de los blobs
que aparecen en la imagen, segmentados previamente por un proceso de
binarizacin.



Los posibles parmetros a
modificar son Constraints, Results y
Display:

Constraints permite para-
metrizar los valores que se
desean obtener, por ejemplo
limitando el tamao mximo
o mnimo de rea de los
blobs, o si se desea
encontrar blobs blancos o
negros.
Result permite discriminar el
nmero de blobs obtenidos
dependiendo de las condi-
ciones de la imagen.
Display modifica los
resultados que se obtienen
en la pantalla.






visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
28

En el cuadro de dilogo de la
izquierda se aprecian las distintas
medidas que se pueden obtener
con Conectivity.

Entre las distintas medidas
obtenidas se destacan las
siguientes::

Count- determina el nmero
de blobs encontrados
Centroid[ ]- Muestra las coor-
denadas del centro de los
blobs.
rea[ ]- Muestra las reas de
los blobs.
Width[ ]- muestra el ancho
de los blobs.
Height[ ]- muestra la longitud
de los blobs.





4 4. .4 4. .5 5. . B Ba ar rc co od de e

En Sherlock 7 los Barcode se han unido en tres: Barcode 1D, Barcode 2D y
Barcode QR.

BARCODE 1D

La herramienta de Barcode 1D
es realmente fcil de usar, de
modo automtico, indica el tipo
de cdigo y lo lee.

Si se necesita ahorrar tiempo de
proceso o el cdigo est en muy
malas condiciones, entonces se
debe parametrizar manualmente
la herramienta, y de esta forma
se obtienen mejores resultados.

Barcote 1D lee los siguientes
cdigos:
Code39, Code 128, UPC-A,
UPC-E, EAN-8, EAN-13, ITF,
BC-412 y Codebar.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
29



BARCODE 2D (Datamatrix Code).



Barcote 2D DataMatrix es
una herramienta que se
utiliza habitualmente en
modo automtico.

En el caso de que se
quisiera ganar tiempo, se
debera ajustar manual-
mente los parmetros
para reducir el tiempo de
proceso.




BARCODE QR

Este cdigo de barras se utiliza de forma especfica en mercados verticales.



4 4. .4 4. .6 6. . S SE EA AR RC CH H ( (P Pa at tt te er rn n M Ma at tc ch hi in ng g) )

El algoritmo de search es uno de los ms tpicos a realizar en visin artificial.
Consiste en buscar una determinada estructura en la imagen. Por ejemplo,
verificar que una parte (resistencia, etiqueta, blister,) est en el lugar
adecuado, o determinar el desplazamiento de una estructura con respecto al
lugar donde debera estar.

En Sherlock, todos los algoritmos de SEARCH se utilizan de la misma forma:

Paso 1. Entrenar la estructura a buscar, en una imagen donde se encuentre la
estructura perfectamente definida.
Paso 2. Definir los parmetros y el rea de bsqueda.
Paso 3. Buscar la estructura en una nueva imagen y, si se encuentra, devolver
su posicin y la calidad del resultado.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
30
Dependiendo del tipo de estructuras se encontrarn mejor con un tipo u otro de
algoritmo de bsqueda. Algunas estructuras tienen bordes muy marcados, pero
rangos de intensidad de pxels muy bajos. Otras no tienen los lmites
marcados, pero una gran variedad de rangos de intensidad en sus pxels. En
algunas imgenes nos encontramos con ambas caractersticas. Por este
motivo, existen distintos algoritmos de bsqueda.

4 4. .4 4. .6 6. .1 1. . B B s sq qu ue ed da a C Co or rr re el la ac ci i n n ( (S Se ea ar rc ch h C Co or rr re el la at ti io on n) )

El algoritmo Search Correlation crea un mapa con todas las intensidades de
los pxels de la ROI, y despus utiliza la correlacin de escalas de gris para
encontrar la mayor coincidencia en el rea buscada. Cuanto mayor sea la
variacin de intensidades en la estructura, ms robusta ser la bsqueda.



Cuando se selecciona el algoritmo de la
lista de algoritmos de la ROI, la
estructura se entrena automticamente.





La misma ROI se expande para
definir el rea de bsqueda.





Cuando se ejecuta la bsqueda, se
retorna la localizacin, la calidad
del resultado de la estructura
encontrada y el nmero de objetos
encontrados con las mismas
caractersticas.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
31


En este caso se ha encontrado una
coincidencia inferior a la perfecta y
por tanto la calidad del resultado es
menor.



Se puede controlar como ejecutar el algoritmo modificando los parmetros del
cuadro de dilogo Parameters. Para ver con detalle las diferentes opciones de
los parmetros, ver la ayuda en lnea para la herramienta Search
Correlation.

La bsqueda por correlacin funciona
correctamente incluso cuando la imagen
donde buscar est desenfocada o tiene
cambios de iluminacin. (Sin embargo
en un ambiente estable estos cambios no
deberan ocurrir)




Search Correlation no funciona con estructuras que tengan una
rotacin superior a unos pocos grados con respecto a la posicin entrenada,
excepto si versiones rotadas de la estructura han sido generadas mediante el
parmetro use rotation ponindolo en True.

Search - Correlation puede, opcionalmente, encontrar mltiples instancias de
una estructura, y devolver matrices conteniendo las posiciones y niveles de
calidad de las instancias clasificadas por su mejor o peor coincidencia.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
32

4 4. .4 4. .6 6. .2 2. . B B s sq qu ue ed da a G Ge eo om m t tr ri ic ca a ( (S Se ea ar rc ch h G Ge eo om me et tr ri ic c) )

El algoritmo de Search Geometric aprende los bordes ms prominentes de
una ROI, despus encuentra la mayor coincidencia en el rea de bsqueda.

Los bordes ms prominentes en la
ROI se han identificado y
entrenado. Estos bordes son la
estructura, (pixels verdes) que no
pertenecen a los bordes se ignoran.
Los bordes a considerar se pueden
eliminar dont care points)
manualmente.



Se puede controlar la
ejecucin del algoritmo
modificando los par-
metros de su cuadro de
dilogo Parameters.
Aqu el valor por
defecto 20 de min
contour length se ha
cambiado por 100, y se
ha entrenado la
estructura (execution
mode = train). Los
contornos que tienen
menos de 20 pxels de
longitud se han
eliminado.



La misma ROI se expande para definir el
rea de bsqueda.

Cuando se ejecuta la bsqueda, se
devuelve la localizacin y nivel de calidad
del resultado.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
33
Search Geometric puede localizar un
patrn con rotacin. El ngulo de rotacin
se devuelve en radianes.






Para ver ms detalles acerca de los parmetros de este algoritmo, ver la ayuda
en lnea de Search Geometric.

Search - Geometric puede opcionalmente encontrar mltiples instancias de
una estructura, y devolver las posiciones y niveles de calidad de las estructuras
clasificadas por su mayor o menor coincidencia.



4 4. .4 4. .6 6. .3 3. . B B s sq qu ue ed da a L L n ne ea a ( (S Se ea ar rc ch h L Li in ne e) )

El algoritmo Search Line aprende las lneas rectas ms intensas en una ROI,
y despus encuentra la mayor coincidencia en el rea de bsqueda.


El valor por defecto 20
del parmetro min
contour length se ha
cambiado por 100, y la
estructura se ha
entrenado de nuevo
(mode = train).

El parmetro view hace
que el patrn se
visualice (pattern) o no
se visualice (none).




Visualizar los bordes puede ayudar para ajustar los parmetros correctamente
cuando se est entrenando un patrn. Sin embargo, mostrar los bordes
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
34
requiere un cierto tiempo, por tanto es conveniente poner view en none
cuando se realice la bsqueda


Search Line puede localizar un
patrn con cualquier rotacin. El
ngulo de rotacin se devuelve
en radianes.



Search Line encuentra solo la mayor coincidencia con la estructura
entrenada, por tanto no se puede utilizar en patrones mltiples.

Para conocer ms detalles acerca de los parmetros de este algoritmo puede
consultar la ayuda en lnea Search Line.

Despus de entrenar una estructura con cualquiera de los algoritmos
de bsqueda, debe recordar expandir la ROI para definir el rea de bsqueda.

Si se modifica algn parmetro en mode de entrenamiento train,
despus de modificar el parmetro, asegrese de cambiar el mode a run antes
de realizar la bsqueda. Sino, cada ejecucin del algoritmo ser un
entrenamiento y no una bsqueda.



4 4. .4 4. .7 7. . O OC CR R G Gr ra ay y S Sc ca al le e

De la misma forma que las herramientas de bsqueda de patrones, otra de las
ms tpicas funciones que se realizan en visin artificial son los OCR
(Reconocimiento ptico de Caracteres) en la imagen.

Todos los algoritmos de OCR se utilizan de la misma manera:

Paso 1. Entrenar la estructura a leer en una imagen donde se encuentre la
estructura de caracteres ptimamente definidos.
Paso 2. Definir los parmetros y el rea de bsqueda.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
35
Paso 3. Leer la estructura en una nueva imagen, y si se encuentra, devolver
su posicin, la calidad del resultado y el string asociado.

Dependiendo del tipo de estructuras, se encontrarn mejor con un tipo u otro
de algoritmo de Lectura. En Sherlock encontraremos dos herramienta OCR,
el OCR Plus y el OCR Gray Scale.

Algunas estructuras tienen bordes muy marcados, pero rangos de intensidad
de pxel muy bajos. Otras no tienen los lmites marcados, pero una gran
variedad de rangos de intensidad en sus pxels y algunas tienen ambas
caractersticas. En cada caso utilizaremos el algoritmo OCR ptimo para la
lectura.


OCR Gray Scale

El algoritmo OCR Gray Scale crea un mapa con todas las intensidades de los
pxels de la ROI, despus utiliza la correlacin de escalas de gris para
encontrar la mayor coincidencia en el rea buscada. Cuanto mayor sea la
variacin de intensidades en la estructura, ms robusta ser la bsqueda.

Los algoritmos de OCR
funcionan de forma muy
parecida a los de Search, se les
crea una base de datos con
diferentes figuras aprendidas
relacionadas con un carcter.

En esta imagen podemos
apreciar el interface donde
creamos el patrn y le damos
una etiqueta (label). Tan solo
debemos marcar la zona que
queremos aprender, asignar una
letra y darle a Train ROI. Esta
pantalla tambin nos servir
para realizar un test y ver lo que
lee la herramienta una vez
realizado el aprendizaje.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
36
Todos los elementos mostrados
en la pantalla anterior, quedan
registrados en esta base de
datos, donde se puede apreciar
la imagen enseada las
caractersticas y el carcter
asignado.
Estas bases de datos se pueden
guardar para ser importardas en
posteriores OCR. Adems se
puede modificar el carcter
asignado mediante el botn
Rename y eliminar una o todos
los elementos. Tambin se
puede habilitar o deshabilitar los
elementos con la opcin Toggle
Enable.




Cuando se ejecuta el OCR, se
retorna la localizacin y la
calidad del resultado de la
estructura encontrada.



En Settings se encuentran
todas las caractersticas que se
pueden modificar .

Lo primero que encontramos es
el nmero mximo de
caracteres que leer.

El Acceptance level es el
porcentaje mnimo de similitud
para encontrar un patrn.

El time Out es el tiempo
mximo de espera antes de dar
un mensaje de error, si se pone
valor 0, se deshabilitar.





visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
37

Los resultados que nos devuelve el OCR
Gray Scale son el array de strings que
esta leyendo, el procentage de similitud
respecto al que tiene aprendidos y la
suma de todo los caracteres en un solo
String.




OCR Gray Scale est pensado para leer caracteres con un contraste
elevado y que las diferencias entre el patrn y la imagen no sean muy
elevados. Para sistemas como podra ser la micropercusion u otras tcnicas
que puedan deformar mucho los caracteres existen la herraienta OCR Plus con
una configuracin ms avanzada que permite leer OCRs ms complejos. La
herramienta OCR Plus tiene un coste adicional al de software Sherlock.







visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
38
4 4. .5 5. . H He er rr ra am mi ie en nt ta as s d de e C Co ol lo or r

Sherlock dispone de una serie de herramientas de color. La utilizacin de una u
otra herramienta depender de las necesidades del usuario.


4 4. .5 5. .1 1. . C Co ol lo or r P Pr re es se en nc ce e M Me et te er r

Color Presence Meter es la herramienta que determina que color de una base
de datos previamente configurada aparece con ms frecuencia en una ROI.
Est disponible en cualquier ROI de tipo rea.

Para aadir colores a la base de datos de algoritmos deben seguirse los
siguientes pasos:

1. Seleccionar un color en la ROI.
2. Hacer clic en el botn del algoritmo Parameters para mostrar el cuadro
de dilogo Parameters.
3. Introducir el nombre del color.
4. Posicionar el run mode en Train. El promedio de color en la ROI se
calcula y se aade a la base de datos cuando se selecciona este modo;
no es necesario hacer clic en el botn Apply.
5. Volver a run mode y posicionarlo en Run. No olvide este paso!!!!
6. Hacer clic en el botn OK.
7. Mover la ROI hasta otro color, y volver al paso 2.


Color Presence Meter color training

3
4, 5
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
39
Cuando se ejecuta la investigacin con este algoritmo, los pxels de la ROI se
comparan uno a uno con los colores de la base de datos. Si un pxel coincide
con uno de los colores, el contador del color se incrementa. Despus de
analizar todos los pxels de la ROI, se devuelve la informacin del color con el
mayor ndice de coincidencia.

En el siguiente ejemplo se entrenan los colores pink, blue, cyan, orange y
mustard .


Cuando se ejecuta el algoritmo de la
investigacin, el reading coverage
contiene el porcentaje de todos los pxels
de la ROI que coinciden con el color con
mayor porcentaje. En este ejemplo, el 8%
de los pxels de la ROI RectA son blue.




Una ROI como esta tendr como
resultado un mayor coverage (26%).





visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
40
Recuerde que Color Presence Meter devuelve
informacin slo acerca del color con la mayor
presencia. No se devuelve informacin de los
puntos de color naranja. Si los puntos naranjas no
estuvieran presentes en la ROI el valor de
mustard seguira siendo de un 12%.




El parmetro used bits determina cuantos bits de color por plano se utilizan
durante el entrenamiento y el anlisis. Este parmetro debe ser el mismo
durante el entrenamiento (run mode = Train) y durante el anlisis (run mode =
Run). Una vez seleccionado, no se puede cambiar durante el entrenamiento o
el anlisis.

El parmetro max recognition distance determina cuanto puede variar el color
de un pxel analizado con respecto a un color de la base de datos. Cuanto
mayor es el nmero, mayor rango de variacin tenemos para determinar el
color del pxel.

Una base de datos de colores creados con este algoritmo puede importarse en
otra ROI ejecutando Color Presence Meter en la misma investigacin. No se
puede importar a otra investigacin. Aqu una ROI importa la base de datos
creada por RectA.



Una base de datos importada de una ROI en otra es compartida, no
copiada. Un cambio en la base de datos en una ROI afectar cualquier otra
ROI que utilice esa base de datos.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
41

4 4. .5 5. .2 2. . S Sp po ot t M Me et te er rs s

Un spot meter es un clasificador que compara el promedio de color de los
pxels en una ROI, con los colores de una base de datos. Diferentes spot
meters utilizan diferentes modelos matemticos del espacio, alrededor de un
nico punto en el espacio de tres dimensiones RGB, para definir una base de
datos de distribucin de color o rango de inclusin. Estos diferentes modos
afectan a la velocidad, precisin y tamao de la base de datos.
Spot Meter - Block

Spot Meter Block sacrifica cierta precisin en el modelado de color para
conseguir mayor velocidad de ejecucin.

Para aadir colores a la base de datos de algoritmos debe seguir los siguientes
pasos:

1. Seleccionar un color con la ROI.
2. Hacer clic en el botn del algoritmo Parameters para mostrar el cuadro
de dilogo de parmetros.
3. Hacer clic en el botn Teach/Run para poner el algoritmo en modo
aprendizaje.
4. Escribir el nombre del color.
5. Hacer clic en el botn Add New. El nombre del color se aade a la lista,
pero el color an no ha sido aprendido.
6. Hacer clic en el botn Teach. Se calcula el color promedio de la ROI y
se asigna el nombre del color.
7. Hacer clic en el botn OK.
8. Mover la ROI hasta otro color y repetir el proceso desde el paso 2.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
42

Spot Meter Block color training

El mismo nombre de color puede entrenarse con diferentes colores. Cada
instancia del mismo color se asigna a Point # (1 of 3, 2 of 3, etc.). Los colores
aprendidos con el mismo nombre pueden ser de diferentes tonalidades del
mismo color, no colores que sean muy diferentes unos de otros.

Run Distance se utiliza para controlar la distribucin de color alrededor de un
punto. Cuanto mayor es la distancia, mayor es la distribucin de color. Esta
distancia se aplica de igual forma a todos los colores en la base de datos; no se
pueden definir diferentes distancias para diferentes colores.

Configuration Bit resolution determina cuantos bits por pxels, en los planos
de color se utilizan, cuando se hace el aprendizaje o cuando se analizan los
pxels. Cuanto menor sea el nmero, menos precisa ser la coincidencia de
colores. La resolucin debe ser ajustada (haciendo clic en el botn Change)
antes de entrenar cualquier color. Una vez ajustado no se puede cambiar
durante el periodo de entrenamiento o anlisis.


5
6
4
3
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
43

Spot Meter Statistical

Spot Meter Statistical Esta herramienta sacrifica velocidad de ejecucin en
favor de una mayor precisin en el modelo de color.

Para aadir colores a la base de datos de algoritmos debe seguir los siguientes
pasos:

1. Seleccionar un color con la ROI.
2. Hacer clic en el botn del algoritmo Parameters para mostrar el cuadro
de dilogo de parmetros.
3. Hacer clic en el botn Teach/Run para poner el algoritmo en modo
aprendizaje.
4. Escribir el nombre del color.
5. Hacer clic en el botn Add New. El nombre de color se aade a la lista,
pero el color an no ha sido aprendido.
6. Hacer clic en el botn Teach. Se calcula el color promedio de la ROI y
se asigna el nombre del color.
7. Hacer clic en el botn OK.
8. Mover la ROI hasta otro color y repetir el proceso desde el paso 2.




visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
44

Spot Meter Statistical color training

Si se entra el mismo nombre para colores distintos, el color resultante es un
punto en el cubo de espacios RGB de color, que est en algn lugar entre los
colores entrenados. Si los colores seleccionados estn muy distantes en el
cubo de color, el color resultante puede que no sea ninguno de los colores
entrenados. Por esta razn, este algoritmo se debe utilizar entrenando reas
uniformes cercanas del mismo color.

La opcin Run Threshold controla la distribucin de colores alrededor de un
punto. Cuanto mayor es el threshold, mayor es la distribucin de colores. Este
threshold se aplica solo al color actual seleccionado, pudiendo definir diferentes
thresholds para diferentes colores.

Configuration Used channels and Bit resolution determina cuantos bits por
pxels, en los planos de color, se utilizan cuando se hace el aprendizaje o
cuando se analizan los pxels. Cuanto menor sea el nmero, menos precisa
ser la coincidencia de colores. La resolucin se debe ajustar (haciendo clic en
el botn Change) antes de entrenar cualquier color. Seleccionando los canales
utilizados, se puede entrenar y analizar los tres, solo dos o solo uno de los
planos de color. Una vez ajustados estos parmetros no se pueden cambiar
durante el periodo de entrenamiento o anlisis.

3
4
5
6
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
45
Una base de datos de color creada por este algoritmo, puede exportarse a un
archivo con extensin .ucc, que a su vez se puede importar a otra ROI
ejecutando Spot Meter Statistical, tanto en la misma investigacin como en
investigaciones distintas.

Funcionalidades comunes de Spot Meter

Seleccin de ROI dentro de la ventana imagen

Cuando se entrena un color para una base de datos, se puede seleccionar un
subgrupo de pxels en la ROI de la ventana de imagen, para calcular su valor
promedio.

En la imagen adjunta, slo los pxels del rectngulo verde se utilizarn para
calcular el valor promedio para el color brown (marrn) en la base de datos de
color.





Modificacin de la distribucin del color

Se puede marcar el check box Show, para ver qu pxels, en el cuadro de
dialogo de la ventana de visualizacin, son reconocidos como los colores
seleccionados en la lista de colores. Se puede cambiar los parmetros
Distance (Block) o Threshold (Statistical) para incrementar o reducir la
distribucin de colores reconocidos. Esta funcionalidad sirve para debuggar y
solo est disponible en modo Run, y solamente desde el cuadro de dilogo,
durante la creacin de la base de datos. No es accesible durante la ejecucin
de la investigacin.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
46
En las siguientes imgenes, el rea verde muestra qu pxels estn incluidos
en la distribucin del color red (rojo). En la imagen de la derecha, el Spot
Meter Blocks Distance se ha incrementado, y por tanto se incluyen un
mayor nmero de pxels.





Grabacin de base de datos de color

Una base de datos de color creada por uno de estos algoritmos, puede
exportarse a un archivo, que a su vez puede importarse a otras ROIs. Esto es
posible ejecutando el mismo algoritmo, en la misma investigacin o en otras
investigaciones. Para Spot Meter Block, la extensin del archivo es .lst;
para Spot Meter Statistical, la extensin del archivo es .ucc.


Exportar un Spot Meter Block color database

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
47

Importar un Spot Meter Block color database

Una base de datos exportada desde una ROI ejecutando Spot Meter
Block o Spot Meter Statistical, e importada a otra ROI ejecutando el mismo
algoritmo no se comparte, incluso en la misma investigacin, ser una base de
datos distinta. Un cambio en la base de datos para una ROI no afectar la base
de datos para otra.

Las bases de datos de color creadas por Spot Meter Block y Spot
Meter Statistical son incompatibles, porque utilizan diferentes modelos
matemticos. Una base de datos de color exportada desde Spot Meter
Block no se puede importar en Spot Meter Statistical, y viceversa.


4 4. .5 5. .3 3. . C Co ol lo or r m ma ap pp pi in ng g

A pesar de darnos informacin necesaria en muchas aplicaciones, para
muchos otros procesos de visin artificial, el color es irrelevante, y solo
introduce un nivel de complejidad que puede hacer incomoda la ejecucin del
control de los procesos.

Considere una aplicacin donde se deban encontrar los centros de las
siguientes estructuras: rojas, verdes y azules, de esta imagen, y un color cada
vez.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
48


Para separar las estructuras en tres clases, se deber definir tres thresholds
dimensionales en el espacio de color RGB para separar rojo de verde y de
azul, y despus aplicar un algoritmo de anlisis blob que funcione en color. El
centro de las estructuras no depende del color de estas, por tanto ser ms
fcil convertir cada color a un valor de nivel de gris, y despus aplicar el
preproceso de segmentacin (thresholding) y el algoritmo de anlisis de blob
binario.

El algoritmo Color Map convierte un color en un valor de nivel de gris, entre 0 y
255.

Para aadir colores a la base de datos debe seguir la siguiente secuencia:

1. Seleccionar un color de la ROI.
2. Hacer clic en el botn del algoritmo Parameters para mostrar el cuadro
de dilogo Parameters.
3. Introducir el nombre del color.
4. Activar run mode en modo Train. Se calcular el promedio de color de
la ROI y se aadir a la base de datos, tan pronto como se seleccione
este modo. No es necesario hacer clic en el botn Apply.
5. Activar run mode en modo Run. No olvide este paso !!!!!!!
6. Hacer clic en el botn OK .
7. Mover la ROI a otro color, y volver a empezar desde el punto 2.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
49


Color Map training

Al aadir cada color en la base de datos, se asigna el siguiente nmero en la
secuencia {0, 1, 2, 3,, 255}. La asignacin de nmero es automtica, no se
puede cambiar el orden de asignacin de los nmeros, ni seleccionar un
nmero en concreto para un color.

El siguiente paso consiste en crear una imagen de niveles de gris de la imagen
de color, basada en el mapa de color. Se puede hacer el mapa de cualquier
seccin rectangular o de toda la imagen.

Para hacer el mapa de la
imagen entera, hacer clic
en el botn Fit to image,
en la pestaa Position,
del cuadro de dilogo
Parameters, correspon-
diente a la ROI de la
imagen origen. Es
recomendable activar el
checkbox Lock position.



Crear una imagen destino, y aadirle una ROI.

3
4, 5
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
50
En el cuadro de
dilogo Options
de la imagen
destino, seleccione
Reading como
imagen origen, y el
mapa de color
creado por el
algoritmo Color
Map como el
reading.


Los colores en la imagen origen verde, rojo y azul se han representado con
los valores 0, 1 y 2, respectivamente. Para analizar solo las estructuras verdes,
debe seleccionar el preprocesador Threshold Band, poner los parmetros
threshold low y threshold high en el mismo valor (en este caso 0), in value a
0, y out value a 255. Esto segmentar todos los pxels desde threshold low a
threshold high. Para realizar el algoritmo que cuente elementos, se ha de
seleccionar el proceso Connectivity Binary. (Por defecto, el algoritmo
Connectivity Binary procesar los pixels negros [0].)



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
51
En esta imagen se utiliza una
ROI de tipo rectngulo en la
imagen destino y se ha confi-
gurado como Fit to image.

Cuando se ejecuta la
investigacin, la imagen de
niveles de gris es segmentada,
de forma que solo los pxels
verdes (Valor 0) son
representados en negro. El
algoritmo Connectivity
Binary devuelve el centro y el
recuadro envolvente de las
estructuras verdes.



Para analizar las estructuras rojas, poner los parmetros de Threshold Band,
threshold low y threshold high a 1 y 1; para azul, 2 y 2. Para analizar las
estructuras verdes y rojas a la vez, poner threshold low y threshold high a 0
y 1.

En el cuadro de dilogo Parameters, color id determina qu valores de niveles
de gris son pasados del mapa de colores a la imagen destino. Un valor de 255
significa que se pasan todos los valores. Si color id se pone en cualquier otro
valor, solo se pasa este nivel de gris. Por ejemplo, si color id se pone a 1, solo
se representan los pxels de valor1 rojo, en este ejemplo y se pasarn a
la imagen destino.




Max distance controla la distribucin del color en el cubo de color 3D. Cuanto
mayor es max distance, mayor es el rango de colores que coincidirn en la
base de datos.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
52
5 5. .- -C Ca al li ib br ra ac ci i n n

Cualquier software de visin industrial, por defecto, realiza las medidas en
pxels. Sherlock dispone de un sistema que permte calibrar la imagen para
pasar los datos de pixels a un rango espacial.





Para medir la anchura de
la pantalla de la PDA, se
crean dos ROIs de tipo
lnea que ejecutan el
algoritmo First Edge, y
los puntos de los bordes
encontrados se pasan
como entradas para la
instruccin
Geometric:PtToPtDist.

La pantalla tiene una
anchura de 311.58 pxel.


Para medir en unidades reales, se debe calibrar la ventana de imagen para
correlacionar los pxel de la ventana de imagen con la posicin en coordenadas
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
53
reales. Una ventana de imagen puede calibrarse mediante software o de forma
interactiva.

5 5. .1 1 C Ca al li ib br ra ac ci i n n S So of ft tw wa ar re e, , m m t to od do o 1 1: : p pu un nt to os s

Para realizar esta calibracin, debe seguir los siguientes pasos:

1. Identificar cuatro puntos en una ventana de imagen donde se conozcan
las distancias reales entre ellos.
2. Crear una transformacin de correlacin entre los puntos de la ventana
de imagen a localizaciones del mundo real.
3. Crear un objeto de calibracin y rellenarla con la transformacin.
4. Aplicar el objeto de calibracin a una ventana de imagen.


Paso 1. Identificar cuatro puntos

En esta ventana de imagen se utilizan 4 ROIs tipo radial (spoke)
(spokeUpperLeft, spokeUpperRight, spokeLowerLeft, spokeLowerRight), y
se ejecuta el algoritmo First Edge, en cuatro crculos de la imagen de
calibracin. En esta imagen, la distancia entre los centros de los crculos es de
1 pulgada.




visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
54


La matriz de puntos de
los bordes encontrados
en cada ROI radial se
pasa como entrada a la
instruccin
Geometric:PtsToBestCi
rcle.

Uno de los readings de
esta instruccin es el
punto center del crculo
calculado.



Paso 2. Correlacionar los cuatro puntos

Los cuatro readings center devueltos por
las cuatro instrucciones PtsToBestCircle
se pasan como entradas a la instruccin
IO:Calibration:Calibrate Using Points.
Las posiciones reales del centro de los
puntos se entran como entradas en el
mismo orden que los centros de los
puntos.
Upper-left circle center: (0.00, 0.00)
Upper-right circle center : (4.00, 0.00)
Lower-left circle center: (0.00, 3.00)
Lower-right circle center: (4.00. 3.00)

El centro del circulo superior derecho est
a cuatro unidades a la derecha del centro
del circulo superior izquierdo. Las unidades
de medida no se introducen.

Las posiciones reales de los centros de
los puntos son relativos. El centro del
crculo superior izquierdo podran haber
sido entradas como (2.125, 7.500), y los
otros centros de los crculos ajustados
apropiadamente.




visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
55
Paso 3. Crear y rellenar un objeto calibrado

Se puede entrar una calibracin vaca, en cada ventana de imagen, en el
dilogo Options y en la pestaa Calibration.



Al mismo tiempo, en la instruccin
Calibrate Using Points, haga doble
clic en la entrada HDL <Empty> para
mostrar los handles de los objetos
calibrados. Seleccione un objeto
(CalibrationA) para guardar la
transformada de calibracin.


Como la subrutina an no ha sido ejecutada, la transformacin an no ha sido
creada, y el objeto calibracin est vaco todava. Para crear la transformacin
y llenar el objeto de calibracin, ejecute la subrutina pulsando la tecla F11.


Paso 4. Aplicar el objeto calibracin

Los objetos calibracin, se aplican a ventanas de imagen individualmente. En la
ventana de imagen deber ir al cuadro de dilogo Options, y a la pestaa
Calibration, y seleccionar el objeto calibracin de la lista desplegable.

De este modo se permiten utilizar distinas calibraciones dentro de una misma
investigacin Sherlock.

Clic en el botn
Add para crear un
objeto de
calibracin vaco
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
56


En este caso, cuando se hacen medidas punto a punto, en la ventana de
imagen calibrada, las distancias se medirn en unidades reales. La pantalla de
la PDA mide 2,59 pulgadas de anchura.




5 5. .2 2. . C Ca al li ib br ra ac ci i n n S So of ft tw wa ar re e, , m m t to od do o 2 2 : : v va al lo or re es s d de e
t tr ra an ns sf fo or rm ma ac ci i n n

Para realizar este tipo de calibracin, deber seguir los siguientes pasos:

1. Determinar el origen y factores de escala de la imagen.
2. Crear una transformacin utilizando el origen y factor de escala del paso
1.
3. Crear un objeto calibracin y rellenarlo con la transformacin.
4. Aplicar el objeto calibracin a la ventana de imagen.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
57
Este mtodo requiere que se conozcan o se puedan calcular las relaciones
entre las distancias horizontales y verticales de la ventana de imagen con
respecto a las distancias en unidades reales; estas se suministran como
factores de escala a la instruccin IO:Calibration:Calibrate Using
Transformation Values.

En esta subrutina de Calibration, el
factor de escala horizontal se calcula
dividiendo, la anchura en unidades
reales del campo de visin de la
cmara, 3.3125 pulgadas, entre la
resolucin horizontal de la cmara
648 pxels (factor de magnificacin).
Un clculo similar se realiza para el
factor de escala vertical (2.5 pulgadas
dividido entre 492 pxels). En la
subrutina no hay ventana de imagen,
ya que se proveen explcitamente, los
valores de la transformacin.

Los dos factores de escala se pasan
como entradas a la instruccin de
Calibrate Using Transformation
Values. El origen de coordenadas
(0,0), se sita en la esquina superior
izquierda de la imagen; no se aplica
rotacin.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
58
Una vez ejecutada la subrutina de calibracin Calibration, pulsando la tecla
F11, las medidas de distancia punto a punto hechas en otra ventana de imagen
donde se aplica la calibracin CalibarationA, tendrn como resultado unidades
calibradas.





visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
59
Calibracin Manual

Los mtodos de calibracin descritos pueden
realizarse tambin de forma manual, haciendo
clic en Direct calibration (valores de
transformacin), o Point calibration (puntos) en
el cuadro de dilogo Options, en la pestaa
Calibration de la ventana de imagen.


El hecho de calibrar una ventana de imagen depende del tipo de anlisis
que se deba realizar sobre ella. Por ejemplo, si una ventana de imagen
contiene solo una ROI tipo rectngulo, donde se leer un cdigo de barras, las
dimensiones reales del cdigo de barras, probablemente no tengan ninguna
importancia. Sin embargo, el proceso de calibracin es absolutamente
necesario en las aplicaciones de metrologa o de deteccin de defectos.


No todas las ventanas de imagen deben tener la misma calibracin
aplicadas sobre ellas. En un sistema multicmara, las ventanas de imagen
adquiridas por diferentes cmaras, probablemente necesitarn diferentes
calibraciones.

Las medidas de reas, como el reading rea[] devuelto por el
algoritmo Connectivity Binary, siempre devuelven pxels.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
60
6 6. . L La an nd dm ma ar rk ks s y y A Al li in ne ea ac ci i n n

Una aplicacin tpica de visin artificial requiere el anlisis de las mismas
estructuras en una serie de imgenes. Debido a la naturaleza de los equipos de
control del movimiento y de adquisicin de imagen, o del propio objeto a
analizar en si mismo, las estructuras a analizar, raramente se encuentran en el
mismo sitio en cada imagen. Dado que una ROI, simplemente analiza los pxels
presentes, no hay forma de que conozca donde estn los pxels correctos, un
desplazamiento o una rotacin de los pxels a analizar pueden dar como
resultado un falso rechazo.

Para esta problemtica se aplica la utilidad Landmark que consiste en un
reposocionamiento de las herramientas en respuesta a herramientas fijas
previamente procesadas.

En la imagen siguiente se ha definido una ROI rectangular, para leer un cdigo
de barras en un libro, con el algoritmo Barcode 1D.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
61
Si el libro se desplaza de captura en captura, el cdigo de barras puede que no
se encuentre dentro de la ROI, y por tanto no podr ser ledo.



Para asegurarse que la ROI analiza los pxels correctos, se puede crear un
esquema de alineacin, para mover la ROI, con relacin a uno o ms puntos,
que pueden encontrarse en cada una de las imgenes a analizar.

Si los pxels a analizar pueden desplazarse solo en direccin horizontal y/o
vertical, un punto es suficiente para conocer la cantidad de desplazamiento.




visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
62
Si los pxels a analizar pueden sufrir rotacin adems de desplazamiento, son
necesarios dos puntos para calcular la rotacin y el desplazamiento.

El primer paso para crear un esquema de alineacin es identificar el punto o
puntos landmarks que pueden encontrarse en cada imagen.

En la imagen del libro, el borde izquierdo de la etiqueta del cdigo de barras,
puede encontrarse con una ROI tipo lnea, ejecutando el algoritmo First Edge.
Se ha escogido el valor 100 para el parmetro edge strength despus de
analizar la magnitud y polaridad del cambio en la intensidad de los pxels en el
borde de la etiqueta, que se puede ver cuando se muestra el Profile de la ROI.



Se crea un esquema de alineacin en la pgina Alignment de una ventana de
imagen en el cuadro de dilogo Options.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
63


Haga clic en el botn Create alignment para crear un esquema de alineacin
vaco. Por defecto los esquemas de alineacin adoptan los siguientes nombres
alignmentA, alignmentB, etc. En este ejemplo, el esquema de alineacin se
ha renombrado como alignLeftEdge.

Todos los readings de punto simple son candidatos como entradas de
esquema de alineacin. El punto encontrado por el algoritmo First Edge se ha
arrastrado desde la ventana Point readings a alignLeftEdge, y ahora es un
landmark.

Un esquema de alineacin por s mismo no hace nada ms que determinar el
desplazamiento del landmarks con respecto a su posicin original. Se debe
aplicar a una ROI para que sta se mueva y analice los pxels correctos.

Los esquemas de alineacin se aplican a ROIs individuales. Para aplicar un
esquema de alineacin a una ROI, abrir su cuadro de dilogo Edit y hacer clic
en la pestaa Properties. La lista desplegable de Alignment muestra todos
los esquemas de alineacin en la investigacin.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
64





En el caso de que el libro se desplace en horizontal, el algoritmo First Edge de
la ROI de lnea, encuentra el punto en el borde derecho de la etiqueta de
cdigo de barras y calcula su desplazamiento con respecto a su posicin
original. La ROI rectangular ejecuta el algoritmo Barcode 1D, movindolo con
relacin a este landmark. La lnea discontinua amarilla muestra la posicin
original de la ROI rectangular.



En el ejemplo del libro, la ROI de lnea mide solo los desplazamientos
horizontales. Si el libro se mueve verticalmente, el algoritmo First Edge de la
ROI devolver las mismas coordenadas, y el esquema de alineacin no mover
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
65
la ROI rectangular que realice el algoritmo Barcode 1D. Si el libro se mueve a
mucha distancia en vertical, el cdigo de barras puede salir de la regin
ocupada por la ROI rectangular, y el algoritmo fallar.

Una forma til de crear un landmark que pueda determinar los desplazamientos
horizontal y vertical, (sin rotacin), consiste en aplicar una de las utilidades de
Bsqueda (Search), asumiendo que hay un solo patrn en el objeto que se
puede encontrar en cada imagen. En el libro, cada etiqueta tendr los
caracteres ISBN debajo del cdigo de barras, y se puede utilizar como
patrn, y el punto donde se encuentre el patrn puede utilizarse como
landmark.

Si el objeto puede rotar, se necesitar un esquema de alineacin con dos
herramientas de Search como landmark. En el libro, ISBN y la esquina
superior derecha de la etiqueta, que incluye el ltimo 0 en 90000, se usan
como patrones en dos ROIs rectangulares ejecutando el algoritmo Search
Line Based. Los readings point de los dos algoritmos se convierten en los
puntos de los landmark aadindolos a alignRotate.



A la ROI que ejecuta el algoritmo 1D Barcode se le asigna el esquema de
alineacin alignRotate. En este caso si el libro presenta rotacin, la ROI del
cdigo de barras rota con relacin a los dos landmarks.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
66



Es posible tener diferentes esquemas de alineacin aplicadas a
diferentes ROI dentro de la misma ventana de imagen.

En sistemas con mltiples cmaras, cada cmara normalmente requiere
su propio esquema de alineacin.

Es una prctica comn poner las ROI que siguen a los landmark, para la
alineacin, en una ventana de imagen distinta de la que contiene la ROI que
realice el trabajo real de la investigacin.




visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
67
7 7. . G GU UI I

Esta seccin describe la Interfaz de usuario de Sherlock 7.

Diseada para facilitar el uso del programa, esta Interfaz consta de mens,
barras de herramientas, ayuda en lnea y ventanas de dilogo.

Para facilitar la asimilacin por parte del usuario, todas estas entidades tienen
el mismo sistema de funcionamiento que las ventanas de Windows.


7 7. .1 1. . I In nt te er rf fa az z

Sherlock es un Entorno de Desarrollo Integrado (EDI) completo. En l se puede
disear, probar, corregir y ejecutar aplicaciones de visin artificial.

Una Investigacin (.ivs) en Sherlock est compuesta por:
Una o ms Ventanas de Imagen (Image Windows) donde se muestran
las imgenes.
Una o ms Regiones de Inters (ROIs) a procesar.
El Programa (Program), la serie de pasos de adquisicin y proceso de
imgenes.
La Ventana de Instrucciones (Instruction), donde se seleccionan los
elementos a aadir al Programa.
La Ventana de Variables, donde se crean y visualizan las variables del
Programa.
La Ventana de Visualizacin (Watch), donde se muestran los datos
obtenidos.
La ventana de generacin de Informes (Reporter), donde se pueden
escribir las salidas de mensajes (definidas por el programador).
El Monitor, donde se muestra la informacin en tiempo de ejecucin.
La Ventana Digital IO, donde se muestra el estado de las entradas y
salidas digitales.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
68



A continuacin pasamos a detallar las distintas partes del entorno Sherlock.
ROIs
Watch
Program
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
69
7 7. .1 1. .1 1. . L La a B Ba ar rr ra a d de e H He er rr ra am mi ie en nt ta as s

La descripcin de los botones de la barra de herramientas es la siguiente:



















7 7. .1 1. .2 2. . E El l m me en n p pr ri in nc ci ip pa al l

Seguidamente mostramos la descripcin de las entradas del men principal



















Abrir una nueva Investigacin
Guardar/Guardar Como
(La Investigacin actual) Ejecutar la Investigacin
una vez /continuamente
Abrir una Investigacin
Debugging Copiar/Pegar
Elementos del programa
Parar/Abortar
la Investigacin
Abrir y Cerrar varias ventanas GUI
(Program, Watch, etc.)
Controla el contenido y ejecucin
de una an Image Window
Controla la ejecucin de
una aplicacin Sherlock
Controla la Ventana de
Imagen
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
70

Los botones de mens File, Edit y Run abren y guardan Investigaciones, copian
elementos del Programa y ejecutan la Investigacin.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
71

7 7. .2 2. .- -V Ve en nt ta an na a I Im ma ag ge en n ( (I Im ma ag ge e W Wi in nd do ow w) )

Una ventana de imagen contiene la imagen a procesar.

Una investigacin tiene como mnimo una ventana de imagen. Puede tener
mltiples, no hay lmite en el nmero de ventanas de imagen. Cada ventana de
imagen puede contener una sola imagen.

Para configurar una imagen hay que hacer doble clic en una ventana de
imagen con el objetivo de mostrar su cuadro de dilogo Options.

En este dilogo aparece la siguiente informacin:


El nombre de la
ventana de imagen
(imgB)
Posibles Fuentes de
imagen:

- Una cmara
- Una segunda ventana.
- Una composicin de im-
genes color de 24-bit
desde planos monocromos
de 8-bit
- Un archivo de imagen
- Una secuencia de ar-
chivos de imgenes, para
simular la captura real-time
de una entrada de cmara.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
72
7 7. .2 2. .1 1. . L La a b ba ar rr ra a d de e h he er rr ra am mi ie en nt ta as s d de e l la a v ve en nt ta an na a d de e i im ma ag ge en n

Mostramos a continuacin la descripcin de la barra de herramientas.



























Para aadir una ventana de imagen nueva, es necesario hacer click en el botn
en la barra de herramientas de programa. A las ventanas de imagen
se les asignarn por defecto los nombres imgA, imgB, imgC, etc.

Se puede renombrar una ventana de imagen en el dilogo Options



Tambin es posible cambiar el nombre de una imagen en el panel de
programa. (Hacer clic-izquierdo sobre el nombre para cambiarlo).
Zoom decreciente, escala 1:1, zoom creciente
Aadir ROIs
Guardar imagen
en un archivo
Abrir imagen de un archivo
Guardar imagen en un
archivo con grficos
Iniciar/Parar captura de cmara para
esta ventana de imagen sin procesar
Mostrar el
dilogo
Options
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
73


Los nombres de las ventanas de imagen pueden contener espacios y
caracteres imprimibles: Camera #1, Bottle_side_view, Top of canister.


Para borrar una ventana de imagen, haga clic en su botn de cierre o
bien seleccinela en el programa y pulse la tecla suprimir del teclado.





Con estos pasos borrar completamente la ventana de imagen y su contenido.
Cualquier trabajo que haya realizado en la ventana se perder. (Tenga mucho
cuidado! )


7 7. .3 3. .- -R RO OI Is s, , A Al lg go or ri it tm mo os s y y P Pr re ep pr ro oc ce es so os s

Una ROI (regin de inters) define los pxels a procesar. Una ventana de
imagen puede contener tantas ROI como sean necesarias para la resolucin de
la aplicacin.

Hay dos tipos de ROIs: rea y lnea (simple y compuesta)


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
74
7 7. .3 3. .1 1. . R RO OI Is s r re ea a

En las ROI de rea se procesan los pxels interiores del rea incluyendo los de
los bordes.

Existen los siguientes tipos de ROIs rea:




Las ROIs de rea se utilizan para procesar grupos de pxels de dos
dimensiones.



Ejemplo: Lectura de un cdigo de barras con una ROI rectangular




Ejemplo: Anlisis Blob con una ROI anular

Cuando la ROI anular procesa sus pxels, los redistribuye en un
rectngulo, y puede tener cierta distorsin. Los cuadrados rojos que enmarcan
los botones de los ROI polgonos, toroides y crculos, significan que procesan
sus pxels en el lugar, sin remapearlos en un rectngulo, por tanto no ocurre
distorsin.
Rectngulo Anillo Polgono Toroide rea Circular
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
75

7 7. .3 3. .2 2. . R RO OI Is s L L n ne ea a

Las ROIs de tipo lnea procesan los pxels a lo largo de la lnea. Hay dos tipos
de ROIs de lnea, Simple y Compuesta.

Simple




Compuesta





Las ROI Circunferencia, Arco iris y Ojos de Buey, procesan los pxels a
lo largo de sus lneas, no dentro o entre ellas.

Para aadir una ROI a una ventana de imagen, debe hacer clic en el botn
ROIs, en la barra de herramientas de la ventana, y despus hacer clic en la
ventana de imagen, para definir la posicin y tamao de la misma. Diferentes
ROIs requieren diferentes nmeros de clic para definir su tamao y posicin.

Punto Un Clic.
Lnea Dos clic, uno para cada extremo de la lnea.
Poli-lnea n clics, uno para cada vrtice de la lnea y doble clic izquierdo
para completar la lnea.
Arco Tres clics, uno para cada lmite del arco y uno que define la
curvatura.
Circunferencia Dos clics, uno para el centro y otro que define el radio.
Rastrillo Dos clics, uno para cada esquina del rectngulo que lo define.
Radial
(Spoke)
Tres clics, uno para situar el centro de la rueda, y dos ms
para situar el inicio y el fin del radio.
Arco Iris Cuatro clics, uno para cada extremo del arco iris, uno para
definir la curvatura del arco interior o exterior, y uno para
definir la concentricidad del arco interno o externo.
Ojo de Buey Tres clics, uno para posicionar el centro del ojo de buey, uno
para definir el radio del crculo interno o externo y uno para
definir el otro radio interior o exterior.
Punto Lnea Poli-lnea Arco Circunferencia
Rastrillo Radial Arco iris Ojo de Buey
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
76
Rectngulo Dos clics, uno para cada esquina opuesta.
Anillo Cuatro clics, uno para cada extremo de un arco, uno para
definir el arco interno o externo y uno para definir el arco
externo o interno
Polgono n clics, uno para cada vrtice del polgono y un doble clic
izquierdo para completar el polgono.
Toroide Tres clics, uno para posicionar el centro del crculo, uno para
definir el radio interno o externo del crculo y uno para definir el
radio externo o interno del crculo.

Se asignan nombres por defecto a las ROIs que indican su tipo y orden de
creacin: RectA, TorusA, RectB, RectC, SpokeA, etc. Para renombrar una
ROI, deber hacer doble clic en ella en la ventana de imagen o hacer clic sobre
la herramienta en el panel de Programa para abrir el dialogo Edit.




Se puede renombrar tambin la ROI directamente en el panel de programa.
(Para realizar este cambio hacer clic con el botn izquierdo una vez sobre el
nombre, espere, y haga clic izquierdo otra vez).



Para borrar una ROI, seleccinela en la ventana de imagen o en el panel de
programa, y pulse la tecla suprimir del teclado.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
77
7 7. .3 3. .3 3. . A Al lg go or ri it tm mo os s

Para analizar los pxels definidos por una ROI, es necesario seleccionar un
algoritmo del cuadro de dilogo Edit de las ROI. Un algoritmo extrae
informacin de los pxels de una ROI, pero no modifica su contenido.

Las ROI de rea y Lnea contienen diferentes grupos de algoritmos:




La mayora de algoritmos tienen parmetros que se pueden modificar para
controlar el funcionamiento del mismo. Por ejemplo, el algoritmo Count cuenta
el nmero de pxels de un valor especfico. Para seleccionar el valor de los
pxels a contar, haga clic en el botn Parameters y se abrir el cuadro de
dilogo Parameters de este algoritmo.




Cuando hacemos clic en la ventana de valores de parmetro, podemos
introducir un valor de parmetro directamente (N) o seleccionar una variable
que contiene el valor parmetro (var).


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
78






Cada ROI puede ejecutar hasta tres algoritmos distintos. Los algoritmos se
ejecutan de forma secuencial e independiente; la ejecucin de un algoritmo no
tiene relacin con otro, excepto si se pasan datos de salida de un algoritmo a la
entrada de otro.

El uso ms comn de la ROI lnea es para encontrar los lmites (edges). Estos
lmites se emplean tanto para la deteccin de defectos como para la medida.



Encontrar lmites (edges) con una ROI de lnea

La mayora de los algoritmos de las ROI de Lnea que buscan lmites tienen
parmetros para determinar que se interpreta como un lmite.


7 7. .3 3. .4 4 P Pr re e- -p pr ro oc ce es sa ad do or re es s ( (P Pr re ep pr ro oc ce es ss so or rs s) )

En ocasiones es necesario o deseable modificar los pxels de una ROI antes de
analizarla con un algoritmo. Un pre-procesador modifica los pxels en una ROI,
pero no extrae informacin de ella. Debido a las diferencias en el contenido de
las mismas, las ROI rea y Lnea tienen grupos de pre-procesadores similares
pero no idnticos.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
79


La mayora de pre-procesadores tienen parmetros que se pueden ajustar para
determinar su forma de funcionamiento. Por ejemplo, el pre-procesador
Threshold ajusta cada pxel de una ROI a uno o dos valores, dependiendo si el
valor del pxel est por encima o por debajo del valor lmite. Para ajustar el
threshold, valor inferior y valor superior, debe hacer clic en el botn
Parameters para mostrar el cuadro de dialogo Parameters del pre-procesador.



En algunos parmetros, cuando se hace clic en los valores de la ventana
puede escoger entre definirlas manualmente (N)



o bien seleccionar una variable que contiene el valor del parmetro (var).



Cada ROI puede ejecutar hasta siete pre-procesadores distintos. Los pre-
procesadores se ejecutan secuencialmente; las modificaciones de los pxels
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
80
realizados por un preprocesador previo afectan al siguiente, por tanto el orden
en algunas ocasiones es crtico.

En la siguiente imagen se puede
observar una ROI rectangular
sin ningn preproceso asignado.


La siguiente imagen muestra
esta misma ROI con un
preproceso Equalize seguido de
el preproceso PrewittXY .
(El preprocesador Equalize
hace una normalizacin
estadstica de los valores de los
pxels de la ROI para maximizar
el rango dinmico.
El preprocesador PrewittXY
realza los lmites.


Por el contrario en la siguiente
imagen se puede ver la ROI con
el preproceso PrewittXY
seguido del preproceso
Equalize. Como podemos
apreciar, el resultado es distinto
dependiendo del orden de los
preprocesos realizados.


Nota:
Use el botn
para
borrar un
preproceso.
Use los botones
para cambiar el
orden de ejecucin
de los preprocesos.





visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
81
7 7. .3 3. .5 5 P Po os si ic ci io on na ad do os s d de e R RO OI Is s

Mediante la siguiente ventana es posible ajustar de forma precisa la posicin
de una ROI, accediendo por la pestaa Position del cuadro de dilogo Edit.















Mover la
ROI en
cualquier
direccin






Mover una de las
ROI definiendo las
coordenadas (ver
la siguiente tabla)


Mover la ROI al
centro de la
ventana de imagen

Expandir la ROI
para enmarcar la
ventana de imagen

Cambiar el nmero de lneas en la ROI*

Cambiar el ngulo de la ROI
(solo rectngulo y rastrillo)

*opcional para las ROIs de lnea mltiples.

En la siguiente tabla mostramos el ndice de coordenadas que emplea
Sherlock para el acceso a las ROIs.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
82

ndice Coordenada

Tipo ROI
0000

0001 0002 0003

Nota
Punto(Point) Punto
Lnea (Line) Inicio Fin
Circunferencia
(Circle)
Centro Punto en
circunferencia

Arco (Arc) Inicio Fin Punto en
el arco

Rastrillo (Rake) Arriba
Izquierda
Abajo
Derecha

Radial (Spoke) Centro Punto de
inicio de una
lnea
Punto
final de
una lnea

Arco iris (Rainbow) Inicio arco Fin de arco Punto en
arco
interior o
exterior
Punto en
arco
interior o
exterior
1
Ojo de Buey
(Bullseye)
Centro Punto en
circulo interior
o exterior
Punto en
circulo
exterior o
interior
2
Rectngulo Arriba
izquierda
Abajo
derecha

Anillo (Annulus) Inicio de
arco
Fin de arco Punto en
arco
interior o
exterior
Punto en
arco
exterior o
interior
1
Toroide (Torus) Centro Punto en
circulo interior
o exterior
Punto en
circulo
exterior o
interior
2
rea Circular (Circle
Area)
Centro Punto en
crculo

Polgono y Poli-lnea Uno para cada vrtice, incluyendo los puntos de inicio y fin.

Notas:

1. El punto 0002 debe estar en el arco interno y el punto 0003 debe estar en el
arco externo, o viceversa, dependiendo del modo de creacin de la ROI.

2. El punto 0001 debe estar en el crculo interno y el punto 0002 debe estar en
el crculo externo, o viceversa, dependiendo del modo de creacin de la ROI.

Para evitar que la ROI se mueva accidentalmente, podemos fijar su posicin
con el checkbox Lock position.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
83
Es importante resear que dentro del men Edit de la ROIs, el botn Snap
adquiere una nueva imagen en la ventana de imagen, pero no aplica los pre-
procesadores o algoritmos de la ROI.

De la misma forma, el botn Apply ejecuta los pre-procesadores y algoritmos
de la ROI. Esto es una accin de una vez por imagen; debe adquirir una nueva
imagen antes de poder hacer clic en el botn Apply.

Cuando se hace clic en el botn Repeat, el botn Snap adquiere
repetidamente una nueva imagen en la ventana de imagen y ejecuta los pre-
procesos y algoritmos de la ROI. El botn Repeat se cambia al botn Stop.
Para parar, hacer clic en el botn Stop.


7 7. .3 3. .6 6. . P Pr ro op pi ie ed da ad de es s d de e l la as s R RO OI I

Se puede extraer informacin acerca de los pxels en la ROI en la pestaa
Properties del cuadro de dilogo Edit.



Para una ROI de rea monocromo, podemos visualizar su histograma haciendo
clic en el botn Histogram.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
84



Esta informacin no es exportable al programa. Sin embargo, a partir de esta
grfica se obtiene una idea de la distribucin de los valores de los pxels. La
mayora de los pxels del RectA tienen valores comprendidos entre 200 y 240.

Para una ROI del tipo lnea simple en una imagen monocromo (lnea, arco,
circunferencia, poli-lnea), el botn Histogram se reemplaza por el botn
Profile. Cuando se hace clic en este botn, se muestran las grficas de la
intensidad de los pxels y de su gradiente (rango de cambio).



Con este grfico podemos interpretar que desde el pxel 0 hasta el pxel 20, la
intensidad de los pxels es de aproximadamente 200 (la intensidad de los pxels
a lo largo de la LineA esta justo por encima de 200). Sobre el pxel 21 (el borde
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
85
oscuro izquierdo), la intensidad cae a 75, despus vuelve a subir a 150 (la zona
gris dentro de la cruz). Despus vuelve a bajar a 75 en el pxel 57 (el borde
oscuro derecho), y despus vuelve a subir aproximadamente a 200 hasta el
final de la lnea.

La grfica del gradiente no muestra el valor absoluto de la intensidad de los
pxels, sino el ndice y polaridad del cambio. El primer cambio significativo
ocurre en la transicin del fondo gris claro al borde oscuro izquierdo, un
gradiente negativo (claro a oscuro). El siguiente cambio significativo ocurre en
la transicin del borde oscuro a la zona gris interior de la cruz, un gradiente
positive (oscuro a claro), y as sucesivamente. Estas grficas son tiles para
determinar lo marcados que son los bordes para ser localizados por los
algoritmos de deteccin de bordes.

Para las imgenes de color, el histograma muestra la distribucin de los planos
de color rojo, verde y azul de los pxels contenidosen dicha ROI.




visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
86
En las imgenes color, con el botn Color se muestra la distribucin de los
colores de los pxels en un cubo de color 3D, en un espacio RGB.





Tanto para imgenes monocromo como color, el botn Intensity muestra un
mapa de intensidad 3D de los pxels de la ROI.


Se puede rotar el grfico 3D con el ratn. Estos grficos pueden ser tiles para
hacer informes aunque esta informacin no es exportable al programa.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
87

El checkbox Outline permite visualizar o no el contorno de la ROI. El hecho de
hacer visible o no el contorno no afecta ni al proceso lgico ni a la velocidad.


Outline on

Outline off


















visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
88
7 7. .4 4. . P Pr ro og gr ra am ma a, , R Re ea ad di in ng gs s y y V Va ar ri ia ab bl le es s

A medida que se aaden ROIs a una ventana de imagen y se definen
algoritmos y pre-procesos en las ROIs, aparecen nuevas entradas en el panel
Program. Cuando se ejecuta la investigacin, los elementos del programa se
ejecutan de forma secuencial y en orden descendente, de arriba abajo. Este
modo de ejecucin no cambia a menos que se aadan instrucciones que
cambien este orden.

Ejemplo:

Cuando se ejecuta la investiga-
cin en modo Continuo, en la
ventana de imagen imgA se
adquiere una imagen.

En la ROI RectA se ejecuta el
pre-proceso Threshold, despus
el pre-proceso Median, y luego el
algoritmo Connectivity

Por ltimo, se devuelven los
valores desde count a ellipse
roundness[]. Estos valores se
extraen del proceso realizado por
el algoritmo Connectivity.

La investigacin vuelve al inicio y
repite el proceso.


Notas:

Cada algoritmo retorna como mnimo un valor o reading.
Hay cinco tipos de readings: Nmero ( N ), Booleano ( B ), Cadena
(String) ( S ) Punto ( P ), y Lnea ( L ).
Los readings pueden ser unitarios ( N ) o vectores o matrices ( N[ ]).
En el programa anterior, el algoritmo Connectivity devuelve un solo
nmero count (el nmero de objetos encontrados por el algoritmo), un
solo punto centroid[0] (la coordenada del centroide del primer objeto),
una matriz de puntos centroid[] (las coordenadas de los centroides de
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
89
todos los objetos), una matriz de nmeros area[] (las reas de todos los
objetos), etc.



Para ver el contenido de un
reading (despus de ejecutar
la investigacin al menos una
vez), desplace el puntero del
ratn sobre el reading.





Para mayor comodidad, es posible
visualizar los readings en el panel
Watch. Para mostrar un reading,
arrstrelo desde el panel Program.
(Si el panel Watch no est visible
seleccio-ne ViewWatch del men
principal.) Los valores de los
readings se actualizarn cada vez
que cambien. No se puede ver el
contenido completo de los readings
tipo matriz, en caso de ser
necesaria la visualizacin de toda la
matriz, se tendr que crear una
variable con el contenido a
visualizar.






Reorganizar los elementos de un programa

Como se van aadiendo elementos a un programa, es posible que necesite
reorganizar estos elementos durante su construccin. Se pueden mover los
elementos arrastrndolos con el ratn.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
90

Paso 1. Para mover la ROI
LineA antes de RectA,
seleccinela, pulse el botn
izquierdo del ratn.

Paso 2. arrastrelo
encima de RectA.

Paso 3. Suelte el botn
del ratn.

Copiar elementos de un programa

Se pueden copiar elementos individualizados dentro de un mismo programa.
Cuando se crea una copia de un elemento, el nuevo elemento adopta las
propiedades del elemento fuente. Se asigna un nuevo nombre, ya que dos
elementos no pueden tener el mismo nombre.



Paso 1. Para hacer
una copia de RectA,
seleccionarlo con el
ratn, hacer clic con
el botn derecho del
ratn, y seleccionar
Copy del men
desplegable.
Paso 2. Seleccionar el
elemento posterior donde se
desea incluir la copia, hacer
clic en el botn derecho del
ratn, y seleccionar Paste
(Selected only) .
Paso 3. El nuevo elemento
tomar el nombre RectA_A.

Despus de hacer la copia de un elemento, se puede editar para cambiar su
nombre y funcionalidad. Los cambios que se hacen a un elemento copiado no
afectan al elemento origen y viceversa.

Tambin existe la posibilidad de copiar secciones enteras de un programa.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
91


Paso 1. Para hacer una
copia de imgA y todos
sus elementos,
seleccionar los elementos
con el ratn, hacer clic
con el botn derecho del
ratn, y seleccionar Copy
del men desplegable.

Paso 2. Seleccionar el
elemento posterior donde
se desea incluir la copia,
hacer clic en el botn
derecho del ratn, y
seleccionar Paste
(Selected only) del men
desplegable.

Paso 3. Se crear una
nueva ventana de imagen
que contiene una copia de
todos los elementos de la
ventana de imagen origen.

Si ha seleccionado Paste (Selected only), imgA_A Habr sido creada, pero
no contendr RectA_A, LineA_A, o RakeA_A.

Los comandos Copy, Paste y Delete estn tambin disponibles en el men
principal Edit.



visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
92
7 7. .5 5. . V Va ar ri ia ab bl le es s

De la misma forma que en cualquier otro entorno de programacin, las
variables en Sherlock, se usan como contenedores temporales de datos. Los
tipos de variables que se pueden crear son del mismo tipo que los de los
algoritmos readings generados: Numrico, Booleano, String, Punto y Lnea
(individuales o matrices para todos los tipos).


Para crear una variable, seleccionar
el tipo deseado en el panel de
Variables. (Si el panel de
Variables no est abierto,
seleccionar ViewVariables del
men principal.) . A las variables se
les asignan nombres y valores
iniciales por defecto.



Hacer un doble clic izquierdo en una
variable para mostrar su dilogo de
edicin. Se pueden renombrar las
variables y asignarles valores iniciales.
Se aconseja que los nombres de las
variables tengan sentido, por ejemplo,
arrObjectAreas en lugar de varB, esto
facilita el seguimiento del programa.

No se pueden modificar directamente los readings, por ejemplo, no puede
borrar elementos de una matriz de nmeros devueltos como readings desde un
algoritmo.

Sin embargo, es posible modificar datos en variables, por tanto, uno de los
usos ms comunes de las variables, es como asignacin de nuevos valores de
los readings.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
93
Para guardar el valor de
un reading en una
variable, hay que hacer
doble clic en el reading
para mostrar su cuadro de
dilogo de edicin. La lista
Store in variable muestra
solo las variables del
mismo tipo que el reading.
(arrObjectAreas y varD
son ambos de tipo N[ ] )

Tambin puede hacer clic
derecho en el reading para
mostrar el men Connect
value.







Cuando ejecute la investigacin, las
variables conectadas a readings se
llenarn con los datos de los readings.
Para ver los componentes de una
variable, se tiene que hacer clic en el
botn izquierdo del mouse sobre su
nombre.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
94

Para borrar una variable, se ha de
seleccionar en el panel de variables y
pulsar la tecla suprimir del teclado.

Nota: Tenga cuidado cuando borre una
variable, ya que puede utilizarse como
valor de entrada en cualquier otra parte
del programa.




visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
95
7 7. .6 6. . I In ns st tr ru uc cc ci io on ne es s

Las Instrucciones se utilizan para mltiples tareas; manipular los datos, hacer
clculos, controlar el flujo del programa, leer en los puertos de entrada y
escribir en los puertos de salida, abrir y escribir archivos y realizar operaciones
adcionales de programacin.

Para mostrar la lista de instrucciones, seleccione ViewInstructions del men
principal. Las instrucciones se dividen en grupos funcionales.

Para aadir funciones en el programa, hay que hacer lo siguiente:


Paso 1. Seleccionar una instruccin
del panel Instructions.

Una ventana desplegable muestra la
funcionalidad de las instrucciones,
entradas y salidas.

Paso 2. Arrastrar la instruccin a la
parte superior del programa,
despus de donde quiera que
aparezca. (En este ejemplo, la
instruccin MeanArr se desplaz por
encima de RectA. Los pre-procesos
y algoritmos son propiedades de
RectA, no son elementos del
programa en si mismos.)
Los tringulos rojos que apuntan a la
izquierda indican entradas. Los
tringulos verdes que apuntan a la
derecha indican salidas.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
96
Paso 3. Hacer clic con
el botn derecho y
entrar para mostrar su
men Connect value.
Solo se muestran las
variables y readings del
tipo correcto.
Seleccionar la entrada.



Esta instruccin calcula el
promedio del ancho de los
objetos encontrados por el
algoritmo Connectivity de
RectA. El resultado aparece
como avg.


Paso 4. Para ver la salida,
arrastrar el contenido de la
misma hasta el panel Watch.

Nota: Se puede definir una
entrada arrastrando un
candidato vlido desde cualquier
lado al progra-ma. En este
ejemplo width[] ha sido
arrastrado desde
RectA.Connectivity y se ha
situado encima de la entrada.



Para renombrar una instruccin,
hacer clic izquierdo una vez,
espere brevemente, y despus
hacer clic izquierdo otra vez.
Escribir el nuevo nombre (No se
pueden renombrar entradas o
salidas).

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
97

7 7. .6 6. .1 1. . I In ns st tr ru uc cc ci io on ne es s d de e f fl lu uj jo o d de el l p pr ro og gr ra am ma a

Con las instrucciones que aparecen dentro del
apartado General del Men Instructions se puede
controlar el flujo del programa. Estas instrucciones
estn disponibles tambin en la barra de
herramientas del panel Program.




Las instrucciones If y If-Else ejecutan condicionalmente otras
instrucciones basadas en la evaluacin de una expresin lgica.

Cuando se aade una instruccin If o If-Else y se hace doble clic izquierdo en
ella, se muestra el cuadro de dilogo Edit conditional expression.



Es posible crear una expresin
lgica desde operadores lgicos y
aritmticos, nmeros, readings y
variables.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
98

Si el resultado de la expresin
lgica es cierta, cuando la
instruccin se ejecute, se seguir la
rama If de If-Else. Si el resultado
es falso, se seguir la rama Else.
(Display error message y Display
success message son instancias
de la instruccin IO:Reporter:Print.

(Una instruccin If no tiene una
rama Else.)


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
99
La instruccin While ejecuta repetidamente, las instrucciones que
contiene, tantas veces como su expresin condicional sea cierta. Es til, entre
otras cosas, para extraer y analizar valores en una matriz.


La instruccin While utiliza el mismo cuadro
de dilogo de expresin condicional que las
instrucciones If y If-Else.
En este caso, una variable tipo nmero
intIndex se crea para acceder a elementos
individuales de RectA.Connectvity.area[].
Mientras intIndex es menor que el nmero
de elementos en la matriz (el contaje de
objetos encontrados), el bucle While ejecuta
las instrucciones internas. (Los ndices de la
matriz se inician en cero).
(Tenga en cuenta que [RectA.Connectivity
Binary.count] no realiza una resta, es el
valor del reading count del algoritmo
RectAs Connectivity Binary.)


Initialize intIndex to 0 es una instancia
renombrada de la instruccin Numeric
SetNumeric.
Get Connectivity.area[intIndex] es una
instancia renombrada de la instruccin
Array:Number GetAt. El elemento
Connectivity. area[intIndex] se extrae y
guarda en la variable intArea. Despus
de realizarse algn anlisis (More
instructions), intIndex se incrementa
con una instancia de la instruccin
Numeric Add. Se alcanza el final del
bucle, (Display message est fuera del
bucle), por tanto el control vuelve a la
parte superior del bucle. Cuando
intIndex es igual a count, se sale del
bucle, y se ejecuta Display message.


Nota: Hay que tener cuidado con los bucles while para evitar bucles infinitos.

Algunas veces es necesario interrumpir el flujo normal del programa,
normalmente cuando ocurre alguna condicin aberrante. Para ello, utilizar las
instrucciones Jump y Label .
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
100
Una Label es
una instruccin
haz nada que
se puede in-
sertar en cual-
quier parte y
renombrarse
como nada.
El cuadro de
dilogo de la
instruccin
Jump muestra
todos los Label.


En este ejemplo dentro del
bucle While, si un elemento
de la matriz
Connectivity.area[] es menor
de 5, se saldr del bucle
inmediatamente si incrementa
el valor de IntIndex.



La combinacin Jump/Label se debe utilizar solo cuando es
absolutamente necesario. Si no se va con cuidado con esta combinacin
pueden ocurrir problemas inesperados y de difcil diagnstico. De hecho, es
siempre posible escribir programas donde no es necesario la combinacin
Jump/Label. Los ejemplos anteriores se pueden reescribir sin utilizar la
combinacin Jump/Label como muestra la siguiente secuencia:



La expresin lgica While se ha reescrito para ver si intIndex est dentro del
rango de la matriz y si la ltima rea leda es igual o mayor que 5. Si ambas
clusulas se evalan como falsas se saldr del bucle. (intArea se ha
inicializado con un valor alto, para asegurarse que la primera vez que se evala
la expresin lgica, la clusula [intArea]>=5 se evala como True.)


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
101
Una instruccin Jump puede saltar a una Label solo si las dos
instrucciones estn en la misma subrutina.

Las Labels pueden utilizarse tambin para introducir comentarios breves en los
programas.

7 7. .6 6. .2 2. . S Su ub br ru ut ti in na as s

Para facilitar el seguimiento del programa, a menudo es conveniente o
necesario dividirlo en subrutinas.

Una subrutina se crea cuando se arrastra la instruccin Subroutine del panel
Instruction, o se hace clic en el botn Sub de la barra de
herramientas del panel Program. Esta subrutina vaca que tiene un nombre por
defecto (SubA, SubB, etc.). Se puede y debe renombrar la subrutina haciendo
clic sobre ella, esperando un momento y volviendo a hacer clic.

El cdigo de la rama If de la
instruccin If-Else se ha
copiado y pegado desde la
rutina Main a una subrutina
denominada Average width
too low. (Se ve que ha sido
copiada y pegada porque se ha
aadido _A a la instruccin
Display error message).


Volviendo a la rutina Main, las
instrucciones Display error
message y Stop se borran y se
reemplazan con una instruccin
Call . Al hacer doble clic
izquierdo en la instruccin Call,
su dilogo muestra todas las
subrutinas del programa.
Seleccione la subrutina a la que
se desea pasar el control.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
102
En esta estructura de
programa, cuando ejecute esta
investigacin en modo
continuo:

ImgA adquiere una
imagen.
RectA ejecuta sus pre-
procesos y algoritmos.
MeanArrA calcula el
promedio de los valores
en width[].
Si el promedio es menor
de 10, se llama a la
subrutina Average
width too low; en caso
contrario se ejecuta
Display success
message.
La investigacin vuelve
al principio y repite el
proceso.

La instruccin Return causa la vuelta inmediata desde una rutina a su
llamada desde el programa principal.





Al final de una subrutina, el control se
devuelve automticamente al lugar
donde se ha hecho la llamada. La
instruccin Return no es necesaria
(pero no sobra).
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
103
Sin embargo, el caso de este ejemplo,
la instruccin Return es necesaria si
no se quiere la prueba de anchura
cuando la de altura falla. (No importa
si sta es un buena o mala subrutina,
solo es un ejemplo!)

Las subrutinas pueden anidarse tanto como sea necesario Main puede
llamara a SubA, sta puede llamar a SubB, que puede llamar a SubC, etc.
pero para clarificar el programa no es conveniente anidar ms de dos o tres
niveles de subrutinas distintas.

Todas las variables creadas por Sherlock son globales. No se puede
crear un variable que exista solo dentro de una subrutina. Dado que los
nombres de elementos son nicos:

La ejecucin del programa siempre empieza en la rutina Main. No se
puede renombrar la rutina Main, ni borrarla.
Una instruccin Return en la rutina Main causa una vuelta automtica
al inicio del programa.

Las subrutinas pueden llamarse automticamente como respuestas a un
evento.

Supongamos que se quiere escribir en un archivo el promedio de anchuras en
lugar de ejecutar la instruccin Display success message. Se tendran que
realizar los siguientes pasos:

Paso 1. Aadir la instruccin
IO:File Open al programa.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
104
Cada archivo abierto debe
asociarse con un file handle. Se
pueden activar hasta 10 handles
(0 9). Se debe especificar un
nombre de archivo valido
previamente creado en nuestro
sistema.




Paso 2. Reemplazar la instruccin
Display good width message por
la instruccin IO:File Write.
Paso 3. Seleccionar el mismo file
handle con que se ha abierto el
archivo.

Cuando se define una cadena de
caracteres a escribir, el hecho de
que el nombre de la variable est
entre corchetes [ ] significa que el
valor de la variable es accesible.
No se puede acceder a readings,
solo a variables, as la salida avg
de MeanArrA se guarda en la
variable widthAverage.


Con esta configuracin, cuando la
investigacin se ejecuta en modo
continuo:

Se abre el archivo
C:\Test\Width.txt
ImgA adquiere una imagen
RectA ejecuta sus
preprocesos y algoritmos
MeanArrA calcula el promedio
de los valores en width[]
Si el promedio es menor de 10,
se llama a la subrutina
Average width too low; sin
el promedio se escribe en el
archivo.
La investigacin vuelve al inicio
y repite el proceso.



Esta configuracin es vlida, sin embargo, no tiene sentido abrir el fichero cada
vez que se pasa por el inicio del programa. (De hecho el programa funcionar
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
105
correctamente, pero cada ejecucin de Open despus de la primera generar
un warning en tiempo de ejecucin).

Para abrir el archivo una sola
vez, la instruccin Open se
tiene que mover a una nueva
subrutina de la siguiente forma:
Hacer doble clic izquierdo en el
nombre de la subrutina para
mostrar su cuadro de dilogo
de opciones, seleccionar
Execute after loading o
Execute before continuous
investigation.

Si se selecciona Execute
before continuous
investigation, la subrutina se
llama automticamente cada
vez que se haga clic en el
botn Run continuously de la
barra de herramientas
principal.

Si se selecciona Execute after
loading, la subrutina se llama
automticamente cuando se
seleccione FileOpen desde
el men principal y se ejecuta
la investigacin.

Como el fichero se abre autom-
ticamente despus de cargar la
investigacin, la instruccin IO:File
Open en la rutina Main no es
necesaria.

El archivo se cierra automticamente
cuando se termina la investigacin.
(Se puede aadir cdigo para cerrar
explcitamente el archivo con una
instruccin IO:File Close basndose
en algunas condiciones, como el
nmero de pasadas por el programa,
una condicin de error, etc.).


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
106

7 7. .7 7. . M Mo on ni it to or r a an nd d R Re ep po or rt te er r
Las ventanas Monitor y Reporter muestran informacin de la ejecucin
del programa.

Ventana Monitor
Muestra informacin en tiempo de ejecucin, tal como mensajes de alerta,
errores y tiempos de proceso. Para ver el Monitor, seleccione ViewMonitor
del men principal.

A continuacin mostramos las funcionalidades de la ventana monitor:













Puede seleccionar para ver
solamente la informacin que es
de su inters.


Observar tiempos de ejecucin le puede ayudar a ver las limitaciones en el
proceso realizado.
Abrir /
Cerrar
reporting
Limpiar
Monitor
display
Guardar
contenido
en archivo
Seleccionar
opciones
visualizacin
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
107

Ventana Reporter

Reporter es una ventana de texto donde puede escribir con la instruccin
IO:Reporter Print. Para mostrar el Reporter, seleccione ViewReporter del
men principal.







En este ejemplo, el rea de cada
objeto encontrado por el algoritmo
Connectivity se escribe en el
Reporter dentro del bucle While.
La instruccin IO:Reporter Print
escribe una lnea seguida por un
salto de lnea.

Cuando se define una cadena de caracteres a escribir, si la variable lleva
corchetes [ ] significa que se imprimir el valor de la variable. No se puede
imprimir la instruccin readings, solo se pueden imprimir variables.

IO:Reporter Clear borra el panel Reporter.








Borrar
contenido
Guardar contenido en
un Archivo
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
108
7 7. .8 8. . D De ep pu ur ra ac ci i n n ( (D De eb bu ug gg gi in ng g) )

Cuando se desarrolla y prueba una investigacin, es deseable necesario en
muchos casos - ir paso a paso en la ejecucin del programa, o muy
lentamente, para encontrar la fuente de un posible problema de programacin.

Se pueden utilizar distintas opciones del debug de Sherlock, como por ejemplo
breakpoints, modo slow, y otras opciones de ejecucin.









7 7. .8 8. .1 1. . E Ej je ec cu uc ci i n n e en n M Mo od do o p pa as so o a a p pa as so o

Hacer clic en el botn single-step.
Hacer clic en el botn run once.
Hacer clic repetidamente en el botn single instruction para ejecutar
una lnea cada vez.

7 7. .8 8. .2 2 E Ej je ec cu uc ci i n n e en n M Mo od do o r ra al le en nt ti iz za ad do o

Hacer clic en el botn slow down.
Hacer clic una vez en el botn run once.

La investigacin se ejecuta una vez a velocidad lenta. Es ms fcil ver la
actualizacin de los paneles Watch, Variables, Monitor, y Reporter.

Modo ejecucin
paso a paso
Ejecutar
una sola
instruccin
Resaltar
instrucciones
ejecutadas
Ralentizar la
ejecucin
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
109
(En ambos modos, paso a paso y lento, haciendo un clic en el botn run
continuously tiene el mismo efecto que hacer clic en el botn run once; la
investigacin se ejecuta una sola vez.)

7 7. .8 8. .3 3. . M Mo od do o d de e I In ns st tr ru uc cc ci io on ne es s R Re es sa al lt ta ad da as s
Hacer clic en el botn highlight.
Hacer clic en el botn run once o run continuously.

La investigacin se ejecutar a velocidad normal, pero las instrucciones se
resaltarn cuando se ejecuten. (Las instrucciones se resaltan por defecto en
modo paso simple, lento y modo breakpoint.)

7 7. .8 8. .4 4. . B Br re ea ak kp po oi in nt ts s

Un breakpoint marca una instruccin en la que la ejecucin se para cuando
llega a ella.

Para aadir un
breakpoint, hay que
hacer clic derecho
en la instruccin, y
hacer clic en el
men desplegable
Toggle Breakpoint.

Se marca el
breakpoint con un
punto rojo.


Cuando se hace clic en el botn Run once o Run continuously, el programa
se ejecuta hasta el primer breakpoint. La investigacin se pone
automticamente en modo paso a paso, y los botones Run once y Run
continuously se desactivan. Para continuar la ejecucin hasta el prximo
breakpoint, se tiene que volver a hacer clic en el botn single step. Para
ejecutar una instruccin cada vez, haga clic en el botn single instruction.

Para borrar un breakpoint, es necesario hacer clic otra vez en Toggle
Breakpoint, o hacer clic en Remove all Breakpoints.

Se pueden tener tantos breakpoints en un programa como se desee.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
110

Para finalizar la ejecucin mientras se est en estado debug, es suficiente con
hacer clic en el botn Abort.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
111
7 7. .9 9. . I Im m g ge en ne es s

En Sherlock podemos trabajar de distinta forma con las fuentes de imagen.

Podemos utilizar una imagen capturada previamente y que tengamos
guardada en el disco duro. Para ello deberemos marcar la casilla de File y
buscar la imagen en nuestro ordenador.

Esto nos cargar una imagen sobre la que podremos trabajar con Sherlock sin
ningn tipo de limitacin.


Otra posibilidad es
trabajar con una
secuencia de im-
genes, de forma que
podamos simular el
funcionamiento del
programa de forma
automtica.

Para ello deberemos
marcar la casilla
Sequence y loca-
lizar en el ordenador
la secuencia de
condiciones de
imagen requerida.




En el caso de que deseemos capturar imagen directamente desde un hardware
de visin, en primer lugar, dependiendo del hardware, deberemos utilizar un
archivo u otro para configurar la cmara. Una vez tengamos configurada la
cmara con la plataforma adecuada, obtendremos un archivo TXT. En el caso
de los sistemas basados en IFC y un archivo ccf en los sistemas basados en
SAPERA.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
112
Una vez tengamos estos archivos de configuracin ya creados, deberemos ir a
la opcin Sherlock/options/adquisition del men principal y cuando hagamos
clic en acquisition se abrir la siguiente ventana, y para acceder al hardware
debemos seguir los siguientes pasos:


Paso 1. En primer lugar se
debe habilitar configure
driver loading poniendo a
Enabled la plataforma con
la que hemos configurado
las cmaras.

Paso 2. Una vez realizado
este cambio, debemos
especificar dnde se
encuentra el fichero en
Driver configuracin.

Con esto ya tendremos
seleccionada la cmara
con la que deseamos
trabajar.

Paso 3. En esta misma
ventana podremos
configurar como deseamos
tener las entradas/salidas
digitales al iniciar el equipo.

Para modificar cualquier
salida tan solo deberemos
cambiar el Output que
deseemos.



Si volvemos al men options de la imagen, observaremos que adems de las
ya mencionadas camera, file y sequence existen tres opciones ms:

Img Windows:

Con esta opcin podr seleccionar cualquier imagen previamente creada en
el programa Sherlock, y en el caso que sea de color, trabajar
individualmente con cada canal RGB. De la misma forma, podremos hacer
configuraciones avanzadas como pasarla a Mono, coger solo la intensidad o
trabajar en otro espacio de color como son el YUV32 o el YUBCR32.

Composed:

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
113
Composed nos permite cambiar los canales tanto de RGB, YUV32 o
YURBCR32 de orden y modificar la imagen. Esto nos puede ser de gran
utilidad con tarjetas no convencionales que gestionen de forma distinta los
canales RGB.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
114

7 7. .1 10 0. . P Pr ro og ga am ma ac ci i n n c co on n J Ja av va aS Sc cr ri ip pt t

JavaScript es un lenguaje scripting, desarrollado por Netscape, que permite a
los autores de Web disear pginas interactivas. Auque comparte muchas de
las estructuras del lenguaje Java, ha sido desarrollado independientemente.
JavaScrip es ms fcil de utilizar que Java, y suficientemente potente para los
requerimientos de nuestros programas. JavaScript es un lenguaje abierto que
puede utilizar cualquiera sin necesidad de comprar una licencia.

En una investigacin Sherlock, un mdulo de cdigo JavaScript puede
utilizarse para realizar tareas que el cdigo nativo de Sherlock no puede
realizar fcilmente, o que simplemente no puede realizar en absoluto.

Para aadir un modulo JavaScript a un programa, hacer clic en el botn
Create script en la barra de herramientas de Program.






Hacer doble clic en el botn izquierdo en el
nombre del mdulo del programa para
visualizar el cuadro de dilogo.

Para renombrar un mdulo hacer clic
izquierdo una vez, esperar brevemente y
hacer clic izquierdo de nuevo.


Con este proceso aparecer la siguiente ventana de configuracin.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
115



El lenguaje JavaScript incluye todas las estructuras tpicas de programacin:
For, While, Do/While, If, If./Else, Switch. Existen adems numerosos objetos
con propiedades y mtodos: Math, Number, Vars, System, Sherlock, etc.

Para aadir parmetros a la ventana de cdigo, se puede escribir sobre ella o
arrastrar desde la ventana Predefined Items. Cuando se aade un objeto y se
escribe un punto (.), las propiedades y mtodos del objeto se muestran en la
lista desplegable.

Por ejemplo, a las variables de Sherlock se accede desde el objeto Vars. En el
cuadro de dilogo edit que se muestra a continuacin, la variable Sherlock
intActiveShift puede accederse como Vars.intActiveShift.

La ventana cdigo
Las variables de Sherlock a las que
se tiene acceso en JavaScript.
Los parmetros JavaScript que
puede aadir al cdigo.
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
116
Si se escribe Vars. (con el punto) en
la ventana, las variables se muestran
en una lista desplegable.
Si arrastra Vars desde la lista
Predefined items a la ventana code,
y despus se escribe el punto, se
mostrar la misma lista.
Si arrastra una variable desde la
ventana variable, Vars. Automtica-
mente estar pendiente.



Ejemplo:

Este cdigo JavaScript
busca la hora actual (a
partir del objeto Date()), y
determina que turno de
ocho horas est traba-
jando. La variable
Sherlock intActiveShift
adopta el valor 1, 2 o 3, de
acuerdo con el resultado
obtenido.


:
Un modulo JavaScript solo tiene acceso a variables Sherlock, no a
readings.
Una investigacin Sherlock no puede acceder a variables JavaScript.
Un modulo JavaScript no puede llamar a una subrutina Sherlock,
tampoco interactuar de otra forma con una investigacin (excepto
leyendo y escribiendo variables y llamando a Sherlock.Monitor).
Archivos abiertos y manipulados por Sherlock con la instruccin IO:File
no pueden accederse simultneamente con operaciones por el
JavaScript System (FileClose, FileAppend, etc.), y viceversa.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
117
Para ms informacin acerca de JavaScript, haga clic en Start
Programs ipd, a DALSA Coreco group Sherlock JavaScript Help.


visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
118

8 8. . C Co on nt tr ro ol le es s A Ac ct ti iv ve eX X

8 8. .1 1. . I In nt tr ro od du uc cc ci i n n

En muchas de las aplicaciones Sherlock, se crea un interface grfico mediante
entornos de programacin VB, C++, C#. La mayora de las veces, las GUI de
Sherlock son de VB, C++ o C# con ellas se controlan los procesos de Sherlock,
apagado / encendido, modificar variables / parmetros / valores, mostrar
resultados e imgenes.

En este documento se muestra como crear una GUI para Sherlock 7.

Si ha desarrollado una interfase grfica para Sherlock 6, le sern muy
familiares la mayora de consejos y ejemplos que a continuacin explicaremos.
En general la arquitectura y la mayora de los componentes permanecen
inalterados.

La mayora de llamadas de la antigua API estn contempladas en la nueva API.
La mayora de los ejemplos estn hechos para desarrollar una GUI usando
Visual Basic.


8 8. .1 1. .1 1. . E Ej je em mp pl lo os s

El directorio de ejemplos contiene proyectos con Visual Studio para realizar una
Interface grfica a medida del usuario. Podremos encontrar tambin ejemplos
con VB6, VB7 y C#.

Nota: La mayora de los archivos de los proyectos estn en solo lectura, para
poder modificarlos, tendremos que modificar este atributo del archivo.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
119

8 8. .2 2. . A Ar rq qu ui it te ec ct tu ur ra a G GU UI I d de e u us su ua ar ri io o

Una GUI tpica de Sherlock 7 estar formada por dos controles:

1. Sherlock Engine IpeEngCtrl module
2. Sherlock Image control IpeDspCtrl

IpeEngCtrl es el motor de procesamiento de la interfase de Sherlock,
permitiendo cargar programas, encender o parar la investigacin, lectura y
escritura de variables, etc.

IpeDspCtrl es el control que va a permitir visualizar imgenes de Sherlock.

IpeDspCtrl proporciona todas las posibilidades del display como zoom,
desplazarse por la imagen y los eventos creados por el ratn.




Cystom GUI application (VB/C#/C++ or any language supporting COM/ActiveX)
IpeEngCtrl
Program
IpeDspCtrl
IpeDspCtrl
IpeDspCtrl
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
120

8 8. .3 3. . I Im mp pl le em me en nt ta ac ci i n n d de e l la a G GU UI I

Hay un pequeo nmero de funciones que son llamadas en cada GUI.

Las funciones que se deben utilizar en todos los GUIs son las siguientes:

Inicializacin de Sherlock.
Finalizacin de Sherlock.
Carga del programa de Sherlock.
Creacin de ventanas de demostracin y conexin de ellos a ventanas
de imagen.
Lectura y escritura de variables.


Paso 1. Cargar la aplicacin.

Para cargar la aplicacin emplearemos el siguiente cdigo (ejemplo VB.net)

Private Sub CreateSherlockEngine()
Dim IpeEngCtrlType As Type
IpeEngCtrlType = Type.GetTypeFromProgID("IpeEngCtrl.Engine")
objIpeEngCtrl = Activator.CreateInstance(IpeEngCtrlType)
if objIpeEngCtrl.EngInitialize()
End Sub


Paso 2. Finaliza la aplicacin.

Para finalizar la aplicacin emplearamos el siguiente cdigo (ejemplo VB.net)

Private Sub HaltSherlockEngine(ByRef objEng As IpeEngCtrlLib.Engine)
objEng.InvModeSet(
IpeEngCtrlLib.I_MODE.I_EXE_MODE_HALT_AFTER_ITERATIO
N)

Dim mode As IpeEngCtrlLib.I_MODE
Do
objEng.InvModeGet(mode)
Application.DoEvents()
Loop While (mode <> IpeEngCtrlLib.I_MODE.I_EXE_MODE_HALT)
End Sub

La llamada a Application.DoEvents() es crucial, porque adems de parar a
Sherlock Engine, podemos querer llamar el GUI, y si estas retrollamadas no
son procesadas en el momento adecuado, nos va a llevar a un callejn sin
salida.

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
121
Paso 3. Cargar el programa de Sherlock

Cuando se llama a Sherlock Engine para cargar un nuevo programa, la
aplicacin tiene que estar parada (estado de HALT). Si la ruta a un programa
no esta especificada, Sherlock por defecto intentar cargar el programa del
directorio:

<SP7HOME>\Programs.

Para cargar el programa es necesario el siguiente cdigo:

objIpeEngCtrl.InvLoad("Simple0.ivs")


Paso 4. Visualizacin de la imagen

Para visualizar una imagen es necesario llamar al siguiente cdigo

'connect display
AxIpeDspCtrl1.ConnectEngine(objIpeEngCtrl.GetEngineObj())
AxIpeDspCtrl1.ConnectImgWindow("imgA")

objIpeEngCtrl es el controlador de Sherlock.
ImgA es el nombre de Sherlock Image, la Ventana que existe en el programa
de Sherlock previamente.


Paso 5. Escritura y lectura de variables

Las variables constituyen una parte "de la cola" que une (conecta) las partes
diferentes del sistema. La GUI utiliza variables para recuperar resultados de
tratamiento y ajustar parmetros. Cualquier resultado y parmetros que una
GUI manipule / lea, tienen que estar unidas (conectadas) a variables. Los
resultados y parmetros de tratamiento pueden ser recuperados y ajustados
pero siempre se deben unir a variables previamente definidas.

Para la lectura/escritura de variables se tiene que emplear el siguiente cdigo:

reading
objIpeEngCtrl.VarGetDouble("varA", v)

setting
objIpeEngCtrl.VarSetDouble("varA", 0.0)






visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
122
Con estos pasos realizados tendremos el Sherlock en modo ejecucin en una
ventana como muestra la siguiente imagen:

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
123
A AD DE EN ND DU UM M

F Fu un nc ci io on ne es s a ac cc ce es si ib bl le es s d de es sd de e e el l c co on nt tr ro ol l G GU UI I. .

La siguiente lista muestra la totalidad de las funciones accesibles desde el
interface grfico:

Public Member Functions
HRESULT GetEngineObj ([out, retval] LONG *pnEngObj)
HRESULT EngInitialize ([out, retval] I_ENG_ERROR *pRet)
HRESULT EngTerminate ([out, retval] I_ENG_ERROR *pRet)
HRESULT InvSave ([in] BSTR bstrFile,[out, retval] I_ENG_ERROR *pRet)
HRESULT InvLoad ([in] BSTR bstrFile,[out, retval] I_ENG_ERROR *pRet)
HRESULT InvModeSet ([in] I_MODE nMode,[out, retval] I_ENG_ERROR
*pRet)
HRESULT InvModeGet ([out] I_MODE *pnMode,[out, retval] I_ENG_ERROR
*pRet)
HRESULT CamCountGet ([out] long *pnVal,[out, retval] I_ENG_ERROR *pRet)
HRESULT CamSizeGet (long nCam,[out] long *pnWidth,[out] long
*pnHeight,[out, retval] I_ENG_ERROR *pRet)
HRESULT CamAcqAbort ([out, retval] I_ENG_ERROR *pRet)
HRESULT DigOutIOCountGet ([out] long *pnVal,[out, retval] I_ENG_ERROR
*pRet)
HRESULT DigOutIOSet (long nChannel, long nVal,[out, retval] I_ENG_ERROR
*pRet)
HRESULT DigOutIOGet (long nChannel,[out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT DigOutIOPulse (long nChannel, BOOL bHighPulse, long
nPulseWidth,[out, retval] I_ENG_ERROR *pRet)
HRESULT DigOutIOAsyncPulse (long nChannel, BOOL bHighPulse, long
nPulseWidth,[out, retval] I_ENG_ERROR *pRet)
HRESULT DigOutIOScheduleAsyncPulse (long nChannel, BOOL bHighPulse,
long nDelay, long nPulseWidth,[out, retval] I_ENG_ERROR *pRet)
HRESULT DigInIOCountGet ([out] long *pnVal,[out, retval] I_ENG_ERROR
*pRet)
HRESULT DigInIOGet (long nChannel,[out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT DigInIOWaitForState (long nChannel, BOOL bVal, long
nTimeout,[out] BOOL *bTimeoutDetected,[out, retval]
I_ENG_ERROR *pRet)
HRESULT DigInIOWaitForPulse (long nChannel, BOOL bHighPulse, long
nTimeout,[out] BOOL *bTimeoutDetected,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarSetDouble ([in] BSTR bstrName,[in] double val,[out, retval]
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
124
I_ENG_ERROR *pRet)
HRESULT VarGetDouble ([in] BSTR bstrName,[out] double *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarSetBool ([in] BSTR bstrName,[in] VARIANT_BOOL val,[out,
retval] I_ENG_ERROR *pRet)
HRESULT VarGetBool ([in] BSTR bstrName,[out] VARIANT_BOOL *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT VarSetString ([in] BSTR bstrName,[in] BSTR val,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarGetString ([in] BSTR bstrName,[out] BSTR *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarSetPoint ([in] BSTR bstrName,[in, out]I_POINT *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarGetPoint ([in] BSTR bstrName,[out] I_POINT *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarSetLine ([in] BSTR bstrName,[in, out]I_LINE *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarGetLine ([in] BSTR bstrName,[out] I_LINE *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarSetDoubleArray ([in] BSTR bstrName,[in]
SAFEARRAY(double)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarGetDoubleArray ([in] BSTR bstrName,[out]
SAFEARRAY(double)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarSetBoolArray ([in] BSTR bstrName,[in]
SAFEARRAY(VARIANT_BOOL)*paval,[out, retval] I_ENG_ERROR
*pRet)
HRESULT VarGetBoolArray ([in] BSTR bstrName,[out]
SAFEARRAY(VARIANT_BOOL)*paval,[out, retval] I_ENG_ERROR
*pRet)
HRESULT VarSetStringArray ([in] BSTR bstrName,[in]
SAFEARRAY(BSTR)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarGetStringArray ([in] BSTR bstrName,[out]
SAFEARRAY(BSTR)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarSetPointArray ([in] BSTR bstrName,[in]
SAFEARRAY(I_POINT)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarGetPointArray ([in] BSTR bstrName,[out]
SAFEARRAY(I_POINT)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarSetLineArray ([in] BSTR bstrName,[in]
SAFEARRAY(I_LINE)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarGetLineArray ([in] BSTR bstrName,[out]
SAFEARRAY(I_LINE)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT SoCamSnap ([in] BSTR bstrSo,[out, retval] I_ENG_ERROR *pRet)
HRESULT SoGetSize ([in] BSTR bstrSo,[out] long *pnWidth,[out] long
*pnHeight,[out, retval] I_ENG_ERROR *pRet)
HRESULT SoLiveSet ([in] BSTR bstrSo, BOOL bEnable,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoCameraSet ([in] BSTR bstrSo, long nCam,[out, retval]
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
125
I_ENG_ERROR *pRet)
HRESULT SoCameraGet ([in] BSTR bstrSo,[out] long *pnCam,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoImageSave ([in] BSTR bstrSo, BSTR bstrFile,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoImageLoad ([in] BSTR bstrSo, BSTR bstrFile,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoSourceGet ([in] BSTR bstrSo,[out] BSTR *pbstrSource,[out,
retval] I_ENG_ERROR *pRet)
HRESULT SoTriggerSet ([in] BSTR bstrSo, BOOL bExtTrig,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoTriggerGet ([in] BSTR bstrSo,[out] BOOL *pbExtTrig,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoTimeoutSet ([in] BSTR bstrSo, long nTimeoutMs,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoTimeoutGet (BSTR bstrSo,[out] long *pnTimeoutMs,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiMove ([in] BSTR bstrRoi, long nDx, long nDy,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiCoordMove ([in] BSTR bstrRoi, long nCoordIndex, long nDx,
long nDy,[out, retval] I_ENG_ERROR *pRet)
HRESULT RoiCoordGet ([in] BSTR bstrRoi, long nCoordIndex,[out] long
*pnCoord0,[out] long *pnCoord1,[out, retval] I_ENG_ERROR *pRet)
HRESULT RoiCoordSet ([in] BSTR bstrRoi, long nCoordIndex, long nCoord0,
long nCoord1,[out, retval] I_ENG_ERROR *pRet)
HRESULT RoiCoordArrayGet ([in] BSTR bstrRoi,[out]
SAFEARRAY(long)*psanCoordsX,[out]
SAFEARRAY(long)*psanCoordsY,[out, retval] I_ENG_ERROR
*pRet)
HRESULT RoiCoordArraySet ([in] BSTR bstrRoi,[in, out]
SAFEARRAY(long)*psanCoordsX,[in, out]
SAFEARRAY(long)*psanCoordsY,[out, retval] I_ENG_ERROR
*pRet)
HRESULT RoiShowAnnotGet ([in] BSTR bstrRoi,[out] BOOL *pbFlag,[out,
retval] I_ENG_ERROR *pRet)
HRESULT RoiShowAnnotSet ([in] BSTR bstrRoi, BOOL bFlag,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiShowOutlineGet ([in] BSTR bstrRoi,[out] BOOL *pbFlag,[out,
retval] I_ENG_ERROR *pRet)
HRESULT RoiShowOutlineSet ([in] BSTR bstrRoi, BOOL bFlag,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiSelectedGet ([in] BSTR bstrRoi,[out] BOOL *pbFlag,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiSelectedSet ([in] BSTR bstrRoi, BOOL bFlag,[out, retval]
I_ENG_ERROR *pRet)

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
126
Create/Terminate engine

Functions
HRESULT IEngine::EngInitialize ([out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::EngTerminate ([out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::GetEngineObj ([out, retval] LONG *pnEngObj)

Function Documentation
HRESULT IEngine::EngInitialize ( [out, retval] I_ENG_ERROR * pRet )
[inherited]

EngInitialize Initializes the Engine.
Parameters:
pRet updated with I_OK on success
HRESULT IEngine::EngTerminate ( [out, retval] I_ENG_ERROR * pRet )
[inherited]

EngTerminate Terminats the Engine
Parameters:
pRet updated with I_OK on success
HRESULT IEngine::GetEngineObj ( [out, retval] LONG * pnEngObj )
[inherited]

GetEngineObj
This function is only used to connect Display OCX to engine when develiping
custom GUI
Returns:
Internal engine handle


Program management

Functions
HRESULT IEngine::InvLoad ([in] BSTR bstrFile,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::InvModeGet ([out] I_MODE *pnMode,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::InvModeSet ([in] I_MODE nMode,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::InvSave ([in] BSTR bstrFile,[out, retval] I_ENG_ERROR
*pRet)
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
127

Function Documentation
HRESULT IEngine::InvLoad ( [in] BSTR bstrFile,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

InvLoad Load program. Program name can contain full path, or just file name.
In the latter case engine will look for specified file in its program directory
Parameters:
bstrFile file name
pRet updated with I_OK on success
See also:
InvModeSet
HRESULT IEngine::InvModeGet ( [out] I_MODE * pnMode,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

InvModeGet Get engine run mode.
Parameters:
pnMode current engine run mode
pRet updated with I_OK on success
See also:
InvModeSet
HRESULT IEngine::InvModeSet ( [in] I_MODE nMode,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

InvModeSet Set engine run mode. Following modes are supported:
I_EXE_MODE_ONCE - run program once I_EXE_MODE_CONT - run
program continuously I_EXE_MODE_CALIB- execute subroutines marked
with calibration flag I_EXE_MODE_HALT - abort program immediately at any
instruction I_EXE_MODE_HALT_AFTER_ITERATION - halt running after
finishing current program iteration
When requesting I_EXE_MODE_HALT engine may halt after returning from
this call. It is necessary to loop processing events and wait until InvModeGet
returns I_EXE_MODE_HALT
Parameters:
nMode new run mode
pRet updated with I_OK on success
See also:
InvModeGet
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
128
HRESULT IEngine::InvSave ( [in] BSTR bstrFile,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

InvSave Save program
Parameters:
bstrFile file name
pRet updated with I_OK on success
Camera management


Functions
HRESULT IEngine::CamAcqAbort ([out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::CamCountGet ([out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::CamSizeGet (long nCam,[out] long *pnWidth,[out] long
*pnHeight,[out, retval] I_ENG_ERROR *pRet)

Function Documentation
HRESULT IEngine::CamAcqAbort ( [out, retval] I_ENG_ERROR * pRet )
[inherited]

CamAcqAbort Abort camera acquisiton; Usefull to abort pending hardware
trigger acquisiton. All abort all penging acquisitions.
Parameters:
pRet updated with I_OK on success
HRESULT IEngine::CamCountGet ( [out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

CamCountGet Get number of cameras on the system
Parameters:
pnVal updated with number of cameras
pRet updated with I_OK on success
HRESULT IEngine::CamSizeGet ( long nCam,
[out] long * pnWidth,
[out] long * pnHeight,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
129

CamSizeGet Get given camera sensor size
Parameters:
nCam zero based camera index
pnWidth updated with camera width (pixels)
pnHeight updated with camera height (pixels)
pRet updated with I_OK on success


Digital IO management


Functions
HRESULT IEngine::DigInIOCountGet ([out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigInIOGet (long nChannel,[out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigInIOWaitForPulse (long nChannel, BOOL bHighPulse,
long nTimeout,[out] BOOL *bTimeoutDetected,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigInIOWaitForState (long nChannel, BOOL bVal, long
nTimeout,[out] BOOL *bTimeoutDetected,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOAsyncPulse (long nChannel, BOOL bHighPulse,
long nPulseWidth,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOCountGet ([out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOGet (long nChannel,[out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOPulse (long nChannel, BOOL bHighPulse, long
nPulseWidth,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOScheduleAsyncPulse (long nChannel, BOOL
bHighPulse, long nDelay, long nPulseWidth,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOSet (long nChannel, long nVal,[out, retval]
I_ENG_ERROR *pRet)

Function Documentation
HRESULT IEngine::DigInIOCountGet ( [out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
130

DigInIOCountGet Returns the number of inputs avialable.
Parameters:
pnVal pointer to a variable receiving number of inputs
pRet updated with I_OK on success
HRESULT IEngine::DigInIOGet ( long nChannel,
[out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigInIOGet Returns current state of the given output.
Parameters:
nChannel input index
pnVal pointer to a variable receiving current input state
pRet updated with I_OK on success
HRESULT IEngine::DigInIOWaitForPulse ( long nChannel,
BOOL bHighPulse,
long nTimeout,
[out] BOOL * bTimeoutDetected,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigInIOWaitForPulse Waits until a given input pulses in a requested way
Parameters:
nChannel input index

bHighPulse pulse we will wait for (TRUE: high->low, FALSE:
low->high)

nTimeout maximum wait time in miliseconds (-1 for an
infinite wait)

bTimeoutDetected set to TRUE is function timeout was detected
before detecting requested state
pRet updated with I_OK on success
HRESULT IEngine::DigInIOWaitForState ( long nChannel,
BOOL bVal,
long nTimeout,
[out] BOOL * bTimeoutDetected,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigInIOWaitForState Waits until a given input enters requested state
Parameters:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
131
nChannel input index
bVal input state that we will wait for

nTimeout maximum wait time in miliseconds (-1 for an
infinite wait)

bTimeoutDetected set to TRUE is function timeout was detected
before detecting requested state
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOAsyncPulse ( long nChannel,
BOOL bHighPulse,
long nPulseWidth,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigOutIOAsyncPulse Pulse a digital output
Note:
This is a asynchronous pulse, Sherlock investigation will continue
execution after starting a pulse. The actual pulse will be performed in
another thread of execution.
See also:
DigOutIOPulse DigOutIOScheduleAsyncPulse
Parameters:
nChannel channel index

bHighPulse pulse polarity (TRUE for high-sleep-low "_-_", false for
low-sleep-high "-_-")
nPulseWidth - pulse width in miliseconds
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOCountGet ( [out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigOutIOCountGet Get number of digital outputs
Parameters:
pnVal updated with output count
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOGet ( long nChannel,
[out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigOutIOGet Gets digital output
Parameters:
nChannel channel index
pnVal pointer to a variable receiving current output value
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
132
pnVal pointer to a variable receiving current output value
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOPulse ( long nChannel,
BOOL bHighPulse,
long nPulseWidth,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigOutIOPulse Pulse a digital output
Note:
This is a synchronous pulse, Sherlock investigation will pause until the
pulse is finished.
See also:
DigOutIOAsyncPulse
Parameters:
nChannel channel index

bHighPulse pulse polarity (TRUE for high-sleep-low "_-_", false for
low-sleep-high "-_-")
nPulseWidth - pulse width in miliseconds
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOScheduleAsyncPulse ( long nChannel,
BOOL bHighPulse,
long nDelay,
long nPulseWidth
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigOutIOScheduleAsyncPulse Schedule a digital output pulse
Note:
This function will schedule a synchronous pulse that will start a
"nDelay" number of miliseconds from the moment call is executed.
Sherlock investigation will continue execution after starting a pulse. The
actual pulse will be performed in another thread of execution.
See also:
DigOutIOPulse DigOutIOAsyncPulse
Parameters:
nChannel channel index

bHighPulse pulse polarity (TRUE for high-sleep-low "_-_", false for
low-sleep-high "-_-")
nDelay - delay before starting the pulse
nPulseWidth - pulse width in miliseconds
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOSet ( long nChannel,
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
133
long nVal,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

DigOutIOSet Set a digital output
Parameters:
nChannel channel index
nVal new value (0 or 1)
pRet updated with I_OK on success


Variable management

Functions
HRESULT IEngine::VarGetBool ([in] BSTR bstrName,[out] VARIANT_BOOL
*pval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetBoolArray ([in] BSTR bstrName,[out]
SAFEARRAY(VARIANT_BOOL)*paval,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::VarGetDouble ([in] BSTR bstrName,[out] double *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetDoubleArray ([in] BSTR bstrName,[out]
SAFEARRAY(double)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetLine ([in] BSTR bstrName,[out] I_LINE *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetLineArray ([in] BSTR bstrName,[out]
SAFEARRAY(I_LINE)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetPoint ([in] BSTR bstrName,[out] I_POINT *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetPointArray ([in] BSTR bstrName,[out]
SAFEARRAY(I_POINT)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetString ([in] BSTR bstrName,[out] BSTR *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetStringArray ([in] BSTR bstrName,[out]
SAFEARRAY(BSTR)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetBool ([in] BSTR bstrName,[in] VARIANT_BOOL
val,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetBoolArray ([in] BSTR bstrName,[in]
SAFEARRAY(VARIANT_BOOL)*paval,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::VarSetDouble ([in] BSTR bstrName,[in] double val,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetDoubleArray ([in] BSTR bstrName,[in]
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
134
SAFEARRAY(double)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetLine ([in] BSTR bstrName,[in, out]I_LINE *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetLineArray ([in] BSTR bstrName,[in]
SAFEARRAY(I_LINE)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetPoint ([in] BSTR bstrName,[in, out]I_POINT
*pval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetPointArray ([in] BSTR bstrName,[in]
SAFEARRAY(I_POINT)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetString ([in] BSTR bstrName,[in] BSTR val,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetStringArray ([in] BSTR bstrName,[in]
SAFEARRAY(BSTR)*paval,[out, retval] I_ENG_ERROR *pRet)

Function Documentation
HRESULT IEngine::VarGetBool ( [in] BSTR bstrName,
[out] VARIANT_BOOL * pval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetBool
Parameters:
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT IEngine::VarGetBoolArray ( [in] BSTR bstrName,
[out] SAFEARRAY(VARIANT_BOOL)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetBoolArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarGetDouble ( [in] BSTR bstrName,
[out] double * pval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetDouble
Parameters:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
135
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT IEngine::VarGetDoubleArray ( [in] BSTR bstrName,
[out] SAFEARRAY(double)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetDoubleArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarGetLine ( [in] BSTR bstrName,
[out] I_LINE * pval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetLine
Parameters:
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT IEngine::VarGetLineArray ( [in] BSTR bstrName,
[out] SAFEARRAY(I_LINE)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetLineArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarGetPoint ( [in] BSTR bstrName,
[out] I_POINT * pval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetPoint
Parameters:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
136
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT IEngine::VarGetPointArray ( [in] BSTR bstrName,
[out] SAFEARRAY(I_POINT)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetPointArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarGetString ( [in] BSTR bstrName,
[out] BSTR * pval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetString
Parameters:
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT IEngine::VarGetStringArray ( [in] BSTR bstrName,
[out] SAFEARRAY(BSTR)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarGetStringArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetBool ( [in] BSTR bstrName,
[in] VARIANT_BOOL val,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetBool
Parameters:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
137
bstrName variable name
val new value
pRet updated with I_OK on success
HRESULT IEngine::VarSetBoolArray ( [in] BSTR bstrName,
[in] SAFEARRAY(VARIANT_BOOL)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetBoolArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetDouble ( [in] BSTR bstrName,
[in] double val,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetDouble
Parameters:
bstrName variable name
val new value
pRet updated with I_OK on success
HRESULT IEngine::VarSetDoubleArray ( [in] BSTR bstrName,
[in] SAFEARRAY(double)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetDoubleArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetLine ( [in] BSTR bstrName,
[in, out] I_LINE * pval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetLine
Parameters:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
138
bstrName variable name
pval pointer to new value
pRet updated with I_OK on success
HRESULT IEngine::VarSetLineArray ( [in] BSTR bstrName,
[in] SAFEARRAY(I_LINE)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetLineArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetPoint ( [in] BSTR bstrName,
[in, out] I_POINT * pval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetDouble
Parameters:
bstrName variable name
pval pointer to new value
pRet updated with I_OK on success
HRESULT IEngine::VarSetPointArray ( [in] BSTR bstrName,
[in] SAFEARRAY(I_POINT)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetPointArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetString ( [in] BSTR bstrName,
[in] BSTR val,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetString
Parameters:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
139
bstrName variable name
val new value
pRet updated with I_OK on success
HRESULT IEngine::VarSetStringArray ( [in] BSTR bstrName,
[in] SAFEARRAY(BSTR)* paval,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

VarSetStringArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success

Image Window management

Functions
HRESULT IEngine::SoCameraGet ([in] BSTR bstrSo,[out] long *pnCam,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoCameraSet ([in] BSTR bstrSo, long nCam,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::SoCamSnap ([in] BSTR bstrSo,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::SoGetSize ([in] BSTR bstrSo,[out] long *pnWidth,[out] long
*pnHeight,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoImageLoad ([in] BSTR bstrSo, BSTR bstrFile,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::SoImageSave ([in] BSTR bstrSo, BSTR bstrFile,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::SoLiveSet ([in] BSTR bstrSo, BOOL bEnable,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::SoSourceGet ([in] BSTR bstrSo,[out] BSTR
*pbstrSource,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoTimeoutGet (BSTR bstrSo,[out] long *pnTimeoutMs,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoTimeoutSet ([in] BSTR bstrSo, long nTimeoutMs,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoTriggerGet ([in] BSTR bstrSo,[out] BOOL
*pbExtTrig,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoTriggerSet ([in] BSTR bstrSo, BOOL bExtTrig,[out,
retval] I_ENG_ERROR *pRet)

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
140
Function Documentation
HRESULT IEngine::SoCameraGet ( [in] BSTR bstrSo,
[out] long * pnCam,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoCameraGet
Parameters:
bstrSo image window name (for example "imgA")
pnCam returns current camera
pRet updated with I_OK on success
HRESULT IEngine::SoCameraSet ( [in] BSTR bstrSo,
long nCam,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoCameraSet
Parameters:
bstrSo image window name (for example "imgA")
nCam zero based camera index
pRet updated with I_OK on success
HRESULT IEngine::SoCamSnap ( [in] BSTR bstrSo,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoCamSnap Acquire single image form the image window image source
Parameters:
bstrSo image window name (for example "imgA")
pRet updated with I_OK on success
HRESULT IEngine::SoGetSize ( [in] BSTR bstrSo,
[out] long * pnWidth,
[out] long * pnHeight,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoGetSize Get image size of a given image window
Parameters:
bstrSo image window name (for example "imgA")
pnWidth pointer to a variable receiving width
pnHeight pointer to a variable receiving height
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
141
pRet updated with I_OK on success
HRESULT IEngine::SoImageLoad ( [in] BSTR bstrSo,
BSTR bstrFile,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoImageLoad Sets image window image source to a given file.
Parameters:
bstrSo image window name (for example "imgA")
bstrFile file name
pRet updated with I_OK on success
HRESULT IEngine::SoImageSave ( [in] BSTR bstrSo,
BSTR bstrFile,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoImageSave Saves current image window image to a given file.
Parameters:
bstrSo image window name (for example "imgA")
bstrFile file name
pRet updated with I_OK on success
HRESULT IEngine::SoLiveSet ( [in] BSTR bstrSo,
BOOL bEnable,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoLiveSet Set/reset given image window into a "Live Acquisition" mode "Live
Acquisition" cases continuous image acquisiton when Sherlock Engine is in
HALT mode.
Parameters:
bstrSo image window name (for example "imgA")
bEnable TRUE to set "Live" mode, FALSE to turn it off
pRet updated with I_OK on success
HRESULT IEngine::SoSourceGet ( [in] BSTR bstrSo,
[out] BSTR * pbstrSource,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoSourceGet Returns a string describing given image window's image source
Parameters:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
142
bstrSo image window name (for example "imgA")
pbstrSource returned string
pRet updated with I_OK on success
HRESULT IEngine::SoTimeoutGet ( BSTR bstrSo,
[out] long * pnTimeoutMs,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoTimeoutGet Gets image window hardware acquisition timeout value. If
acquisition takes more this value then time-out error is generated
Parameters:
bstrSo image window name (for example "imgA")
pnTimeoutMs timeout value
pRet updated with I_OK on success
HRESULT IEngine::SoTimeoutSet ( [in] BSTR bstrSo,
long nTimeoutMs,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoTimeoutSet Sets image window hardware acquisition timeout value. If
acquisition takes more this value then time-out error is generated
Parameters:
bstrSo image window name (for example "imgA")
nTimeoutMs new timeout value
pRet updated with I_OK on success
HRESULT IEngine::SoTriggerGet ( [in] BSTR bstrSo,
[out] BOOL * pbExtTrig,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

SoTriggerGet Gets image window hardware trigger state.
Parameters:
bstrSo image window name (for example "imgA")
pbExtTrig trigger state
pRet updated with I_OK on success
HRESULT IEngine::SoTriggerSet ( [in] BSTR bstrSo,
BOOL bExtTrig,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]
SoTriggerSet Set image window hardware trigger state It only affects camera
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
143
image sources.
Parameters:
bstrSo image window name (for example "imgA")
bExtTrig trigger state
pRet updated with I_OK on success

Region Of Interest management

Functions
HRESULT IEngine::RoiCoordArrayGet ([in] BSTR bstrRoi,[out]
SAFEARRAY(long)*psanCoordsX,[out]
SAFEARRAY(long)*psanCoordsY,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::RoiCoordArraySet ([in] BSTR bstrRoi,[in, out]
SAFEARRAY(long)*psanCoordsX,[in, out]
SAFEARRAY(long)*psanCoordsY,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::RoiCoordGet ([in] BSTR bstrRoi, long nCoordIndex,[out]
long *pnCoord0,[out] long *pnCoord1,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::RoiCoordMove ([in] BSTR bstrRoi, long nCoordIndex, long
nDx, long nDy,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiCoordSet ([in] BSTR bstrRoi, long nCoordIndex, long
nCoord0, long nCoord1,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiMove ([in] BSTR bstrRoi, long nDx, long nDy,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiSelectedGet ([in] BSTR bstrRoi,[out] BOOL
*pbFlag,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiSelectedSet ([in] BSTR bstrRoi, BOOL bFlag,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiShowAnnotGet ([in] BSTR bstrRoi,[out] BOOL
*pbFlag,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiShowAnnotSet ([in] BSTR bstrRoi, BOOL bFlag,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiShowOutlineGet ([in] BSTR bstrRoi,[out] BOOL
*pbFlag,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiShowOutlineSet ([in] BSTR bstrRoi, BOOL bFlag,[out,
retval] I_ENG_ERROR *pRet)

Function Documentation
HRESULT IEngine::RoiCoordArrayGet ( [in] BSTR bstrRoi,
[out] SAFEARRAY(long)* psanCoordsX,
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
144
[out] SAFEARRAY(long)* psanCoordsX,
[out] SAFEARRAY(long)* psanCoordsY,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiCoordArrayGet Gets current value of a ROI coordinates.
Parameters:
bstrRoi ROI name
psanCoordsX x values
psanCoordsY y values
pRet updated with I_OK on success
HRESULT IEngine::RoiCoordArraySet ( [in] BSTR bstrRoi,
[in, out] SAFEARRAY(long)* psanCoordsX,
[in, out] SAFEARRAY(long)* psanCoordsY,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiCoordArraySet Sets current values of a ROI coordinates.
Parameters:
bstrRoi ROI name
psanCoordsX x values
psanCoordsY y values
pRet updated with I_OK on success
HRESULT IEngine::RoiCoordGet ( [in] BSTR bstrRoi,
long nCoordIndex,
[out] long * pnCoord0,
[out] long * pnCoord1,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiCoordGet Gets current value of a given ROI coordinate.
Parameters:
bstrRoi ROI name
nCoordIndex coordinate index
pnCoord0 x value
pnCoord1 y value
pRet updated with I_OK on success
HRESULT IEngine::RoiCoordMove ( [in] BSTR bstrRoi,
long nCoordIndex,
long nDx,
long nDy,
[out, retval] I_ENG_ERROR * pRet
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
145
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiCoordMove Moves given ROI coordinate by give x,y
Parameters:
bstrRoi ROI name
nCoordIndex coordinate index
nDx x shift value
nDy x shift value
pRet updated with I_OK on success
HRESULT IEngine::RoiCoordSet ( [in] BSTR bstrRoi,
long nCoordIndex,
long nCoord0,
long nCoord1,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiCoordSet Sets current value of a given ROI coordinate.
Parameters:
bstrRoi ROI name
nCoordIndex coordinate index
nCoord0 x value
nCoord1 y value
pRet updated with I_OK on success
HRESULT IEngine::RoiMove ( [in] BSTR bstrRoi,
long nDx,
long nDy,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiMove Moves given ROI by give x,y
Parameters:
bstrRoi ROI name
nDx x shift value
nDy x shift value
pRet updated with I_OK on success
HRESULT IEngine::RoiSelectedGet ( [in] BSTR bstrRoi,
[out] BOOL * pbFlag,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
146

RoiSelectedGet Gets current state to "ROI Selected"
Parameters:
bstrRoi ROI name
pbFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiSelectedSet ( [in] BSTR bstrRoi,
BOOL bFlag,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiSelectedlineSet Sets current state to "ROI Selected"
Parameters:
bstrRoi ROI name
bFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiShowAnnotGet ( [in] BSTR bstrRoi,
[out] BOOL * pbFlag,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiShowAnnotGet Gets current state to "Show ROI annotations"
Parameters:
bstrRoi ROI name
pbFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiShowAnnotSet ( [in] BSTR bstrRoi,
BOOL bFlag,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiShowAnnotSet Sets current state to "Show ROI annotations"
Parameters:
bstrRoi ROI name
bFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiShowOutlineGet ( [in] BSTR bstrRoi,
[out] BOOL * pbFlag,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
147

RoiShowOutlineGet Gets current state to "Show ROI Outline"
Parameters:
bstrRoi ROI name
pbFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiShowOutlineSet ( [in] BSTR bstrRoi,
BOOL bFlag,
[out, retval] I_ENG_ERROR * pRet
)
[inherited]

RoiShowOutlineSet Sets current state to "Show ROI Outline"
Parameters:
bstrRoi ROI name
bFlag flag
pRet updated with I_OK on success

Control Events

Public Member Functions
HRESULT RunCompleted (void)

Member Function Documentation
HRESULT IpeEngCtrlLib::_IEngineEvents::RunCompleted ( void )

RunCompleted This event is generated every time investigation iteration is
finished. This is good point to retrieve variables etc.

IpeDspCtrl Rererence
All functions


Public Member Functions
void AboutBox ()
void ConnectEngine (LONG pEngine)
LONG ConnectImgWindow (BSTR bstrImgWndName)
void DisconnectEngine (void)
void DisconnectImgWindow (void)
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
148
LONG GetWindow (void)
DOUBLE GetZoom (void)
LONG LoadImage (BSTR bstrFileName)
void SetFrameType (ULONG dwType)
void SetImage (LONG pImage)
void SetZoom (DOUBLE dZoom)
void ShowToolbar (LONG bShow)
LONG UpdateDisplay (void)

Member Function Documentation
void IpeDspCtrlLib::_DIpeDspCtrl::AboutBox ( )

void IpeDspCtrlLib::_DIpeDspCtrl::ConnectEngine ( LONG pEngine )

ConnectEngine Connects SherlockEngine
Parameters:
pEngine pointer to IpeEngCtrl object
LONG IpeDspCtrlLib::_DIpeDspCtrl::ConnectImgWindow ( BSTR bstrImgWndName )

ConnectImgWindow Connects SherlockEngine image window to display
Parameters:

bstrImgWndName name of the image window in currently loaded
program in the IpeEngCtrl object
Returns:
always zero
void IpeDspCtrlLib::_DIpeDspCtrl::DisconnectEngine ( void )
DisconnectEngine Disconnects currently connected IpeEngCtrl onject
void IpeDspCtrlLib::_DIpeDspCtrl::DisconnectImgWindow ( void )

DisconnectImgWindow Disconnects currently connected SherlockEngine
image window
LONG IpeDspCtrlLib::_DIpeDspCtrl::GetWindow ( void )

GetWindow
Returns:
pointer to an internal CScrollWnd that is used for display.
DOUBLE IpeDspCtrlLib::_DIpeDspCtrl::GetZoom ( void )

GetZoom
Returns:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
149
current zoom settings
LONG IpeDspCtrlLib::_DIpeDspCtrl::LoadImage ( BSTR bstrFileName )

LoadImage Load an image for displaying
Parameters:
bstrFileName image file name
void IpeDspCtrlLib::_DIpeDspCtrl::SetFrameType ( ULONG dwType )

SetFrameType Controls type of the display control edge type
Note:
Combinations of the following flags can be used For more info look at
MSDN DrawEdge function #define BDR_RAISEDOUTER 0x0001
#define BDR_SUNKENOUTER 0x0002 #define BDR_RAISEDINNER
0x0004 #define BDR_SUNKENINNER 0x0008
Parameters:
dwType flags for control edge painting
void IpeDspCtrlLib::_DIpeDspCtrl::SetImage ( LONG pImage )

SetImage Sets new display image
Parameters:
pImage pointer to the CIpeImage object
void IpeDspCtrlLib::_DIpeDspCtrl::SetZoom ( DOUBLE dZoom )

SetZoom
Note:
Image is not refresed by this call. If you want to see image with new
zoom setting please use UpdateDisplay
Parameters:
dZoom new zoom setting; -1 for stretch-to-fit
void IpeDspCtrlLib::_DIpeDspCtrl::ShowToolbar ( LONG bShow )

ShowToolbar Shows or hides the display toolbar
Parameters:
bShow 0 or 1
LONG IpeDspCtrlLib::_DIpeDspCtrl::UpdateDisplay ( void )

UpdateDisplay Repaints the image display
Returns:
always zero

visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
150
Control Events

Public Member Functions
void LButtonDblClk (ULONG nFlags, LONG x, LONG y)
void LButtonDown (ULONG nFlags, LONG x, LONG y)
void LButtonUp (ULONG nFlags, LONG x, LONG y)
void MouseMove (ULONG nFlags, LONG x, LONG y)
void OverlayDraw (LONG hDC)
void RButtonDblClk (ULONG nFlags, LONG x, LONG y)
void RButtonDown (ULONG nFlags, LONG x, LONG y)
void RButtonUp (ULONG nFlags, LONG x, LONG y)

Member Function Documentation
Void IpeDspCtrlLib::_DIpeDspCtrlEvents::LButtonDblClk ( ULONG nFlags,
LONG x,
LONG y
)

LButtonDblClk
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void IpeDspCtrlLib::_DIpeDspCtrlEvents::LButtonDown ( ULONG nFlags,
LONG x,
LONG y
)

LButtonDown
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void IpeDspCtrlLib::_DIpeDspCtrlEvents::LButtonUp ( ULONG nFlags,
LONG x,
LONG y
)

LButtonUp
Parameters:
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
151
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void IpeDspCtrlLib::_DIpeDspCtrlEvents::MouseMove ( ULONG nFlags,
LONG x,
LONG y
)

MouseMove
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void IpeDspCtrlLib::_DIpeDspCtrlEvents::OverlayDraw ( LONG hDC )

OverlayDraw Callback to allow user to paint overlay
Parameters:

hDC HDC handle to overlay device context; needs to be cases to
HDC
void IpeDspCtrlLib::_DIpeDspCtrlEvents::RButtonDblClk ( ULONG nFlags,
LONG x,
LONG y
)

RButtonDblClk
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void IpeDspCtrlLib::_DIpeDspCtrlEvents::RButtonDown ( ULONG nFlags,
LONG x,
LONG y
)

RButtonDown
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void IpeDspCtrlLib:: DIpeDspCtrlEvents::RButtonUp ( ULONG nFlags,
visin artificial
_______________________________________________________________
_____________________www.infaimon.com____________________
152
LONG x,
LONG y
)

RButtonUp
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates

Potrebbero piacerti anche