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

Slides:



Advertisements
Apresentações semelhantes
Visualização do OpenGL
Advertisements

Z Y X [0 1 0] [1 0 1]. Z Y X [0 1 0] [1 0 1] a x y z b c For cubic: a = b = c = ao [001] [210] [100] [111] [120] 1½0 -2/311.
VHDL Very High Speed Integrated Circuit Hardware Description Language Prof. Eduardo Todt 2008.
Dúvidas surgidas na aula prática de BCB. 2 Alocação de espaços int m = 3; // THE NUMBER OF ROWS. int n = 5; // THE NUMBER OF COLUMNS. data = new long.
Caracteristicas de Imagens II Fitting. Etapas p Borda Borda=cadeia de pixels Borda=tem um modelo Finding Connected Components Fitting.
Renderização de Isosuperficies Baseada em Cell Projection Marcos Machado 10/12/2004.
Um pouco mais sobre modelos de objetos. Ray Path Categorization Ray Path Categorization. Nehab, D.; Gattass, M. Proceedings of SIBGRAPI 2000, Brazil,
Parâmetros Geométricos de Câmeras
Calibração de Câmera Como determinar o modelo e os parâmetros que transformam a radiância da cena numa imagem digital.
Visão estéreo - correspondência e reconstrução -
2. Rotação e Vibração Relembrando a aproximação de BO:
SIMULAÇÃO E ANÁLISE DE TENSÕES RESIDUAIS TÉRMICAS EM CILINDROS Eleir Mundim Bortoleto Cristiano Fernandes Lagatta Roberto Martins de Souza.
GEOMETRIA DE ESPAÇOS CURVOS
(projetado sobre o plano)
EQUILÍBRIO DINÂMICO DE UMA MASSA EM TRANSLAÇÃO - 2º Lei de Newton
Registro de Carta Topográfica
Técnicas de Processamento Imagens
HAND: Height Above the Nearest Drainage
Processamento Digital de Imagens
Reômetros e viscosímetros
Juiz Virtual: uma aplicação de modelagem baseada em imagens Paulo Cezar P. Carvalho (IMPA) Flávio Szenberg (PUC-Rio) Marcelo Gattass (PUC-Rio)
Estatística Dados valores (amostras) de variáveis aleatórias X 1, X 2,..., X n, cuja distribuição conjunta é desconhecida, inferir propriedades desta distribuição.
Aula 1 – 10/09 Introdução ao Curso Marcelo Paiva
Modelos de Iluminação e Tonalização
TE 054 CIRCUITOS ELETRÔNICOS LINEARES
TE 043 CIRCUITOS DE RÁDIO-FREQÜÊNCIA
Interpolação Introdução Conceito de Interpolação
Aritmética de ponto flutuante Erros
8.EQUAÇÕES DIFERENCIAIS ORDINÁRIAS Parte 2
8.EQUAÇÕES DIFERENCIAIS ORDINÁRIAS Parte 5
Resolução de Sistemas Não-Lineares- Parte 1
Sistemas Lineares Parte 2
Resolução de Sistemas Lineares- Parte 1
7. INTEGRAÇÃO NUMÉRICA Parte 1
Função Afim O propósito desta sessão é estudar a função afim por meio de atividades interdisciplinares e contextualizadas. Pretende-se: analisar a dependência.
Otimização Aplicada ao Dimensionamento e Operação de Reservatórios
Análise do Desempenho dos Modelos
Formação de Imagem - Sampling
Visão Computacional Geometria de Transformações
Visão Computacional Shape from Shading e Fotométrico Eséreo
Formação de Imagem - Aquisição
Visão Computacional Calibração de Câmeras
Visão Computacional Formação da Imagem
Visão Computacional Formação da Imagem
Visão Computacional Radiometria
Visão Computacional Visão Estéreo
Robótica: Sistemas Sensorial e Motor
Visão Computacional Visão Estéreo
Computação Gráfica Geometria de Transformações
Computação Gráfica Visualização 3D
Computação Gráfica Geometria de Transformações
Processamento de Pixel
OpenGL Computação Gráfica. O que é OpenGL? Uma linguagem de programação gráfica de baixo nível Projetada para gráfico interativo 2D e 3D Uma interface.
Computação Gráfica Geometria de Transformações
8. Uma Função de duas Variáveis Aleatórias
Renderização de cenas por traçado de raios na Placa Gráfica Fabiano Segadaes Romeiro Sistemas Gráficos 3D IMPA.
Tópicos Especiais em Aprendizagem Reinaldo Bianchi Centro Universitário da FEI 2012.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
Carlos Oliveira Sumário Descrição e Objetivo O Método de Tsai Implementação Resultados obtidos Melhoramentos.
Computação Gráfica Geometria de Transformações
Cursor Professor Esp. Diego André Sant’Ana
Curva de Remanso Direct Step Method.
11/09/07 Visão Computacional e Realidade Aumentada César Palomo – inf. puc-rio. br 1 Visão Computacional e Realidade Aumentada Prof Marcelo Gattass.
Visão Computacional Geometria de Transformações Luiz M. G. Gonçalves.
Computação Gráfica MO603/MC930 Viewing (Definindo volume de visualização)
Geometria projetiva e suas aplicações em visão
Sistemas de Controle III N8SC3
Geometria Epipolar Correspondência a partir da calibração das câmeras ou Forma a partir de correspondências.
Calibração de Câmera Como determinar o modelo e os parâmetros que transformam a radiância da cena 3D numa imagem digital.
Computação Gráfica: Câmera Virtual Prof. Rafael Vieira
Transcrição da apresentação:

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

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”

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

(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

(xim,yim)T (x’,y’)T yim y’ sx p' sy 3 oy 2 o x’ 1 xim 1 ox 2 3 4 5

(X,Y,Z)T  (xim,yim)T

Parâmetros intrínsecos com cisalhamento

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

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

Parâmetros extrínsecos xc yc zc Pc T yw xw zw Pw

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

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.

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

Método de Tsai (compativel com notação do OpenGL) X c Y c Z c p’ y' x'

Câmera para imagem

Concatenando

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

Método de Tsai

Método de Tsai Passo 1:

Método de Tsai Passo 1:

Correspondência

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.

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

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

Estimativa do fator 

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

Cáculo de fx fy e Tz

Cáculo de fx fy e Tz

Ponto de fuga

Cálculo do centro ótico pelos pontos de fuga

Passo 2 do Tsai Computing Image Center v3 v2 v1

Pontos de fuga do padrão 3D

Tsai 2D

Método de Tsai plano Passo 1: =0

Método de Tsai plano

Método de Tsai Passo 1:

Método de Tsai

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

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

Cáculo de fx fy e Tz

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

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

Determinação de uma Homografia

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

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;

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

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;

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

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

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

Cálculo da matrix A

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

Cálculo de R e t

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

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

Determinação de uma Homografia

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

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;

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

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;

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

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

Cálculo de R e t

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

Equações de projeção

Equações de projeção

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

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

Calibração a partir da matriz

Calibração a partir da matriz

Calibração a partir da matriz

Calibração no Juiz Virtual k = 1..n-1 1a Opção

Calibração no Juiz Virtual

Calibração no Juiz Virtual 2a Opção Mimimiza-se , onde é o resultado obtido pelatransformação encontrada. Problema não linear

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.

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: