Vous êtes sur la page 1sur 7

UNI-CTIC

1

Calculo´

de distancias y areas´

Canales Cuba, Manolo

Torres Guillen,´

Diego

Ticse Torres, Royer Romero Catay, Angelo Lima, 4 de Agosto del 2009

en una imagen

Resumen—En el siguiente trabajo, se obtuvo un programa hecho en Matlab el cual mediante un patron´ o escala en 2-D se

puede hallar el tamano˜ de la longitud o area´ de un objeto cuya imagen´ es capturada con una camara que previamente ha sido

calibrada con el patron´

de objetos en

2-D

inicial.

Index Terms—Calibracion´

de camara,´

Tamano˜

´

I. INTRODUCCI ON

Supongamos que queremos encontrar el tamano˜ de la lon- gitud o area´ de un objeto, entonces se procede a medir con un patron´ de longitud o calcular mediante formulas´ el area´ del objeto; si queremos automatizar este proceso, tendremos que aprovechar la herramienta del Matlab y su versatilidad en el tratamiento de imagenes´ para lograr encontrar la longitud deseada. Existen varios metodos´ o modelos que sirven para este fin, el que utilizaremos en este proyecto se basa en utilizar un objeto

plano cuadriculado en blanco y negro que viene a ser el patron,´

y mediante una camara´ se obtiene una imagen´ de la cual se

calcula´ las distancias(el numero´ de pixeles) entre los pixeles que tienen el mismo color y comparando esta distancia con el tamano˜ real de la cuadr´ıcula se puede hallar una relacion´ que

permite calibrar la camara.´ Luego con la misma camara´ y en el mismo escenario, se obtienen imagenes´ de objetos y a partir de ellos mediante un tratamiento se halla el numero´ de pixeles ocupados por el objeto y con la relacion´ hallada previamente se puede calcular

el

tamano˜

de la longitud o area´

del objeto.

II.

OBJETIVOS

El objetivo general del trabajo es calcular el tamano˜ de la

longitud o area´ de objetos simples para lo cual se debera´ de- sarrollar un programa hecho en Matlab que permita hallar, con

la ayuda de una camara, dicho tamano.˜

II-A.

Objetivos espec´ıficos

una camara, dicho tamano.˜ II-A. Objetivos espec´ıficos Disenar˜ la plantilla bidimensional o patron.´ Calcular

Disenar˜

la plantilla bidimensional o patron.´

Calcular los parametros´Disenar˜ la plantilla bidimensional o patron.´ de la camara´ (calibracion).´ Hallar el tamano˜ de un

de la camara´

(calibracion).´

Calcular los parametros´ de la camara´ (calibracion).´ Hallar el tamano˜ de un objeto. III. P LANTEAMIENTO

Hallar el tamano˜

de un objeto.

III. PLANTEAMIENTO DEL PROBLEMA

Para el desarrollo del trabajo se debe tener en cuenta las dimensiones del objeto, el mas simple debe ser lineal y estar ubicado en forma horizontal o vertical con respecto a un

sistema de referencia inercial, dado estas consideraciones, el primer problema a tener es como calibrar la camara,´ la cual va a ser utilizada para capturar la imagen del objeto, y el segundo problema a considerar es como crear un programa

o desarrollar un codigo usando Matlab para poder hallar la

longitud del objeto a partir de la imagen tomada por la camara´ previamente calibrada.

´

IV. DESCRIPCI ON DE DATOS

Los datos que se han usado para trabajar provienen de

imagenes´ en formato .jpg, . Una de entradas que se tiene es

la imagen capturada por la webcam, es la imagen del objeto

a analizar en el tablero de ajedrez:

Figura 1.

del objeto a analizar en el tablero de ajedrez: Figura 1. Tablero de ajedrez con el

Tablero de ajedrez con el objeto tomada de webcam

La otra imagen que tenemos es la imagen que ya se tiene archivada, que nos va servir para reconocer el objeto en la imagen anterior:

Figura 2.

Imagen que sirve con el objeto en el tablero

Y finalmente se toma una imagen del tablero solo tambien:´

´

V. P REPARACI ON DE DATOS

V-A.

Calculo de la longitud del objeto

De los datos

que se tienen como entrada solo

dos se

preparan previamente antes de trabajar con ellas.

UNI-CTIC

2

UNI-CTIC 2 Figura 3. Imagen del tablero solo tomado con webcam. Imagen del tablero: Primero a

Figura 3.

Imagen del tablero solo tomado con webcam.

Imagen del tablero:

