Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Visión Artificial Usando El Toolbox de MATLAB
Visión Artificial Usando El Toolbox de MATLAB
ndice general
1. Introduccin
.
.
.
.
3. Procesamiento de la imagen.
3.1. Filtraje espacial . . . . . . . . . . . . . . . . . . . . .
3.2. Funciones para la extraccin de bordes . . . . . . .
3.3. Imgenes binarias y segmentacin por umbral. . . .
3.4. Operaciones morfolgicas . . . . . . . . . . . . . . .
3.5. Operaciones basadas en objetos . . . . . . . . . . . .
3.6. Seleccin de objetos . . . . . . . . . . . . . . . . . .
3.7. Medicin de caractersticas . . . . . . . . . . . . . .
3.8. Funciones para la conversin de imgenes y formatos
.
.
.
.
.
.
.
.
.
.
.
.
5
5
8
14
14
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
de color
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
16
16
18
19
20
21
25
27
29
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4. La herramienta vfm
32
4.1. Captura de la imagen en matlab . . . . . . . . . . . . . . . . . . 33
ndice de figuras
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
3.1.
3.2.
3.3.
3.4.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
7
9
9
10
12
13
14
17
18
19
20
21
22
22
22
23
24
24
25
26
26
27
28
29
30
30
31
NDICE DE FIGURAS
4.1. Ventana de la herramienta vfm. . . . . . . . . . . . . . . . . . . .
4.2. Proceso de captura de la herramienta vfm. . . . . . . . . . . . .
3
33
34
Captulo 1
Introduccin
La implementacin de algoritmos en visin por computador resulta muy costoso en tiempo ya que se requiere de la manipulacin de punteros, gestin de
memoria, etc. Hacerlo en lenguaje C++ (que por sus caractersticas compartidas de alto y bajo nivel lo hacen el mas apropiado para la implementacin de
algoritmos de visin computacional) supondra la inversion de tiempo y sin la
seguridad de que lo queremos implementar funcionar. Adems utilizar C++
para el periodo de prueba exige un tiempo normal de correccin de errores debidos al proceso de implementacin del algoritmo, es decir errores programticos
efectuados por ejemplo al momento de multiplicar dos matrices, etc. Todos estos
problemas pueden ser resueltos si la implementacin de prueba es realizada en
MatLAB utilizando su toolbox de procesamiento de imgenes con ello el tiempo de implementacin se convierte en el mnimo con la confianza de utilizar
algoritmos cientficamente probados y robustos.
El toolbox de procesamiento de imgenes contiene un conjunto de funciones
de los algoritmos mas conocidos para trabajar con imgenes binarias, trasformaciones geomtricas, morfologa y manipulacin de color que junto con las
funciones ya integradas en matlab permite realizar anlisis y trasformaciones de
imgenes en el dominio de la frecuencia (trasformada de Fourier y Wavlets).
Este documento esta dividido en 3 partes, en el capitulo 2 se trata los conceptos bsicos de las imgenes y como son representadas en matlab as como
una introduccin a las operaciones bsicas de manejo de archivos. En el capitulo
3 se aborda el procesamiento de imgenes mas comunes y representativos en el
rea de visin computacional ; explicando el uso de estas funciones a travs de
ejemplos. Por ultimo en el capitulo 4 se explica el uso de la herramienta vfm
utilizada para la captura de imgenes captadas por dispositivos instalados en la
computadora tales como tarjetas captadoras y USB Webcams.
Captulo 2
2.1.
v11 v12
v
v22
I ( x, y ) = 21
vm1 vm 2
v1n
v2 n
vmn
Formato
TIFF
JPEG
GIF
BMP
PNG
XWD
Extensin
.tiff
.jpg
.gif
.bmp
.png
.xwd
r11
r
I R (m, n,1) = 21
rm1
r12
r22
rm 2
r1n
g11
g
r2 n
I G ( m, n, 2) = 21
rmn
g m1
g12
g 22
gm2
b11
g1n
b
g2n
I B ( m, n, 3) = 21
g mn
bm1
b12
b22
bm 2
b1n
b2 n
bmn
I(m,n,p)
n
IR(m,n)
IG(m,n)
IB(m,n)
RGB). De tal forma que si se quisiera introducir la imagen contenida en el archivo data.jpg a una variable para su procesamiento en matlab, entonces se tendra
que escribir en lnea de comandos:
> >image=imread(data.jpg);
con ello la imagen contenida en el archivo data.jpg quedar contenida en la
variable image.
Una vez que la imagen esta contenida en una variable de matlab es posible
utilizar las funciones para procesar la imagen. Por ejemplo, una funcin que
permite encontrar el tamao de la imagen es size(variable)
> >[m, n]=size(image);
en donde m y n contendrn los valores de las dimensiones de la imagen.
Para grabar el contenido de una imagen en un archivo se utiliza la funcin
imwrite(variable,nombre del archivo), en donde variable representa la
variable que contiene a la imagen y nombre del archivo el nombre del archivo
con su respectiva extensin de acuerdo a la tabla 2.1. Suponiendo que la variable image2 contiene la imagen que nos interesa grabar en el archivo dato2.jpg
tendramos que escribir:
> >imwrite(image2, data2.jpg) ;
Despus que realizamos un procesamiento con la imagen, es necesario desplegar el resultado obtenido, la funcin imshow(variable) permite desplegar
la imagen en una ventana en el ambiente de trabajo de matlab. Si la variable a
desplegar por ejemplo, es face al escribir en la lnea de comandos:
> >imshow(face);
obtendramos la imagen de la figura 2.3.
2.2.
100
m
100
(a)
(b)
10
(c)
11
> >image2(100,100,1)=255;
> >image2(100,100,2)=255;
> >image2(100,100,3)=255;
En ocasiones resulta preferible saber el color o la intensidad de gris (el valor
del pxel) de forma iteractiva, es decir tener la posibilidad de seleccionar un
pxel en una regin y obtener el valor de este. Esta posibilidad es ofrecida por
la funcin impixel, la cual iterativamente entrega el valor (uno o tres) del pxel
seleccionado que aparezca en la ventana desplegada por la funcin imshow. El
formato de esta funcin es:
value=impixel;
Donde value representa un escalar, en el caso de que la imagen sea a escala
de grises o bien un vector de 1 x 3 con los valores correspondientes a cada uno
de los planos RGB.
Para utilizar esta funcin es necesario antes, desplegar la imagen con la
funcin imshow. Una vez desplegada se llama a la funcin y cuando el cursor del
ratn este sobre la superficie de la imagen cambiara a una +. Cuando se presione
el botn izquierdo del ratn se seleccionara el pxel, el cual podemos seleccionar
otra vez en caso de que se all cometido un error a la hora de posicionar el
ratn, ya que la funcin seguir activada hasta que se presione la tecla de enter.
La figura 2.6 muestra una imagen de la operacin aqu descrita.
Una operacin importante en visin computacional es el determinar un perfil
de la imagen; es decir convertir un segmento de la imagen a una seal unidimensional para analizar sus cambios. Esto es de especial significado en la visin
estereo en donde se analizan para los algoritmos segmentos epipolares de cada
camara. Matlab dispone de la funcin improfile que permite trazar el segmento
interactivamente con el ratn, desplegando despus el perfil de la imagen en una
grafica diferente. Esta funcin necesita que la imagen original sea previamente
desplegada mediante la funcin imshow. Debe de considerarse que si la imagen
es a escala de grises, el perfil mostrara solo una seal correspondiente a las fluctuaciones de las intensidades de la imagen, sin embargo si la seal es de color
RGB esta mostrara un segmento de seal para cada plano. Para la utilizacin
de esta funcin solo es necesario escribir en lnea de comandos
> >improfile
como es una funcin iteractiva en cuanto el ratn se encuentra en la superficie de la imagen el puntero cambiara de smbolo a una +, de esta manera
podemos mediante el establecimiento de una lnea en la imagen configurar el
perfil deseado. La figura 2.7 muestra una imagen de la operacin descrita.
12
Perfiles RGB
13
v11
v12
v13
v14
v15
v16
14
v17
2.3.
Sub-muestreo de imgenes
..
..
.
.
.
.
.
.
.
.
.
vm1 vm2 vm3 vmn
y se desa sub-muestrear la imagen para obtener la mitad de su tamano
original, asi la nueva imagen quedara compuesta por los elementos tomando
uno si y otro no de la imagen original:
IS2 (m, n) =
v11
v31
v51
..
.
v13
v33
v53
..
.
v15
v35
v55
..
.
..
.
v1(n2)
v3(n2)
v5(n2)
..
.
v(m2)1
v(m2)3
v(m2)5
v(m2)(n2)
(2.2)
2.4.
Los elementos que constituyen una imagen en matlab tienen el formato entero uint8, que es un tipo de dato que puede variar de 0 a 255, sin poder
15
soportar decimales y valores que salgan fuera de ese rango. Lo anterior resulta
una desventaja principalmente en aquellos casos donde se implementan algoritmos que trabajan con este tipo de datos para realizar operaciones de divisin o
multiplicacin por tipo de dato flotante. En estos casos es necesario trasformar
la imagen de tipo de dato uint8 a double. Es importante tener en cuenta que si
se utiliza la funcin imshow para desplegar las imgenes; esta no tiene la capacidad de poder desplegar imgenes del tipo double por lo que una vez realizado
las operaciones de punto flotante es necesario despus convertir al tipo de dato
uint8. Supongamos que tenemos una imagen de escala de grises representada en
la variable imagegray y queremos reducir sus intensidades a la mitad, entonces
escribiramos:
> >imagegrayD=double(imagegray) ;
> >imagegrayD=imagegrayD*0.5 ;
> >imagegray=uint8(imagegrayD) ;
> >imshow(imagegray) ;
Captulo 3
Procesamiento de la imagen.
El numero de funciones que implementa el toolbox para el procesamiento de
imagen es muy diverso, sin contar la mltiple oferta de funciones ya generada por
otros usuarios y disponibles a travs del Internet, sin embargo en este tutorial
sern tratadas algunas consideradas como las mas usadas y tiles para la visin
computacional.
3.1.
Filtraje espacial
El filtraje espacial es una de las operaciones comunes en la visin computacional ya sea para realizar efectos de eliminacin de ruido o bien deteccin de
bordes. En ambos casos la determinacin de los pxeles de la nueva imagen dependen del pxel de la imagen original y sus vecinos. De esta forma es necesario
configurar una matriz (mascara o ventana) que considere cuales vecinos y en
que forma influirn en la determinacin de el nuevo pxel. Consideremos una
imagen IS (m, n).
.
.
vsm1 vsm2 vsm3 vsmn
que ser la imagen a la cual pretendemos filtrar espacialmente y IT (m, n):
.
.
.
vtm1
vtm2
16
vtm3
vtmn
(i-1,j-1)
(i,j-1)
(i+1,j-1)
17
(i-1,j) (i-1,j+1)
(i,j)
(i,j+1)
(i,j)
(i+1,j) (i+1,j+1)
w=
w11
1
w21
h
w31
w12
w22
w32
w13
w23
w33
w
w12 w13
1 11
w21 w22 w23
w=
h
w31 w32 w33
donde r =3 y t=3,tendremos que cada elemento de IT (m, n) es calculado:
vtij =
1
[w22 vsij + w11 vs(i1)(j1) + w12 vs(i1)j + w13 vs(i1)(j+1)
h
+w21 vsi(j1) + w23 vsi(j+1) + w31 vs(i+1)(j1) + w32 vs(i+1)j + w33 vs(i+1)(j+1) ]
La figura 3.1 muestra estos detalles.
Para desarrollar en matlab este tipo de operaciones se utiliza la funcin
nlfilter, cuya estructura es la siguiente:
IT=nlfilter(IS,[i j],fun);
donde IT es la variable que contiene la imagen resultado de la operacin, IS
es la variable que contiene a la imagen original, [i j] son las dimensiones de la
mascara que define la influencia de los vecinos para el calculo del nuevo pxel por
ultimo fun representa la funcin que desarrolla el calculo sobre los elementos
de la vecindad definidos de dimensin i x j.
La funcin fun recibe como entrada una matriz x de i x j datos correspondientes a los vecinos de la imagen los cuales son procesados por la funcin
devolviendo el valor que corresponde al dato centrado en la mascara.
18
1 1 1
1
1 1 1
w=
9
1 1 1
entonces se implementa un archivo .m con nombre myfunction y cuyo contenido estar integrado por las siguientes lneas
function result=myfunction(x)
result=1/9*(x(1,1)+x(1,2)+x(1,3)...
+x(2,1)+x(2,2)+x(2,3)+x(3,1)+x(3,2)+x(3,3));
Para desempear el filtrado se escribira en lnea de comandos
> >image3=double(image3);
> >imageR=nlfilter(image3,[3 3],@myfunction);
> >imageR=uint8(imageR);
> >imshow(imageR);
El resultado es desplegado en la figura 3.2.
3.2.
19
3.3.
Una imagen binaria es una imagen en la cual cada pxel puede tener solo uno
de dos valores posibles 1 o 0. Como es lgico suponer una imagen en esas condiciones es mucho mas fcil encontrar y distinguir caractersticas estructurales.
En visin computacional el trabajo con imgenes binarias es muy importante
ya sea para realizar segmentacin por intensidad de la imagen, para generar
algoritmos de reconstruccin o recoconocer estructuras.
La forma mas comn de generar imgenes binarias es mediante la utilizacin
del valor umbral de una imagen a escala de grises; es decir se elige un valor limite
(o bien un intervalo) a partir del cual todos los valores de intensidades mayores
sern codificados como 1 mientras que los que estn por debajo sern codificados
a cero. En matlab este tipo de operaciones se realizan de forma bastante sencilla
utilizando las propiedades de sobrecarga de los smbolos relacinales.
Por ejemplo si de la imagen sample quisiera realizarse este tipo de operacin
de tal forma que los pxeles mayores a 128 sean considerados como 1 y los que
son menores o iguales a 128 como cero, se escribira en lnea de comandos como
(a)
20
(b)
3.4.
Operaciones morfolgicas
(a)
21
(b)
3.5.
En una imagen binaria, puede definirse un objeto como un conjunto de pxeles conectados con valor 1. Por ejemplo la figura 3.7 representa una imagen
22
4
6
3
5
(a)
2
4
5
7
(b)
23
24
0
1
2
3
(a)
(b)
(c)
100
115 2
89
21
20
20
30
21
20
30
22
20
30
89
0
89
0
89
0
(a)
25
(b)
3.6.
Seleccin de objetos
26
(a)
(b)
27
Image
FilledImage
FilledArea
ConvexHull
ConvexImage
ConvexArea
EulerNumber
Extrema
EquivDiameter
Solidity
Extent
PixelList
3.7.
Medicin de caractersticas
28
29
3.8.
30
(a)
(b)
31
(c)
Captulo 4
La herramienta vfm
Sin embargo un problema importante en las versiones anteriores a la Release
14 (en esta, superado con la incorporacin del toolbox de adquisicin de imagenes ) es la falta de conexin entre una imagen tomada por un adquisidor de
imagen (tal como una tarjeta adquisidora o bien simplemente una Web-cam) y
el procesamiento realizado por matlab. Tener esta ventaja permite implementar
los algoritmos de visin con las caractersticas reales de cmara o captador sin
ningn esfuerzo adicional (como lo seria implementar un programa que grabe la
imagen captada en un archivo con un formato especifico, para despus utilizar
los comandos normales del toolbox para abrir el archivo).
La herramienta vfm permite resolver este problema, vfm es un conjunto de
libreras dinmicas que permiten acceder directamente a los controladores del
dispositivo registrados por windows. De esta manera USB Web-cams de bajo
costo pueden ser utilizadas as como otros dispositivos para captar una imagen
y poderla utilizar en lnea de comandos por matlab y sus toolbox.
La herramienta una vez instalada permite ser utilizada de una manera muy
simple, solo hay que poner en lnea de comandos :
> >vfm
A continuacin aparecer una ventana como la mostrada en la figura 4.1.
La herramienta cuenta con tres mens que controlan la captura. En el men
Driver se permite seleccionar una de varias fuentes de captacin de video instaladas, en el men Configure se puede configurar el formato y caractersticas
propias del driver previamente seleccionado, por ultimo en el men Window se
permite controlar el flujo de la presentacin de la imagen, normalmente se prefiere el modo de Preview para que la imagen se este mostrando en todo momento
en la ventana.
32
33
4.1.
34