Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Calibração de Câmeras Cap. 6 Trucco & Verri
2
Câmera segue um modelo simples
caixa filme objeto pinhole raios de luz imagem Câmera plano de projeção centro de projeção Projeção cônica “pinhole”
3
Notação Visão OpenGL y' yc p’ zc x' xc sinal !
4
(X,Y,Z)T (x’,y’)T(xim,yim)T
yc y' eixo óptico zc y0 x' oc xc x0 f xim yim y' vista lateral yc oy zc fovy h pixels x' oc ox xim f w pixels
5
(xim,yim)T (x’,y’)T yim y’ sx p' sy 3 oy 2 o x’ 1 xim 1 ox 2 3 4 5
6
(X,Y,Z)T (xim,yim)T
7
Parâmetros intrínsecos com cisalhamento
8
Parâmetros intrínsecos com distorção radial
9
Parâmetros extrínsecos
Translação –Tx, Ty, Tz (3 g.l.) Rotação (3 g.l.)
10
Parâmetros extrínsecos
xc yc zc Pc T yw xw zw Pw
11
Compondo as transformações
parâmetros extrínsecos parâmetros intrínsecos
12
Calibração de câmera Problema: obter os parâmetros extrínsecos (R, T) e intrínsecos (K) da transformação projetiva de câmera. Dados: n pares de pontos correspondentes (Pi, pi) na cena e na imagem.
13
Calibração de câmeras Calibração estimação de parâmetros otimização pontos da cena projeção (função não linear) pontos da imagem
14
Método de Tsai (compativel com notação do OpenGL)
X c Y c Z c p’ y' x'
15
Câmera para imagem
16
Concatenando
17
Os passos do Método de Tsai
Assuma: conhecidos Distorção radial insignificante
18
Método de Tsai
19
Método de Tsai Passo 1:
20
Método de Tsai Passo 1:
21
Correspondência
22
Sistema Ax=0 Compute v by SVD decomposition of A=UDVT (The solution
vector is the column of V corresponding to null (or smallest) singular value) in D.
23
Estimativa dos parâmetros da câmera
Fator de escala
24
Sinal do fator de escala
Sinal de Como: Temos Caso isto não seja verdade troque o sinal de v
25
Estimativa do fator
26
Última linha da matriz de rotação
Reortogonalize:
27
Cáculo de fx fy e Tz
28
Cáculo de fx fy e Tz
29
Ponto de fuga
30
Cálculo do centro ótico pelos pontos de fuga
31
Passo 2 do Tsai Computing Image Center v3 v2 v1
32
Pontos de fuga do padrão 3D
33
Tsai 2D
34
Método de Tsai plano Passo 1: =0
35
Método de Tsai plano
36
Método de Tsai Passo 1:
37
Método de Tsai
38
Sinal de Logo Caso isto não seja verdade troque o sinal de
escolha um sinal Logo Caso isto não seja verdade troque o sinal de
39
Fator de escala escolha um sinal escolha um sinal corrija a escolha
40
Cáculo de fx fy e Tz
41
Implementation of “A Flexible New Technique for Camera Calibration”
based on the report of: Zhengyou Zhang December 2, 1998
42
Notação do artigo de Zhang:
y Y x X
43
Determinação de uma Homografia
44
y Y x X 2 equações por ponto. 9 (8) incógnitas
45
int homography(int nPoints, double. modelPoints, double
int homography(int nPoints, double* modelPoints, double* imagePoints, double* H) { int k; double* L=(double*)malloc(2*nPoints*9*sizeof(double)); /* L is a 2nx9 matrix where Lij is in L[9*i+j] */ /* Assembles coeficiente matrix L */ for(k=0; k<nPoints; k++) { double X=modelPoints[3*k+0]; /* X coord of model point k */ double Y=modelPoints[3*k+1]; /* Y coord of model point k */ double W=modelPoints[3*k+2]; /* W coord of model point k */ double x=imagePoints[2*k+0]; /* x coord of image point k */ double y=imagePoints[2*k+1]; /* y coord of image point k */ int i=2*k; /* line number in matrix L */ L[9*i+0] = X; L[9*i+1] = Y; L[9*i+2] = W; L[9*i+3] = 0; L[9*i+4] = 0; L[9*i+5] = 0; L[9*i+6] = -x*X; L[9*i+7] = -x*Y; L[9*i+8] = -x*W; i=2*k+1; L[9*i+0] = 0; L[9*i+1] = 0; L[9*i+2] = 0; L[9*i+3] = X; L[9*i+4] = Y; L[9*i+5] = W; L[9*i+6] = -y*X; L[9*i+7] = -y*Y; L[9*i+8] = -y*W; } solveAx0(2*nPoints,9,L,H); /* solves the system [L]{h}={0} */ free(L); return 0;
46
Minimização (Levenberg-Marquardt)
Tome H como solução inicial Minimize: onde:
47
int homography(int nPoints, double. modelPoints, double
int homography(int nPoints, double* modelPoints, double* imagePoints, double* H) { int k; double* L=(double*)malloc(2*nPoints*9*sizeof(double)); /* L is a 2nx9 matrix where Lij is in L[9*i+j] */ /* Assembles coeficiente matrix L */ for(k=0; k<nPoints; k++) { double X=modelPoints[3*k+0]; /* X coord of model point k */ double Y=modelPoints[3*k+1]; /* Y coord of model point k */ double W=modelPoints[3*k+2]; /* W coord of model point k */ double x=imagePoints[2*k+0]; /* x coord of image point k */ double y=imagePoints[2*k+1]; /* y coord of image point k */ int i=2*k; /* line number in matrix L */ L[9*i+0] = X; L[9*i+1] = Y; L[9*i+2] = W; L[9*i+3] = 0; L[9*i+4] = 0; L[9*i+5] = 0; L[9*i+6] = -x*X; L[9*i+7] = -x*Y; L[9*i+8] = -x*W; i=2*k+1; L[9*i+0] = 0; L[9*i+1] = 0; L[9*i+2] = 0; L[9*i+3] = X; L[9*i+4] = Y; L[9*i+5] = W; L[9*i+6] = -y*X; L[9*i+7] = -y*Y; L[9*i+8] = -y*W; } solveAx0(2*nPoints,9,L,H); /* solves the system [L]{h}={0} */ if (OPTIMIZE) { double lmH[9]; lmHomography(imagePoints,modelPoints,H,nPoints,lmH); mtxMatCopy(lmH,3,3,H); free(L); return 0;
48
Restrições na matriz de parâmetros intrínsicos
49
Das homografias para parâmetros intrínsecos
onde: e 2 equações por homografia. 6 incógnitas
50
void calcB(int nH, double* H, double* B)
{ int m = 2*nH; int n = 6; double* V =(double*) calloc(sizeof(double),m*n); double* b =(double*) malloc(sizeof(double)*n); int i; for(i=0;i<nH;i++){ double* h = &H[9*i]; int line1 = 2*n*i; int line2 = line1+6; V[line1+0]=h[0]*h[1]; V[line1+1]=h[0]*h[4] + h[3]*h[1]; V[line1+2]=h[3]*h[4]; V[line1+3]=h[0]*h[7]+h[6]*h[1]; V[line1+4]=h[3]*h[7]+h[6]*h[4]; V[line1+5]=h[6]*h[7]; V[line2+0]=h[0]*h[0] - h[1]*h[1]; V[line2+1]=2*(h[0]*h[3] - h[1]*h[4]); V[line2+2]=h[3]*h[3] - h[4]*h[4]; V[line2+3]=2*(h[0]*h[6] - h[1]*h[7]); V[line2+4]=2*(h[3]*h[6] - h[4]*h[7]); V[line2+5]=h[6]*h[6] - h[7]*h[7]; if (NORMALIZE) { mtxNormalizeVector(6,&V[line1]); mtxNormalizeVector(6,&V[line2]); } solveAx0(m,n,V,b); /* solves the system [V]{x}={0} */ i=0; B[i++]=b[0]; B[i++]=b[1]; B[i++]=b[3]; B[i++]=b[1]; B[i++]=b[2]; B[i++]=b[4]; B[i++]=b[3]; B[i++]=b[4]; B[i++]=b[5]; free(b); free(V);
51
Cálculo da matrix A
52
/* Get intrinsic parameters from matrix B*/
int calcA(double* B, double* A) { double alpha,betha,gamma,u0,v0,lambda; double den=B[0]*B[4]-B[1]*B[1]; if (fabs(den)< TOL ) return 0; v0 = (B[1]*B[2]-B[0]*B[5])/den; if (fabs(B[0])<TOL) return 0; lambda = B[8]-(B[2]*B[2]+v0*(B[1]*B[2]-B[0]*B[5]))/B[0]; if (lambda/B[0]<0) return 0; alpha=sqrt(lambda/B[0]); if ((lambda*B[0]/den)<0) return 0; betha = sqrt(lambda*B[0]/den); gamma = - B[1]*alpha*alpha*betha/lambda; u0=gamma*v0/betha-B[2]*alpha*alpha/lambda; A[0]=alpha; A[1]=gamma; A[2]=u0; A[3]=0; A[4]=betha; A[5]=v0; A[6]=0; A[7]=0; A[8]=1; return 1; }
53
Cálculo de R e t
54
Calibração de Zhang para uma câmera “boa”
yim yc y' eixo óptico zc y0 x' oc xc x0 f xim yim y' vista lateral yc oy zc fovy h pixels x' oc ox xim f w pixels
55
Notação do artigo de Zhang:
y Y x X
56
Determinação de uma Homografia
57
y Y x X 2 equações por ponto. 9 (8) incógnitas
58
int homography(int nPoints, double. modelPoints, double
int homography(int nPoints, double* modelPoints, double* imagePoints, double* H) { int k; double* L=(double*)malloc(2*nPoints*9*sizeof(double)); /* L is a 2nx9 matrix where Lij is in L[9*i+j] */ /* Assembles coeficiente matrix L */ for(k=0; k<nPoints; k++) { double X=modelPoints[3*k+0]; /* X coord of model point k */ double Y=modelPoints[3*k+1]; /* Y coord of model point k */ double W=modelPoints[3*k+2]; /* W coord of model point k */ double x=imagePoints[2*k+0]; /* x coord of image point k */ double y=imagePoints[2*k+1]; /* y coord of image point k */ int i=2*k; /* line number in matrix L */ L[9*i+0] = X; L[9*i+1] = Y; L[9*i+2] = W; L[9*i+3] = 0; L[9*i+4] = 0; L[9*i+5] = 0; L[9*i+6] = -x*X; L[9*i+7] = -x*Y; L[9*i+8] = -x*W; i=2*k+1; L[9*i+0] = 0; L[9*i+1] = 0; L[9*i+2] = 0; L[9*i+3] = X; L[9*i+4] = Y; L[9*i+5] = W; L[9*i+6] = -y*X; L[9*i+7] = -y*Y; L[9*i+8] = -y*W; } solveAx0(2*nPoints,9,L,H); /* solves the system [L]{h}={0} */ free(L); return 0;
59
Minimização (Levenberg-Marquardt)
Tome H como solução inicial Minimize: onde:
60
int homography(int nPoints, double. modelPoints, double
int homography(int nPoints, double* modelPoints, double* imagePoints, double* H) { int k; double* L=(double*)malloc(2*nPoints*9*sizeof(double)); /* L is a 2nx9 matrix where Lij is in L[9*i+j] */ /* Assembles coeficiente matrix L */ for(k=0; k<nPoints; k++) { double X=modelPoints[3*k+0]; /* X coord of model point k */ double Y=modelPoints[3*k+1]; /* Y coord of model point k */ double W=modelPoints[3*k+2]; /* W coord of model point k */ double x=imagePoints[2*k+0]; /* x coord of image point k */ double y=imagePoints[2*k+1]; /* y coord of image point k */ int i=2*k; /* line number in matrix L */ L[9*i+0] = X; L[9*i+1] = Y; L[9*i+2] = W; L[9*i+3] = 0; L[9*i+4] = 0; L[9*i+5] = 0; L[9*i+6] = -x*X; L[9*i+7] = -x*Y; L[9*i+8] = -x*W; i=2*k+1; L[9*i+0] = 0; L[9*i+1] = 0; L[9*i+2] = 0; L[9*i+3] = X; L[9*i+4] = Y; L[9*i+5] = W; L[9*i+6] = -y*X; L[9*i+7] = -y*Y; L[9*i+8] = -y*W; } solveAx0(2*nPoints,9,L,H); /* solves the system [L]{h}={0} */ if (OPTIMIZE) { double lmH[9]; lmHomography(imagePoints,modelPoints,H,nPoints,lmH); mtxMatCopy(lmH,3,3,H); free(L); return 0;
61
Restrições na matriz de parâmetros intrínsicos
62
Das homografias para parâmetros intrínsecos
onde: e
63
Cálculo de R e t
64
Proceedings of SIBGRAPI'98, Rio de Janeiro, Brazil, 1998, pp. 388-399.
65
Equações de projeção
66
Equações de projeção
67
Calibração a partir da matriz
Para cada ponto:
68
Calibração a partir da matriz
Para cada ponto:
69
Calibração a partir da matriz
70
Calibração a partir da matriz
71
Calibração a partir da matriz
72
Calibração no Juiz Virtual
k = 1..n-1 1a Opção
73
Calibração no Juiz Virtual
74
Calibração no Juiz Virtual
2a Opção Mimimiza-se , onde é o resultado obtido pelatransformação encontrada. Problema não linear
75
Calibração no Juiz Virtual
k=1..n Para eliminar a solução trivial H = 0, Onde é o centróide dos pontos próprios Pk.
76
Calibração no Juiz Virtual
A solução desse problema se dá por resolver Minimizar || Mt || sujeito a mTt = 1, onde e M é a representação matricial da transformação, dada por: (2n x 9) É usado o método de multiplicadores de Lagrange, conduzindo ao seguinte sistema linear:
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.