Primero a la imagen al pasamos a escala de grises mediante el comando rgb2gray . rgb2gray.

Despues´ para determinar las l´ıneas horizontales del tablero , se pasa la convolucion´ de la imagen mediante la funcion´ GradientHorizontalImg ,en donde el parametro´ GradientHorizontalImg ,en donde el parametro´

de

entrada es la imagen en escala de grises y nos devuelve

la

solo las l´ıneas horizontales de la imagen del tablero

mediante el comando conv2.

f u n c t i o n

Gx

=

G r a d i e n t H o r i z o n t a l I m g ( imgGris )

Gx

=

conv2 (

imgGris , [ 1

2

1 ] , ’ same ’ ) ;

Gx

=

conv2 ( Gx,[ 1

0

1 ] ’ , ’ same ’ ) ;

Para hallar las hallar las l´ıneas verticales solo se rota la imagen y se hace el mismo procedimiento que el anterior.= conv2 ( Gx,[ − 1 0 1 ] ’ , ’ same ’ ) ;

Mediante la funcion´ slimming ,cuya entrada es la union´ de las dos imagenes´ sacadas en los pasos anteriores. Adelgaza las l´ıneas obtenidas de la convolucion´ de tal manera que sean de ancho un pixel.la imagen y se hace el mismo procedimiento que el anterior. function imgHoriz = slimming (

function

imgHoriz

=

slimming ( imgHoriz )

[ f

c

]

=

s i z e ( imgHoriz ) ;

for

k

=

1:4 ,

for

i =2: f 1,

for

j =2: c1,

i f ( imgHoriz ( i , j ) )

 

i f (

( imgHoriz ( i 1, j

)

&& imgHoriz ( i +1 , j )

)

|

|

( k

==

4

&

imgHoriz ( i 1, j )

) )

 

imgHoriz ( i 1, j )

 

=

0;

imgHoriz ( i +1 , j )

=

0;

 

end

end

end

 

end

end

Imagen del tablero:

end end   end end Imagen del tablero: A esta imagen se le va sacar el

A esta imagen se le va sacar el objeto para transportarlo

a una nueva imagen con las dimensiones de la anterior esto se hace comparandolo´ con el rango hsv de la figura de gu´ıa ( donde esta el objeto del color del mismo de la imagen) y as´ı se obtiene una imagen binarizada, que es

parte de la funcion´ indetificObjec.

for

i =1:n ,

for

j =1:m,

c

o l o r

=

imgHsv ( i ,

j

, 1

) ;

s

a t u r a c

=

imgHsv (

i

,

j

, 2 ) ;

b r i l l o = imgHsv ( i , j , 3 )
b
r i l l o
=
imgHsv ( i , j , 3 ) ;
a
=
0;
i f
( c o l o r
> RangHSV ( 1 )
&&
c
o l o r < RangHSV(2))&&
( s a t u r a c
>
RangHSV ( 3 )
&&
s a t u r a c
< RangHSV(4))&&
( ( b r i l l o
> RangHSV ( 5 )
&&
b
r i l l o
< RangHSV ( 6 ) ) )
a
=
1;
imgObjet ( i , j )
end
=
a ;
end
end
6 ) ) ) a = 1; imgObjet ( i , j ) end = a

Luego a la imagen se erosion´

y se la dilata con el comando imdilate, para acentuarla mas en la figura y que solo se tenga ese objeto blanco en fondo negro.

con el comando imerode

´

VI. PROCEDIMIENTO DE SOLUCI ON

Para hallar la solucion´ siguientes pasos:

Plantilla bidemencional.

del problema se ha seguido los

1. Deteccion de la imagen del tablero mediante imgTablero

2. Calculamos los puntos del tablero PointsChess(), a las coordenadas sobre el tablero en unidades de cuadardos las denominaremos u,v y a las coordenadas en pixeles las denominaremos X,Y .

3. Identificamos los puntos que forman las rectas horizon- tales mediante la funcion´ Horizontales().

4. Hallamos las ecuaciones de las rectas con la funcion´ rectas().

5. para las verticales calculamos primero la transpuesta y realizamos los pasos anteriores.

6. Determinamos los puntos de interseccion en la funcion´ findPoints().

7. Pintamos los puntos con la funcion´ PrintfPointsBoard().

8. Calculamos los parametros de la camara´ en la matriz Ratio mediante la funcion´ DetermRatio().

Calculo de la longitud del objeto.

1. Captura de la imagen tablero con objeto Img.

