A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Calibração de Câmeras Cap. 6 Trucco & Verri.

Cópias: 1
Calibração de Câmera Como determinar o modelo e os parâmetros que transformam a radiância da cena numa imagem digital.

Apresentações semelhantes


Apresentação em tema: "Calibração de Câmeras Cap. 6 Trucco & Verri."— Transcrição da apresentação:

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:


Carregar ppt "Calibração de Câmeras Cap. 6 Trucco & Verri."

Apresentações semelhantes


Anúncios Google