Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouBenedicto Moreira Azambuja Alterado mais de 6 anos atrás
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
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.