2. Identificamos el objeto por el rango usando la funcion´ IndentificObject(), esta funcion tambien permite identi- ficar al objeto con¡mo horizontal o vertical.

3. El rango HSV del objeto lo determinamos previamente usando la funcion´ rang hsv()

4. Determinamos los puntos extremos del objeto e la matriz PointObject.

5. Identificamos la celda donde se encuentre los puntos extremos del objeto mediante la funcion´ IdentifSquare- ObjectInTablero().

6. Finalmente determinamos la longitud del objeto medi- ante la funcion´ lengthObject() usando el parametro Ratio de la camara.´

UNI-CTIC

3

UNI-CTIC 3 Figura 4. Diagrama de bloques VII. S OLUCI ´ ON DEL P ROBLEMA Plantilla

Figura 4.

Diagrama de bloques

VII.

SOLUCI ´

ON DEL PROBLEMA

Plantilla bidimencional. Aqu´ı explicaremos como se llego a obtener los parametros de la camara:´ Primero capturamos la imagen del tablero imgTablero, Funcion´ Horizontales()

Mediante la funcion´ Horizontales() se identifican los puntos que forman las rectas horizontales , cuya salida es una Horizontales() se identifican los puntos que forman las rectas horizontales , cuya salida es una matriz 2nxm donde hay n rectas con m puntos que lo conforman.

2 nxm donde hay n rectas con m puntos que lo conforman. function L i s
2 nxm donde hay n rectas con m puntos que lo conforman. function L i s

function

L i s t

R e c t a s

=

H o r i z o n t a l e s ( horiz

,

Max

c t a s = H o r i z o n t a l e

Lines ,

imgRgb )

[ f c ] = s i z e ( h o r i z
[ f
c ]
=
s i z e (
h o r i z )
;
STEP LENG =
1 6 ;
NUMB =
[
1
:
STEP LENG +
1
]
;
ONES
=
ones (
1 ,
STEP LENG +
1
) ;
s
e g u i r
=
0;
l
cont
i n e a s
=
=
1;
0;
max
Steps
=
15;
L i s t
R e c t a s
=
zeros (1 , max
Steps
) ;
i =
3∗STEP LENG ;
Save
Index
i
=
0;
while
i
<=
f −2∗STEP
LENG ,
j
=
10;
while
j
<=
c−2∗STEP
LENG ,
.
.
.
end
i f
( ( l i n e a s −1)/2
break ;
>=
Max
Lines )
end
j
=
j
+
1;
−1)/2 break ; >= Max Lines ) end j = j + 1; Funcion´ rectas() Luego

Funcion´ rectas() Luego mediante la funcion´ rectas(), se toma la imagen en escala de grises , se calcula el gradiente horizontal usando la funcion´ GradienthorizontalImg() para la imagen en gris y para la imagen negativa.luego superponemos las dos imagenes y adelgazamos los contornos horizontales en (imgHoriz) con esto podemos calcular los puntos que forman las rectas con la funcion anterior Horizontales(),y finalmente con esta matriz calculamos la ecuacion´ de la recta en la funcion´ EcuacAdjustm().

function

Recta

 

=

r e c t a s ( imgRgb ,

Max

Lines ,

corr

yx )

imgGris

=

rgb2gray ( imgRgb ) ;

 

Gx

=

   

G2x

=

G r a d i e n t H o r i z o n t a l I m g G r a d i e n t H o r i z o n t a l I m g

imgHoriz

=

( imgGris ) ;

(1

imgGris ) ;

G2x ) ;

 

imgHoriz

=

s u p e r P o s i t i o n ( Gx , slimming ( imgHoriz ) ;

 

M

=

H o r i z o n t a l e s ( imgHoriz , Max

Lines ,

imgRgb ) ;

 

Recta

=

EcuacAdjustm (M,

c o r r

y x ) ;

 

f

u n c t i o n

Gx

=

G r a d i e n t H o r i z o n t a l I m g

( imgGris )

 

Gx

=

conv2 (

imgGris , [ 1

2

1 ] , ’ same ’

) ;

 

Gx

=

conv2 ( Gx,[ 1

0

 

1 ] ’ , ’ same ’ ) ;

 

f

u n c t i o n

h o r i z

 

=

s u p e r P o s i t i o n ( Gx ,

G2x )

 

Bgx

Bg2x

=

=

( Gx

>

0 . 9 5 ) ; 0 . 9 5 ) ;

 

h o r i z

=

