Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCIN
ESQUEMAS DE REPRESENTACIN
Las tcnicas de segmentacin producen datos en bruto
en forma de pixeles de contorno o de una regin.
Normalmente se utilizan esquemas que compacten los
datos en representaciones ms tiles en el clculo de
descriptores.
Esquemas de representacin comunes:
Cdigos cadena
Aproximaciones poligonales
CDIGOS CADENA
Los cdigos cadena se utilizan para representar un
contorno por medio de una secesin conexa de
segmentos de longitud y direccin especificadas.
Normalmente se basa en segmentos de conectividad 4 u
8.
La direccin de cada segmento se codifica utilizando un
esquema de numeracin.
Los cdigos cadena se crean siguiendo un contorno en
una direccin (ej. en sentido de la manecillas del reloj)
CDIGOS CADENA
Conectividad 4
Conectividad 8
CDIGOS CADENA
Regularmente para generar cdigos cadena se vuelve a
muestrear el contorno seleccionando un espacio de
cuadricula mayor.
Se asigna un punto del contorno a cada nodo del
cuadriculado.
CDIGOS CADENA
Conectividad 4
Conectividad 8
APROXIMACIONES POLIGONALES
APROXIMACIONES POLIGONALES
APROXIMACIONES POLIGONALES
10
CONTORNOS EN OPENCV
OpenCV cuenta con una funcin para encontrar los
contornos de una imagen.
Sin embargo antes de utilizarla se debe conocer lo
siguiente:
11
CvMemStorage*
0);
cvCreateMemStorage(
int
block_size
SECUENCIAS:
// nmero de elementos en la
secuencia
13
14
15
2.
(1)
(2)
(3)
(4)
(5)
(6)
17
18
19
20
21
22
DIBUJAR CONTORNOS
void cvDrawContours(
CvArr* img,
//Imagen de salida
CvSeq* contour,
//Contornos
CvScalar external_color,
//Color de contornos
CvScalar hole_color,
//Color de huecos
int max_level,
int thickness = 1,
int line_type = 8,
//Tipo de lnea
23
Ejemplo:
Cvseq* contornos = 0;
CvMemStorage* storage = cvCreateMemStorage(0);
cvFindContours( imagen_gris, storage, &contornos,
sizeof(CvContour), CV_RETR_TREE,
CV_CHAIN_CODE, cvPoint(0,0) );
cvDrawContours( imagen_color, contornos,
CV_RGB(255,0,0),
CV_RGB(0,255,0),1, 2, 2,
cvPoint(0,0) );
cvReleaseMemStorage( &storage );
24
26
(, )
=1 =1
Ejemplo en OpenCV:
int a = cvContourArea(contorno, CV_WHOLE_SEQ);
// CV_WHOLE_SEQ indica que se toma el contorno
de principio a fin.
27
CvRect cvBoundingRect(
CvSeq* contour, //Secuencia de contornos
int update = 0
);
28
EJEMPLO:
CvSeq* contornos = 0;
CvMemStorage* storage = cvCreateMemStorage(0);
cvFindContours( imagen_binaria, storage, &contornos,
sizeof(CvContour), CV_RETR_TREE,
CV_CHAIN_APPROX_NONE, cvPoint(0,0)
);
// Los descriptores anteriores solo funcionan con
CV_CHAIN_APPROX_NONE
for( CvSeq* c = contornos; c != 0; c = c->h_next )
{
int p = cvContourPerimeter(c);
printf("Permetro: %i\n ", p );
}
cvReleaseMemStorage( &storage );
29
MOMENTOS:
Las formas de los lados de los contornos (y de las firmas)
se pueden describir cuantitativamente utilizando
momentos.
Un momento es un valor escalar calculado a partir de
una imagen, que no variarn aunque el objeto aparezca
en distinta posicin, rotado o con distinto tamao,
siempre que sea el mismo objeto.
30
MOMENTOS:
=1
=1
31
MOMENTOS:
=
32
MOMENTOS:
00 = =
(, )
=1 =1
10 =
(, )
=1 =1
01 =
(, )
=1 =1
33
MOMENTOS:
Las coordenadas (X,Y) del centroide o centro de masa
son:
10
=
00
01
=
00
Los momentos centrales se usan para reconocer una
imagen independientemente de su situacin respecto a
los ejes de coordenadas.
A partir de los momentos centrales se pueden construir
un conjunto de siete momentos invariantes al cambio de
escala, simetra y rotacin llamados momentos Hu.
34
MOMENTOS EN OPENCV
//contorno
//momentos
//momentos
//orden en x
//orden en y
35
MOMENTOS EN OPENCV
Ejemplo:
CvMoments moments;
for( CvSeq* c = contornos; c != 0; c = c>h_next )
{
cvMoments(c, &moments);
M00 = cvGetSpatialMoment(&moments,0,0);
M10 = cvGetSpatialMoment(&moments,1,0);
M01 = cvGetSpatialMoment(&moments,0,1);
int x = (int)(M10/M00);
int y = (int)(M01/M00);
36
EJERCICIO
Tomar una imagen con los LEDs prendidos y otra con los LEDs
apagados.
Eliminar ruido, segmentar la regin creada por la resta,
rellenar huecos.
Obtener sus contornos
Obtener el centro de masa de los LEDs
Dibujar un crculo por cada LED. El centro de cada crculo
debe ser el centro de masa de cada LED.
37
MOMENTOS EN OPENCV
38
MOMENTOS EN OPENCV
CvMoments moments;
------------------------------cvMoments(c, &moments);
CvHuMoments hu_moments;
cvGetHuMoments(&moments, &hu_moments);
printf(Momento Hu 1 = %f
",hu_moments.hu1);
39
LA TRANSFORMADA DE HOUGH
La Transformada de Hough es una tcnica usada para la
deteccin de figuras o primitivas geomtricas en
imgenes digitales (binaria o en escala de grises) .
Las figuras que deseamos encontrar se describen
mediante ecuaciones paramtricas.
40
LA TRANSFORMADA DE HOUGH
La imagen de entrada pude ser, por ejemplo, una
imagen con bordes extrados mediante el operador de
Canny.
Espacio de parmetros: El conjunto de todas las
combinaciones de los valores de parmetros de la
ecuacin de la primitiva a buscar.
El espacio de parmetros debe ser discretizado para
acortar la bsqueda a un conjunto finito de parmetros.
Entre ms parmetros consideremos, mayor ser la
precisin y la operacin ser ms costosa.
41
LA TRANSFORMADA DE HOUGH
Encontrar lneas:
La transformada de Hough encuentra puntos en la imagen
que satisfagan la ecuacin de la recta en su forma polar, para
distintos valores de y .
Ecuacin polar de la recta: + =
El espacio de parmetros se discretiza en una serie de celdas
denominadas celda de acumulacin.
42
LA TRANSFORMADA DE HOUGH
Cada pixel de la imagen votar por todas las ecuaciones
correspondientes a primitivas a las que permanezca dicho
punto recorriendo todas las combinaciones de parmetros
de el espacio de bsqueda.
Las primitivas con un valor de votos mayor a un umbral sern
reconocidas como lneas.
43
LA TRANSFORMADA DE HOUGH
44
LA TRANSFORMADA DE HOUGH
Ventajas
Cada pxel de la imagen se procesa de modo independiente,
lo que facilita su implementacin en paralelo.
La transformada "general de Hough es til para la deteccin
de formas complejas
Es capaz de reconocer patrones ligeramente deformados,
ocultos o discontinuos
Robusta frente al ruido
Inconvenientes
Tiempo y memoria
Ajustar el nivel de umbral de votos depende del problema.
45
EJERCICIO
Investigar como se realiza la transformada de Hough
para encontrar lneas en OpenCV.
Realizar un programa que obtenga las lneas de una
imagen.
Realizar un programa que obtenga las crculos de una
imagen.
46