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

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

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

Apresentações semelhantes


Apresentação em tema: "Calibração de Câmera Como determinar o modelo e os parâmetros que transformam a radiância da cena 3D numa imagem digital."— Transcrição da apresentação:

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

2 Mudança de base (revisão)

3 É o processo inverso da camera de rendering

4 Transformações do OpenGL
center eye zo yo xo up xe ye ze xn yn zn

5 GluLookAt yw ye xw ze xe zw
void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); Dados: eye, center, up (definem o sistema de coordenadas do olho) Determine a matriz que leva do sistema de Coordenadas dos Objetos para o sistema de Coordenadas do Olho eye ze ye xe up eye center Coordenadas dos objetos xw yw zw Coordenadas do olho

6 Calculo do sistema - xe ye ze
dados: eye, center, up ye up ze xe eye yo center xo zo

7 Translada o eye para origem
Computação Gráfica Interativa - Gattass 4/11/2018 Translada o eye para origem center eye zo yo xo ze xe ye zo yo xo center eye ze xe ye Modelo de Camera do OpenGL

8 Roda xe ye ze para xw yw zw
Computação Gráfica Interativa - Gattass 4/11/2018 Roda xe ye ze para xw yw zw zo yo xo center eye ze xe ye xe , xo ye , yo ze , zo Modelo de Camera do OpenGL

9 Roda xe ye ze para xw yw zw
Computação Gráfica Interativa - Gattass 4/11/2018 Roda xe ye ze para xw yw zw zo yo xo center eye ze xe ye xe , xo ye , yo ze , zo Modelo de Camera do OpenGL

10 Matriz LookAt do OpenGL

11 OpenGL Model View

12 Real e virtual com uma mesma camera

13 Novos pontos de vista (novos elementos)

14 Extração de feições In my first project, “Juiz Virtual” (Virtual Referee), I developed a camera calibration mechanism where the user had to inform the reference points.

15 Extração de feições In my first project, “Juiz Virtual” (Virtual Referee), I developed a camera calibration mechanism where the user had to inform the reference points.

16 Calibração de camera In my first project, “Juiz Virtual” (Virtual Referee), I developed a camera calibration mechanism where the user had to inform the reference points.

17 “CAMERAS” DE VISÃO E DO OPENGL
Matrizes de posicionamento Matrizes de projeção “CAMERAS” DE VISÃO E DO OPENGL

18 Visão: matriz de parâmetros extrínsicos
zc yc xc pc t yw xw zw pw

19 Projeção cônica simples
y’ p z' x’ n x' z' n y' X Y -Z X x' -Z = n -Z Y y' n = X x' -Z = n

20 yim y’ sx p' sy 3 oy 2 o x’ 1 xim 1 ox 2 3 4 5

21

22 Parâmetros intrínsecos com cisalhamento

23 CALIBRAÇÃO

24 Calibração de camera In my first project, “Juiz Virtual” (Virtual Referee), I developed a camera calibration mechanism where the user had to inform the reference points.

25 Compondo as transformações
parâmetros extrínsecos parâmetros intrínsecos

26 Parâmetros intrínsecos com distorção radial

27 Parâmetros extrínsecos
Translação –Tx, Ty, Tz (3 g.l.) Rotação (3 g.l.)

28 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.

29 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

30 Proceedings of SIBGRAPI'98, Rio de Janeiro, Brazil, 1998, pp. 388-399.

31 Equações de projeção

32 Equações de projeção

33 Calibração a partir da matriz
Para cada ponto:

34 Calibração a partir da matriz
Para cada ponto:

35 Reconstruindo as matrizes

36 Reconstruindo as matrizes

37 Reconstruindo as matrizes

38 MÉTODOS DE TSAI

39 Com notação do OpenGL X c Y c Z c p’ y' x'

40 Câmera para imagem

41 Concatenando

42 Os passos do Método de Tsai
Assuma: conhecidos Distorção radial insignificante

43 Método de Tsai

44 Método de Tsai Passo 1:

45 Método de Tsai Passo 1:

46 Correspondência

47 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.

48 Estimativa dos parâmetros da câmera
Fator de escala

49 Sinal do fator de escala
Sinal de Como: Temos Caso isto não seja verdade troque o sinal de v

50 Estimativa do fator 

51 Última linha da matriz de rotação
Reortogonalize:

52 Cáculo de fx fy e Tz

53 Cáculo de fx fy e Tz

54 Ponto de fuga

55 Cálculo do centro ótico pelos pontos de fuga

56 Passo 2 do Tsai Computing Image Center v3 v2 v1

57 Pontos de fuga do padrão 3D

58 Tsai 2D

59 Coordenada do mundo para a câmera
xc yc zc Pc T yw xw zw Pw

60 Câmera para imagem

61 Concatenando

62 Método de Tsai plano Passo 1: =0

63 Método de Tsai plano

64 Método de Tsai Passo 1:

65 Método de Tsai

66 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 

67 Fator de escala escolha um sinal escolha um sinal corrija a escolha

68 Cáculo de fx fy e Tz

69 Implementation of “A Flexible New Technique for Camera Calibration”
based on the report of: Zhengyou Zhang December 2, 1998

70 Notação do artigo de Zhang:
y Y x X

71 Determinação de uma Homografia

72 y Y x X 2 equações por ponto. 9 (8) incógnitas

73 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;

74 Minimização (Levenberg-Marquardt)
Tome H como solução inicial Minimize: onde:

75 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;

76 Restrições na matriz de parâmetros intrínsicos

77 Das homografias para parâmetros intrínsecos
onde: e 2 equações por homografia. 6 incógnitas

78 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);

79 Cálculo da matrix A

80 /* 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; }

81 Cálculo de R e t

82 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

83 Notação do artigo de Zhang:
y Y x X

84 Determinação de uma Homografia

85 y Y x X 2 equações por ponto. 9 (8) incógnitas

86 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;

87 Minimização (Levenberg-Marquardt)
Tome H como solução inicial Minimize: onde:

88 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;

89 Restrições na matriz de parâmetros intrínsicos

90 Das homografias para parâmetros intrínsecos
onde: e

91 Cálculo de R e t

92 Sem correção

93 Com correção radiométrica

94 Tipos de distorção radial

95 Exemplo de distorção radial
Imagem original Corrigida k1=0.11, k2=0.019

96 Com correção radiométrica e radial

97 Visão: matriz de parâmetros extrínsicos
yc xc pc t zc yw xw zw pw

98 Relação entre matrizes extrínsicas
eye zo = Z yo = Y xo = X up xe= x ye = y ze z

99 Relação entre matrizes extrínsicas
eye zo = Z yo = Y xo = X up xe= x ye = y ze= z

100 Projeção Visão OpenGL y' yc p’ zc x' xc sinal !

101 FIM


Carregar ppt "Calibração de Câmera Como determinar o modelo e os parâmetros que transformam a radiância da cena 3D numa imagem digital."

Apresentações semelhantes


Anúncios Google