( G2x > ( Bgx )

 

|

( Bg2x ) ;

 

f

u n c t i o n

Recta

=

EcuacAdjustm (M,

c o r r

y x

)

[

n

m]

=

s i z e (M) ;

 

i

f

n==1 , d i s p l a y

( ’ no

i f n==1 , d i s p l a y ( ’ no se e

se

se

e n c o n t r a r o n

i f n==1 , d i s p l a y ( ’ no se e

r e c t a s

) ;

 

return ;

 

end

 

q =

1;

i yx , i =1:n ,

f

corr

for

N( i

1

 

+

2mod ( i , 2 ) , : )

=

M( i

,

: )

;

 

end

M

=

N;

 

end

 

for

i =1:2: n ,

 

Sx

=

M( i

, : ) ones (m, 1 ) ;

 

Sy

= M(

i

+ 1 , : ) ones

(m, 1 ) ; + 1 , : ) ) ones (m,

1

 

Sxy

=

(M(

i

,

: )

. M(

i

) ;

Sx2

=

(M( i

, : ) . M( i

, : ) ) ones (m, 1 ) ;

Sy2

Recta (1 , q )

=

(M(

i + 1 , : ) . M( i + 1 , : ) ) ones

=

( Sxy SxSy

(m, 1 ) ;

/m) / ( Sx2

Sx ˆ 2 /m) ;

i

f

( (mSx2

Sx ˆ 2 )

 

==

0 ) ,

 

Recta ( 2 , q )

=

M( i , 1 ) ;

 

e

l s e

Recta (2 , q )

=

( SySx2 SxSxy ) / (mSx2 Sx ˆ 2 ) ;

end

q

=

q

+

1;

 

end

 

Funcion´ findpoints() Luego usando la funcion´ findPoints(), hallamos los pun- tos de interseccion´ de las rectas horizontales y verticales.

[

f

n ]

=

s i z e

(

Rectas

x ) ;

[

f

m]

=

s i z e

(

Rectas

y ) ;

for

i =1:n , j =1:m,

 
 

for

 

m1

=

R e c t a s

x

( 1

,

i

) ;

b1

=

Rectas

x

(2

,

i

) ;

m2

=

R e c t a s Rectas

y

( 1

,

j

) ;

b2

=

y

(2 ,

j

) ;

i f

isnan (m1 ) ,

 

Coor ( i , j , : ) = [ b1

,

b1 m2

+

b2 ] ;

function

Coor

=

f i n d P o i n t s ( Rectas

x ,

Rectas

y )

UNI-CTIC

4

e l s e Coor ( i , j , : ) = [ (
e l s e
Coor ( i , j
,
:
) = [
(
b2−b1 ) / ( m1−m2 )
,
.
.
.
( b2 ∗m1−b1 ∗m2 ) / ( m1−m2 ) ] ;
end
end
end

Funcion´ printPointBoard()

Con esta funcion´ color azul/ ( m1−m2 ) ] ; end end end Funcion´ printPointBoard() pintamos los puntos de interseccion

pintamos los puntos de interseccion de

function imgRgb = P r i n t f P o i n t s
function
imgRgb
=
P r i n t f P o i n t s B o a r d ( Coor ,
imgRgb )
[ n
m
p ]
=
s i z e ( Coor ) ;
for
i =1:n ,
for
j =1:m,
imgRgb= p r i n t P o i n t ( round ( Coor (
round ( Coor ( i ,
,
j , 2 ) )
i
,
j
1 ) )
,
,
imgRgb , ’b ’ ) ;
end
end

Funcion´

DetermRatio :

Esta funcion´ tiene como entrada , la matriz Coor y nos devuelve una matriz con la relacion´ cent´ımetro/ p´ıxel ( Ratio(i,j) ) en Coor y nos devuelve una matriz con la relacion´ cent´ımetro/ p´ıxel (Ratio(i,j)) en cada celda del tablero .

Para hallar tal relacion´ se ubican en un punto de la celda y la recorren hallando su per´ımetro , como ya es sabido que cada celda tiene 8 cm de perimeto , entonces se calcula relacion´ (8/perimetro).p´ıxel ( Ratio(i,j) ) en cada celda del tablero . function Ratio = DetermRatio ( Coor

function Ratio = DetermRatio ( Coor ) [ n m r ] = s i
function
Ratio
=
DetermRatio ( Coor )
[
n
m
r ]
=
s i z e
( Coor ) ;
for
i =1:n−1,
for
j =1:m−1,
p
e
r i m e t r o
Coor ( i
( 2
, j
=
, 2 ) ]
1 ) ) ;
sqrt ( ( ( [ Coor ( i ,
j
[ Coor ( i +1 , j , 1 )
, 1 )
,
,
Coor ( i , j
, 2 ) ] ) . ˆ 2 )
∗ones
,
p
e r i m e t r o
=
p e r i m e t r o
+
sqrt ( ( (
[ Coor (
i +1 , j +1 ,1) , Coor ( i +1 , j +1 ,2)]
− [ Coor (
i
+1 , j , 1 )
,
Coor ( i +1 , j
, 2 ) ] ) . ˆ 2 )
∗ones ( 2 , 1 ) ) ;
p
e r i m e t r o
=
p e r i m e t r o
+
sqrt ( ( (
[ Coor ( i , j
+1 ,1) ,
Coor ( i
Coor ( i ,
j +1 ,2)]
[ Coor ( i +1 , j +1 ,1) ,
∗ones ( 2 , 1 ) ) ;
+1 ,
j
+ 1 , 2 ) ] ) . ˆ 2 )
p
e r i m e t r o
=
p e r i m e t r o
+
sqrt ( ( (
[
Coor ( i , j , 1 )
,
Coor (
i
, j
, 2 ) ]
[ Coor ( i
, j
+1
,1)
,
Coor ( i , j +1 ,2)]
) . ˆ 2 )
∗ones
( 2
,
1 ) ) ;
Ratio
( i
,
j )
=
8/ p e r i m e t r o ;
end
end

Por ultimo para el calculo de longitud utilizaremos esta matriz Ratio, que servira´ para la transformacion de pixeles a cent´ımetros por cada celda.) ; Ratio ( i , j ) = 8/ p e r i m e

Longitud del Objeto.

Funcion´

IndentificObject :

Mediante esta funcion,´ vamos a determinar la posicion´ del objeto en el tablero ubicandolo´ dentro de un rectangu-´ lo. Esta funcion´ tiene como parametros´ de entrada la imagen con el objeto de gu´ıa (RanbgHSV ) y la imagen del tablero con el objeto (img), y tiene como salida RanbgHSV) y la imagen del tablero con el objeto (img), y tiene como salida una matriz double 2x2 (p1) y dos parametros´ H y V double (con valores 1 o 0). Esta funcion´ tiene varias partes la cual pasaremos a explicar.

La primera parte del problema es preparar a la imagenfuncion´ tiene varias partes la cual pasaremos a explicar. del tablero mas´ la imagen (img) para

del tablero mas´ la imagen (img) para ser trabajada, cosa que ya explicamos anteriormente.

La parte que continua es ya con la imagen que sale despues´ del proceso anterior, en esta parte se pasa deter- minar el rectangulo´ donde esta encerrado el objeto. Para esto se hallan los puntos medios de los lados horizontales del cuadrado y esas coordenadas se almacenan en un matriz p1. Ademas´ se determina si el objeto esta verticalpara ser trabajada, cosa que ya explicamos anteriormente. o horizontalmente puesto dandole´ valeres de 1 o

o

horizontalmente puesto dandole´ valeres de 1 o 0 a H

y

V segun´

corrsponda.

mx

=

min ( vec

( 1

,

:

) ) ;

Mx

=

max ( vec

( 1

,

:

) ) ;

my

=

min ( vec

( 2

,

:

) ) ;

My

=

max ( vec

( 2

,

:

) ) ;

i f

(

abs (mxMx) >

abs (myMy)

)

 

me

=

round ( ( my

+

My ) / 2 ) ;

p1

( 1

,

:

)

=

[mx ,

me

]

;

p1

( 2

,

:

)

=

[Mx,

me ] ;

H

=

0;

 

V

=

1;

e l s e

 

me

=

round ( ( mx

+

Mx ) / 2 ) ;

p1

( 1

,

:

)

=

[my ,

me

]

;

p1

( 2

,

:

)

=

[My,

me ] ;

H

=

1;

 

V

=

0;

end r e t

=

{p1

H V}

 

Funcion´

IdentifSquareOfObjectInTablero :

Esta funcion´ tiene como parametros´ de entrada las coor-H V }   Funcion´ IdentifSquareOfObjectInTablero : denadas de todos los puntos de interseccion´ de las

denadas de todos los puntos de interseccion´ de las l´ıneas horizontales y verticales que conforman el tablero (Coor)

y la matriz p1 (PointObject), y tiene como salida una

matriz que contiene los puntos que determinan la celda donde se encuentran los extremos del objeto.Para esto se halla busca la menor distancia entre la los extremos del objeto (determinado por p1) y la celdas.

function p= I d e n t i f S q u a r e
function
p= I d e n t i f S q u a r e O f O b j e c t I n T a b l e r o ( Coor , P o i n t O b j e c t )
[ n
m
r ]
=
s i z e (
Coor ) ;
for
q =1:2 ,
d
=
100;
for
i =1:n ,
j
=
1;
for
i
f
j =1:m,
( ( P o i n t O b j e c t ( q , 1 )
Coor ( i ,
j
,
1 )
)
>
0
&
(
P o i n t O b j e c t ( q , 2 )
− Coor
( i
, j
, 2 ) )
>
0) ,
d1
=
abs
(
P o i n t O b j e c t ( q
, 1 )
Coor ( i ,
j
, 1
)
) ;
d2
=
abs
(
P o i n t O b j e c t ( q , 2 )
− Coor
( i
,
j
, 2 ) ) ;
i f
( d
>
sqrt ( d1 ˆ2
+
d2
ˆ 2 ) )
d
=
sqrt ( d1 ˆ2
+
d2 ˆ 2 ) ;
p ( q , : )
=
[ i
j
]
;
end
end
end
end
end
Funcion´
lengthObject :

Esta funcion´j ] ; end end end end end Funcion´ lengthObject : determina la longitud del objeto

determina la longitud del objeto dependi-

se encuentre (ya sea vertical o

endo en que posicion´

UNI-CTIC

5

horizontal).

Para medir la longitud del objeto esta funcion´ lo hace por pedazos , ya que la relacion´ cent´ımetro /p´ıxel depende de la celda en la que se encuentre ese pedazo de objeto. As´ı se recorre el objeto celda a celda hasta fin y en cada medida se hace uso de Ratio(i,j) correspondiente.Por ejemplo si es vertical: Ratio(i,j) correspondiente.Por ejemplo si es vertical:

 

i f

(V)

   

j

=

p ( 1 , 2 ) ;

 

for

i =p

( 1

, 1 ) : p ( 2

, 1 )

,

i f

(

i ˜= p ( 2

, 1 ) )

 
 

v1

 

=

P o i n t O b j e c t (2

,:) p o i n t ;

 

v2

=

[ Coor (

i +1 , j

, 1 ) , Coor (

i +1 , j ,2)]

 

[ Coor

(

i

+1 ,

j

+1 ,1) , Coor ( i +1 , j + 1 , 2 ) ] ;

A

=

[ v2 ’,v1 ’ ] ;

 

b

=( point [Coor

(

i

+1 , j +1 ,1) , Coor (

i

+1 ,

j + 1

, 2 ) ] )

;

Lanm

=

A\b ;

 

p

o i n t I n t e r

 

=

p o i n t

+

Lanm ( 2 ) v1

;

long

=

long i , j )

