Calibracion De Camara.

  • Uploaded by: Royer
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Calibracion De Camara. as PDF for free.

More details

  • Words: 6,136
  • Pages: 7
UNI-CTIC

1

C´alculo de distancias y a´ reas en una imagen Canales Cuba, Manolo Torres Guill´en, Diego Ticse Torres, Royer Romero Catay, Angelo Lima, 4 de Agosto del 2009

Resumen—En el siguiente trabajo, se obtuvo un programa hecho en Matlab el cual mediante un patr´on o escala en 2-D se ˜ de la longitud o a´ rea de un objeto cuya puede hallar el tamano im´agen es capturada con una camara que previamente ha sido calibrada con el patr´on inicial. ˜ de objetos en Index Terms—Calibraci´on de c´amara, Tamano 2-D

I.

´ I NTRODUCCI ON

Supongamos que queremos encontrar el tama˜no de la longitud o a´ rea de un objeto, entonces se procede a medir con un patr´on de longitud o calcular mediante f´ormulas el a´ rea del objeto; si queremos automatizar este proceso, tendremos que aprovechar la herramienta del Matlab y su versatilidad en el tratamiento de im´agenes para lograr encontrar la longitud deseada. Existen varios m´etodos 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 patr´on, y mediante una c´amara se obtiene una im´agen de la cual se calc´ula las distancias(el n´umero de pixeles) entre los pixeles que tienen el mismo color y comparando esta distancia con el tama˜no real de la cuadr´ıcula se puede hallar una relaci´on que permite calibrar la c´amara. Luego con la misma c´amara y en el mismo escenario, se obtienen im´agenes de objetos y a partir de ellos mediante un tratamiento se halla el n´umero de pixeles ocupados por el objeto y con la relaci´on hallada previamente se puede calcular el tama˜no de la longitud o a´ rea del objeto. II.

sistema de referencia inercial, dado estas consideraciones, el primer problema a tener es como calibrar la c´amara, 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 c´amara previamente calibrada. ´ DE DATOS IV. D ESCRIPCI ON Los datos que se han usado para trabajar provienen de im´agenes 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. 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:

O BJETIVOS

El objetivo general del trabajo es calcular el tama˜no de la longitud o a´ rea de objetos simples para lo cual se deber´a desarrollar un programa hecho en Matlab que permita hallar, con la ayuda de una camara, dicho tama˜no. II-A.

Objetivos espec´ıficos Dise˜nar la plantilla bidimensional o patr´on. Calcular los par´ametros de la c´amara (calibraci´on). Hallar el tama˜no de un objeto. III.

P LANTEAMIENTO 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

Figura 2. Imagen que sirve con el objeto en el tablero