+ sqrt ( ( p o i n t I n t e r p o i n t )

 

Ratio (

. ˆ 2 ones ( 2 , 1 ) ) ;

 

p

o i n t

 

=

p o i n t I n t e r ;

 

e l s e

 
 

long

=

long

 

+

Ratio (

i

,

j )

sqrt ( ( point P o i n t O b j e c t (

2

,

:

) )

. ˆ 2 ones

( 2

, 1 )

) ;

 

end

 

end

end

Analogo´

 

si es horizontal.

 

Funcion´

rang hsv:

 

Esta funcion´es horizontal.   Funcion´ rang hsv:   nos va dar el rango hsv de el objeto

nos va dar el rango hsv de el objeto gu´ıa

que nos va servir para comparar con el objeto que esta en el tablero.

 

function

v

=

rang

hsv

img

=

double ( imread ( cad ) ) . / 2 5 5 ; rgb2hsv ( img ) ;

hsv

=

v

=

[ ]

;

( cad ) ;

for

i =1:3 ,

 

h1

=

min ( min ( hsv

( :

,

:

,

i

)

)

) ;

h2

= max ( max ( hsv

( :

,

:

,

i

)

)

) ;

v

=

[ v

h1

h2 ] ;

end

VIII.

EXPERIMENTO

Primero corremos el programa ObjectDetected(x,y) donde x e y son para indicar que se quiere detectar x por y puntos del tablero si tenemos un objeto relativamente grande entonces debemos colocar valores x e y de manera que podamos asegurar que el objeto esta dentro del conjunto de puntos sobre el tablero pero si no queremos preocuparnos de ello entonces simplemente podemos poner x e y en valores altos por ejemplo: x = 15, y = 15 para asi asegurarnos que hallemos todos los puntos. Capturas de programa. Entrada:

hallemos todos los puntos. Capturas de programa. Entrada: Figura 5. Tablero Entrada del objeto: Figura 6.

Figura 5.

Tablero

Entrada del objeto:

de programa. Entrada: Figura 5. Tablero Entrada del objeto: Figura 6. Tablero + Objeto Captura de

Figura 6.

Tablero + Objeto

Captura de puntos del tablero:

Podemos observar como se hace la captura de puntos, esto para x = 15, y = 15 , asi aseguramos todo el espacio de trabajo.

UNI-CTIC

6

UNI-CTIC 6 Figura 7. Captura de puntos IX. C ONCLUSIONES Se logro´ implementar una plantilla bidimensional

Figura 7.

Captura de puntos

IX.

CONCLUSIONES

Se logro´ implementar una plantilla bidimensional con cuadr´ıculas de 2 cm 2 . cm 2 .

Con la ayuda de la plantilla se pudo calibrar la camara´ web.plantilla bidimensional con cuadr´ıculas de 2 cm 2 . Con el desarrollo de un programa hecho

Con el desarrollo de un programa hecho en Matlab se pudo hallar la longitud de objetos lineales en posicion´ horizontal y vertical.la ayuda de la plantilla se pudo calibrar la camara´ web. R EFERENCIAS [1] [R. C.

REFERENCIAS

[1] [R. C. Gonzalez,´

Wesley, 2007 ] [2] [J. R. Parker; Algorithms for image processing and computer vision;

R. E. Woods; Digital image processing; Addison-

Wiley, 1997.]

[3] [E.Cuevas,

D.

Zaldivar,

Vision´

por

computa-

disponible

en

la

web:

]

http://www.scribd.com/doc/23371/Procesamiento-de-imagenes-con-

dor

utilizando

Matlab

Matlab

ANEXO

X. PROGRAMA PRINCIPAL

function ObjectDetected ( x , y ) c l o s e a l l
function
ObjectDetected ( x , y )
c l o s e
a l l
imgTablero=double ( imread ( ’\Imagenes\img16 . jpg ’ ) ) ;
Coor
=
PointsChess ( x , y , imgTablero ) ;
img
=
double ( imread
( ’
\ Imagenes\img9 . jpg ’ ) ) . / 2 5 5 ;
RangHSV =
r a n g
h s v
( ’
\ Imagenes \ o b j e t
c o l o r . JPG ’ ) ;
h =
I n d e n t i f i c O b j e c t ( RangHSV ,
img
) ;
P o i n t O b j e c t
=
h {1};
H
=
h {2};
V
=
h {3};
PointObjectInUV
P o i n t O b j e c t ) ;
=
I d e n t i f S q u a r e O f O b j e c t I n T a b l e r o ( Coor
Ratio
=
DetermRatio ( Coor ) ;
long
=
l e n g t h O b j e c t (
Coor ,
PointObject ,
PointObjectInUV ,
Ratio ,
H,
V)

XI. IDENTIFICA EL OBJETO POR RANGO HSV

f u n c t i o n r e t = I n d
f u n c t i o n
r e t
=
I n d e n t i f i c O b j e c t ( RangHSV ,
img )
imgHsv =
rgb2hsv ( img ) ;
[ n
m
i =1:n ,
p
]
=
s i z e ( imgHsv
) ;
for
for
j =1:m,
c
o
l o r
=
imgHsv (
i
, j
,
1
) ;
s
a
t u r a c
=
imgHsv (
i
,
j
, 2 ) ;
b
r
i l l o
=
imgHsv ( i ,
j
,
3 ) ;
a
=
0;
i
f
(
c o l o r
> RangHSV ( 1 )
&&
c
o
l o r < RangHSV(2))&&
(
s
a t u r a c
> RangHSV ( 3 )
&&
s a t u r a c < RangHSV(4))&&
(
( b r i l l o
> RangHSV ( 5 )
&&
b
r i l l o
< RangHSV ( 6 ) ) )
a
=
1;
imgObjet ( i ,
j )
=
a ;
end
end
end
imgErode
=
imerode ( imgObjet , ones ( 3 ) ) ;
imgDila
=
i m d i l a t e
( imgErode , ones ( 3 ) ) ;
[ n
m]
=
s i z e ( imgDila ) ;
vec
=
[
]
;
for
i
=
1: n
,
for
j
=
1:m,
i
f
imgDila ( i ,
[
j
)
,
vec
=
vec
[ i
j
]
]
;
end
end
end
mx
=
min ( vec
( 1
,
:
) ) ;
Mx
=
max ( vec
( 1
,
:
) ) ;
my
=
min ( vec
( 2
,
:
) ) ;
My
= max ( vec
( 2
,
:
) ) ;

UNI-CTIC

7

i f ( abs (mx−Mx) > abs (my−My) ) Lanm = A\b ; me =
i
f
(
abs (mx−Mx)
> abs (my−My)
)
Lanm
=
A\b ;
me
=
round ( ( my
+
My ) / 2 ) ;
p
o i n t I n t e r
=
+
Lanm ( 2 ) ∗ v1 ;
p1
( 1
,
:
)
=
[mx ,
me
]
;
long =
long
+
p o i n t
Ratio
(
i
,
j
)ˆ2∗
ones ( 2
,
1 ) ) ;
p1
( 2
,
:
)
=
[Mx,
me ] ;
p
o i n t
=
p o i n t I n t e r ;
H
=
0;
e l s e
V
=
1;
long
=
long
+
Ratio
(
i
,
j
)∗ ones ( 2 , 1 ) ) ;
e
l s e
end
me
=
round ( ( mx
+
Mx ) / 2 ) ;
end
p1
( 1
,
:
)
=
[my ,
me
]
;
end
p1
( 2
,
:
)
=
[My,
me ] ;
H
=
1;
V
=
0;
end
r
e
t
=
{p1 H V};
function
p
=
I d e n t i f S q u a r e O f O b j e c t I n T a b l e r o
( Coor ,
P
o i n t O b j e c t )
[
n
m
r ]
=
s i z e (
Coor ) ;
for
q =1:2 ,
d
=
100;
for
i =1:n ,
j
=
1;
for
j =1:m,
i
f
( ( P o i n t O b j e c t ( q , 1 )
− Coor
(
i
,
j
,
&
( P o i n t O b j e c t ( q , 2 )
Coor ( i ,
j , 2 ) )
1 ) )
>
>
0
0) ,
d1
=
abs
(
P o i n t O b j e c t ( q
, 1 )
j
1 )
) ;
d2
=
abs
(
P o i n t O b j e c t
( q , 2 )
Coor ( i ,
Coor ( i ,
j
,
, 2 ) ) ;
i
f
( d
>
sqrt ( d1 ˆ2
+
d2
ˆ 2 ) )
d
=
sqrt ( d1 ˆ2
+
d2 ˆ 2 ) ;
p ( q , : )
=
[ i
j
]
;
end
end
end
end
end
XII.
FUNCION RATIO
function
Ratio
=
DetermRatio ( Coor )
[
n
m
r ]
=
s i z e ( Coor
) ;
for
i =1:n−1,
for
j =1:m−1,
p e r i m e t r o
=
sqrt
( ( ( [ Coor ( i , j , 1 )
[ Coor ( i +1 , j , 1 ) ,
Coor ( i ,
j
, 2 ) ] ) . ˆ 2 ) ∗ ones ( 2 , 1 ) ) ;
p
e r i m e t r o
=
p e r i m e t r o
Coor ( i +1 , j , 2 ) ] ) . ˆ 2 ) ∗
+
ones ( 2 , 1 ) ) ;
p
e r i m e t r o
=
p e r i m e t r o
+
Coor ( i +1 , j + 1 , 2 ) ] ) . ˆ 2 ) ∗ ones ( 2 , 1 ) ) ;
p
e r i m e t r o
=
p e r i m e t r o
+
Ratio ( i , j )
=
8/ p e r i m e t r o ;
end
end

XIII. DETERMINANDO LA LONGITUD DEL OBJETO,

CUANDO ESTE ESTA VERTICAL

function

long

=

0;

long

=

i n t

p =

o

P o i n t O b j e c t

( 1

,

: )

;

i f

(V)

j

=

p

( 1

for

i =p

i f

, 2 ) ; ( 1

(

, i ˜= p ( 2 , 1 ) )

1 ) :

p ( 2

, 1 )

,

v1

=

P o i n t O b j e c t (

2

,

:

)

p o i n t ;

v2

=

[ Coor ( i +1 , j , 1 ) ,

Coor ( i +1 , j

,

2 ) ] ;

A

=

[ v2 ’ ,

v1 ’ ] ;

 

b

=

(

p o i n t

[

Coor ( i +1 , j +1 ,1) ’;

 

l e n g t h O b j e c t ( Coor , PointObject , p , Ratio ,H,V)