Y finalmente se toma una imagen del tablero solo tambi´en: ´ DE DATOS V. P REPARACI ON 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

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 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. Despu´es para determinar las l´ıneas horizontales del tablero , se pasa la convoluci´on de la imagen mediante la funci´on GradientHorizontalImg ,en donde el par´ametro 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 ( i m g G r i s ) Gx = conv2 ( i m g G r i s , [ 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. Mediante la funci´on slimming ,cuya entrada es la uni´on de las dos im´agenes sacadas en los pasos anteriores. Adelgaza las l´ıneas obtenidas de la convoluci´on de tal manera que sean de ancho un pixel. function imgHoriz = slimming ( imgHoriz ) [ f c ] = s i z e ( imgHoriz ) ; for k = 1:4 , f o r i = 2 : f −1, f o r j = 2 : c −1, i f ( imgHoriz ( i , j ) ) i f ( ( i m g H o r i z ( i −1, j ) && i m g H o r i z ( i +1 , j ) ) | | ( k == 4 & i m g H o r i z ( i −1, j ) ) ) i m g H o r i z ( i −1, j ) = 0 ; i m g H o r i z ( i +1 , j ) = 0 ; end end end end end

Imagen del tablero: A esta imagen se le va sacar el objeto para transportarlo a una nueva imagen con las dimensiones de la anterior esto se hace compar´andolo 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 funci´on indetificObjec. for i =1:n , f o r j = 1 :m, c o l o r = imgHsv ( i , j , 1 ) ; s a t u r a c = imgHsv ( i , j , 2 ) ;

Luego a la imagen se erosi´on con el comando imerode 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. VI.

´ P ROCEDIMIENTO DE S OLUCI ON

Para hallar la soluci´on del problema se ha seguido los siguientes pasos: Plantilla bidemencional. 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 horizontales mediante la funci´on Horizontales(). 4. Hallamos las ecuaciones de las rectas con la funci´on rectas(). 5. para las verticales calculamos primero la transpuesta y realizamos los pasos anteriores. 6. Determinamos los puntos de interseccion en la funci´on findPoints(). 7. Pintamos los puntos con la funci´on PrintfPointsBoard(). 8. Calculamos los parametros de la c´amara en la matriz Ratio mediante la funci´on 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 funci´on IndentificObject(), esta funcion tambien permite identificar al objeto con¡mo horizontal o vertical. 3. El rango HSV del objeto lo determinamos previamente usando la funci´on 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 funci´on IdentifSquareObjectInTablero(). 6. Finalmente determinamos la longitud del objeto mediante la funci´on lengthObject() usando el parametro Ratio de la c´amara.

UNI-CTIC

3

Funci´on rectas() Luego mediante la funci´on rectas(), se toma la imagen en escala de grises , se calcula el gradiente horizontal usando la funci´on 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 ecuaci´on de la recta en la funci´on EcuacAdjustm(). f u n c t i o n R e c t a = r e c t a s ( imgRgb , Max Lines , c o r r y x ) i m g G r i s = r g b 2 g r a y ( imgRgb ) ; Gx = G r a d i e n t H o r i z o n t a l I m g ( i m g G r i s ) ; G2x = G r a d i e n t H o r i z o n t a l I m g ( 1 − i m g G r i s ) ; i m g H o r i z = s u p e r P o s i t i o n ( Gx , G2x ) ; imgHoriz = slimming ( imgHoriz ) ; M = H o r i z o n t a l e s ( imgHoriz , Max Lines , imgRgb ) ;

Figura 4. Diagrama de bloques

VII.

´ DEL P ROBLEMA S OLUCI ON

Plantilla bidimencional. Aqu´ı explicaremos como se llego a obtener los parametros de la c´amara: Primero capturamos la imagen del tablero imgTablero, Funci´on Horizontales() Mediante la funci´on 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. function List Rectas = Horizontales ( horiz , Max Lines , imgRgb ) [ f c ] = size ( horiz ); STEP LENG = 1 6 ; NUMB = [ 1 : STEP LENG + 1 ] ; ONES = o n e s ( 1 , STEP LENG + 1 ) ; seguir = 0; lineas = 1; cont = 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; w h i l e i <= f −2∗STEP LENG , j = 10; w h i l e j <= c−2∗STEP LENG , . . . end i f ( ( l i n e a s −1)/2 >= Max Lines ) break ; end j = j + 1;

R e c t a = E c u a c A d j u s t m (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 ( i m g G r i s ) Gx = conv2 ( i m g G r i s , [ 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 = ( Gx > 0 . 9 5 ) ; Bg2x = ( G2x > 0 . 9 5 ) ; h o r i z = ( Bgx ) | ( Bg2x ) ; f u n c t i o n R e c t a = E c u a c A d j u s t m (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 s e e n c o n t r a r o n r e c t a s ’ ) ; return ; end q = 1; i f corr yx , for i =1:n , N( i − 1 + 2∗mod ( i , 2 ) , : ) = M( i , : ) ; end M = N; end for i =1:2: n , Sx = M( i , : ) ∗ o n e s (m, 1 ) ; Sy = M( i + 1 , : ) ∗ o n e s (m, 1 ) ; Sxy = (M( i , : ) . ∗M( i + 1 , : ) ) ∗ o n e s (m, 1 ) ; Sx2 = (M( i , : ) . ∗M( i , : ) ) ∗ o n e s (m, 1 ) ; Sy2 = (M( i + 1 , : ) . ∗M( i + 1 , : ) ) ∗ o n e s (m, 1 ) ; R e c t a ( 1 , q ) = ( Sxy − Sx∗Sy /m ) / ( Sx2 − Sx ˆ 2 /m ) ; i f ( (m∗Sx2 − Sx ˆ 2 ) == 0 ) , R e c t a ( 2 , q ) = M( i , 1 ) ; else R e c t a ( 2 , q ) = ( Sy∗Sx2 − Sx∗Sxy ) / ( m∗Sx2 − Sx ˆ 2 ) ; end q = q + 1; end

Funci´on findpoints() Luego usando la funci´on findPoints(), hallamos los puntos de intersecci´on de las rectas horizontales y verticales. f u n c t i o n Coor = f i n d P o i n t s ( R e c t a s x , R e c t a s y ) [ f n ] = s i z e ( Rectas x ) ; [ f m] = s i z e ( R e c t a s y ) ; for i =1:n , f o r j = 1 :m, m1 = R e c t a s x ( 1 , i ) ; b1 = R e c t a s x ( 2 , i ) ; m2 = R e c t a s y ( 1 , j ) ; b2 = R e c t a s y ( 2 , j ) ; i f i s n a n ( m1 ) , Coor ( i , j , : ) = [ b1 , b1 ∗m2 + b2 ] ;

UNI-CTIC

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

Funci´on printPointBoard() Con esta funci´on pintamos los puntos de interseccion de color azul f u n c t i o n 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 , f o r j = 1 :m, imgRgb= p r i n t P o i n t ( round ( Coor ( i , j , 1 ) ) , round ( Coor ( i , j , 2 ) ) , imgRgb , ’ b ’ ) ; end end

Funci´on DetermRatio : Esta funci´on tiene como entrada , la matriz Coor y nos devuelve una matriz con la relaci´on cent´ımetro/ p´ıxel (Ratio(i,j)) en cada celda del tablero . Para hallar tal relaci´on 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 relaci´on (8/perimetro). f u n c t i o n R a t i o = D e t e r m R a t i o ( Coor ) [ n m r ] = s i z e ( Coor ) ; f o r i = 1 : n −1, f o r j = 1 :m−1, p e r i m e t r o = s q r t ( ( ( [ Coor ( i , j , 1 ) , Coor ( i , j , 2 ) ] − [ Coor ( i +1 , j , 1 ) , Coor ( i , j , 2 ) ] ) . ˆ 2 ) ∗ ones ( 2 , 1 ) ) ; perimetro = perimetro + s q r t ( ( ( [ 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 ) ) ; perimetro = perimetro + s q r t ( ( ( [ Coor ( i , j + 1 , 1 ) , Coor ( i , j + 1 , 2 ) ] − [ Coor ( i +1 , j + 1 , 1 ) , Coor ( i +1 , j + 1 , 2 ) ] ) . ˆ 2 ) ∗ ones ( 2 , 1 ) ) ; perimetro = perimetro + s q r t ( ( ( [ 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/ perimetro ; end end

Por ultimo para el calculo de longitud utilizaremos esta matriz Ratio, que servir´a para la transformacion de pixeles a cent´ımetros por cada celda. Longitud del Objeto. Funci´on IndentificObject : Mediante esta funci´on, vamos a determinar la posici´on del objeto en el tablero ubic´andolo dentro de un rect´angulo. Esta funci´on tiene como par´ametros de entrada la imagen con el objeto de gu´ıa (RanbgHSV) y la imagen del tablero con el objeto (img), y tiene como salida una matriz double 2x2 (p1) y dos par´ametros H y V double (con valores 1 o 0). Esta funci´on tiene varias partes la cual pasaremos a explicar.

4

La primera parte del problema es preparar a la imagen del tablero m´as la imagen (img) para ser trabajada, cosa que ya explicamos anteriormente. La parte que continua es ya con la imagen que sale despu´es del proceso anterior, en esta parte se pasa determinar el rect´angulo 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. Adem´as se determina si el objeto esta vertical o horizontalmente puesto d´andole valeres de 1 o 0 a H y V seg´un corrsponda. mx = min ( v e c ( 1 , : ) ) ; Mx = max ( v e c ( 1 , : ) ) ; my = min ( v e c ( 2 , : ) ) ; My = max ( v e c ( 2 , : ) ) ; i f ( abs ( mx−Mx) > abs ( my−My) ) me = round ( ( my + My ) / 2 ) ; p1 ( 1 , : ) = [ mx , me ] ; p1 ( 2 , : ) = [Mx, me ] ; H = 0; V = 1; else me = round ( ( mx + Mx ) / 2 ) ; p1 ( 1 , : ) = [ my , me ] ; p1 ( 2 , : ) = [My, me ] ; H = 1; V = 0; end r e t = { p1 H V}

Funci´on IdentifSquareOfObjectInTablero : Esta funci´on tiene como par´ametros de entrada las coordenadas de todos los puntos de intersecci´on 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 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; f o r j = 1 :m, i f ( ( 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 > s q r t ( d1 ˆ 2 + d2 ˆ 2 ) ) d = s q r t ( d1 ˆ 2 + d2 ˆ 2 ) ; p(q , : ) = [ i j ]; end end end end end

Funci´on lengthObject : Esta funci´on determina la longitud del objeto dependiendo en que posici´on se encuentre (ya sea vertical o

UNI-CTIC

horizontal). Para medir la longitud del objeto esta funci´on lo hace por pedazos , ya que la relaci´on 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: i f (V) j = p(1 ,2); f o r 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 = ( p o i n t −[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 + R a t i o ( i , j ) ∗ s q r t ( ( p o i n t I n t e r −p o i n t ) . ˆ 2 ∗ ones ( 2 , 1 ) ) ; point = pointInter ; else long = long + R a t i o ( i , j ) ∗ s q r t ( ( p o i n t −P o i n t O b j e c t ( 2 , : ) ) . ˆ 2 ∗ ones ( 2 , 1 ) ) ; end end end

5

VIII.

E XPERIMENTO

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:

An´alogo si es horizontal. Funci´on rang hsv: Figura 5. Tablero

Esta funci´on 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.

img hsv v = for

Entrada del objeto:

f u n c t i o n v = rang hsv ( cad ) ; = double ( imread ( cad ) ) . / 2 5 5 ; = rgb2hsv ( img ) ; []; i =1:3 , h1 = min ( min ( hsv ( : , : , i ) ) ) ; h2 = max ( max ( hsv ( : , : , i ) ) ) ; v = [ v h1 h2 ] ;

end

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

ANEXO X.

P ROGRAMA P RINCIPAL

function ObjectDetected (x , y ) close all i m g T a b l e r o = d o u b l e ( i m r e a d ( ’ \ I m a g e n e s \ img16 . j p g ’ ) ) ; Coor = P o i n t s C h e s s ( x , y , i m g T a b l e r o ) ; img = d o u b l e ( i m r e a d ( ’ . . \ I m a g e n e s \ img9 . j p g ’ ) ) . / 2 5 5 ; RangHSV = r a n g h s v ( ’ . . \ I m a g e n e s \ 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 ) ;

Figura 7. Captura de puntos

IX.

C ONCLUSIONES

Se logr´o implementar una plantilla bidimensional con cuadr´ıculas de 2 cm2 . Con la ayuda de la plantilla se pudo calibrar la c´amara web. Con el desarrollo de un programa hecho en Matlab se pudo hallar la longitud de objetos lineales en posici´on horizontal y vertical. R EFERENCIAS [1] [R. C. Gonz´alez, R. E. Woods; Digital image processing; AddisonWesley, 2007 ] [2] [J. R. Parker; Algorithms for image processing and computer vision; Wiley, 1997.] [3] [E.Cuevas, D. Zaldivar, Visi´on por computador utilizando Matlab ] disponible en la web: http://www.pdfcoke.com/doc/23371/Procesamiento-de-imagenes-conMatlab

P o i n t O b j e c t = h {1}; H = h {2}; V = h {3}; P o i n t O b j e c t I n U V = 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 PointObject ); R a t i o = D e t e r m R a t i o ( Coor ) ; l o n g = l e n g t h O b j e c t ( Coor , P o i n t O b j e c t , P o i n t O b j e c t I n U V , R a t i o , H, V)

XI.

IDENTIFICA EL OBJETO POR RANGO HSV

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 p ] = s i z e ( imgHsv ) ; for i =1:n , f o r 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 = i m e r o d e ( i m g O b j e t , o n e s ( 3 ) ) ; i m g D i l a = i m d i l a t e ( imgErode , o n e s ( 3 ) ) ; [ n m] = s i z e ( i m g D i l a ) ; vec = [ ] ; for i = 1: n , f o r j = 1 :m, i f imgDila ( i , j ) , vec = [ vec [ i j ] ’ ] ; end end end mx = min ( v e c ( 1 , : ) ) ; Mx = max ( v e c ( 1 , : ) ) ; my = min ( v e c ( 2 , : ) ) ; My = max ( v e c ( 2 , : ) ) ;

UNI-CTIC

7

i f ( abs ( mx−Mx) > abs ( my−My) ) me = round ( ( my + My ) / 2 ) ; p1 ( 1 , : ) = [ mx , me ] ; p1 ( 2 , : ) = [Mx, me ] ; H = 0; V = 1; else me = round ( ( mx + Mx ) / 2 ) ; p1 ( 1 , : ) = [ my , me ] ; p1 ( 2 , : ) = [My, me ] ; H = 1; V = 0; end r e t = { p1 H V} ; f u n c t i o n 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 , . . . PointObject ) [ n m r ] = s i z e ( Coor ) ; for q =1:2 , d = 100; for i =1:n , j = 1; f o r j = 1 :m,

Lanm = A\b ; p o i n t I n t e r = p o i n t + Lanm ( 2 ) ∗ v1 ; long = long + Ratio ( i , j )ˆ2∗ ones ( 2 , 1 ) ) ; point = pointInter ; else long = long + Ratio ( i , j )∗ ones ( 2 , 1 ) ) ; end end end

i f ( ( 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 > s q r t ( d1 ˆ 2 + d2 ˆ 2 ) ) d = s q r t ( d1 ˆ 2 + d2 ˆ 2 ) ; p(q , : ) = [ i j ]; end end end end end

XII.

F UNCION R ATIO

f u n c t i o n R a t i o = D e t e r m R a t i o ( Coor ) [ n m r ] = s i z e ( Coor ) ; f o r i = 1 : n −1, f o r j = 1 :m−1, p e r i m e t r o = s q r t ( ( ( [ Coor ( i , j , 1 ) [ Coor ( i +1 , j , 1 ) , Coor ( i , j , 2 ) ] ) . ˆ 2 ) ∗ o n e s ( 2 , 1 ) ) ; perimetro = perimetro + Coor ( i +1 , j , 2 ) ] ) . ˆ 2 ) ∗ o n e s ( 2 , 1 ) ) ; perimetro = perimetro + Coor ( i +1 , j + 1 , 2 ) ] ) . ˆ 2 ) ∗ o n e s ( 2 , 1 ) ) ; perimetro = perimetro + Ratio ( i , j ) = 8/ perimetro ; end end

XIII.

D ETERMINANDO LA LONGITUD DEL OBJETO , CUANDO ESTE ESTA VERTICAL

f u n c t i o n l o n g = l e n g t h O b j e c t ( Coor , P o i n t O b j e c t , p , R a t i o , H, V) long = 0; point = PointObject ( 1 , : ) ; i f (V) j = p(1 ,2); f o r 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 ) ] ; A = [ v2 ’ , −v1 ’ ] ; b = ( p o i n t − [ Coor ( i +1 , j + 1 , 1 ) ’ ;

Related Documents

Calibracion De Camara.
June 2020 20
Camara
November 2019 32
Camara (aula De Intro
November 2019 21
Camara De Ispeccion.pdf
November 2019 18
Camara De Comercio.docx
April 2020 11

More Documents from "david herrera"

Calibracion De Camara.
June 2020 20
Eliminacion Gaussiana.
June 2020 16
Cinematica
June 2020 22
April 2020 26
Patrick.docx
November 2019 19