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

Slides:



Advertisements
Apresentações semelhantes
Figura 5 - O plano mostrando detalhes da projeção em perspectiva.
Advertisements

SLIDE 1 – Transformações - Translação
Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro Conteúdo: - Transformações geométricas no plano.
Real Time Rendering.
Tecnologia de Comando Numérico
Paulo Sérgio Rodrigues PEL205
Operações Algébricas Operações Topológicas
Prof. Renato Medeiros PUC Goiás
Análise de regressão linear simples: abordagem matricial
Transformações espaciais geométricas
O que é Iluminação? Fenômeno físico resultante da interação de fótons com uma superfícieFenômeno físico resultante da interação de fótons com uma superfície.
Introdução à Computação Gráfica Geometria
Quantização e Dithering
Parte 1 – Conceitos de Real Time Rendering. a. Pipeline Gráfico.
Introdução à Computação Gráfica Colorização
Equipamentos 3/25/2017 Equipamentos Computação Gráfica - Gattass.
Estrutura e movimento a partir de imagens
Transformações Geométricas
Transformações Geométricas Coordenadas Homogêneas e Rotações.
Visão computacional.
Algoritmo de Rastreamento de Raios
Parâmetros Geométricos de Câmeras
Calibração de Câmeras Cap. 6 Trucco & Verri.
MGattass Algoritmo de Rastreamento de Raios. MGattass Registros da camera obscura (latim) 1.Mo-Ti (V século antes de Cristo) – quarto escuro com pequeno.
Calibração de câmeras e projetores
MELHORANDO A IMAGEM CAPTURADA Gabriel Tavares Malizia Alves
Trabalho 1 CONHECENDO O EQUIPAMENTO Gabriel Tavares Malizia Alves Manuel.
Transformações Geométricas na Imagem Amostragem e Reconstrução.
Transformações Geométricas Coordenadas Homogêneas e Rotações.
WebCam CMOS 640 x 480. Imagem Original Imagem tons de cinza.
Paulo Sérgio Rodrigues PEL205
Computação Gráfica: Aula4: Câmeras
Computação Gráfica Geometria de Transformações
Computação Gráfica Geometria de Transformações
ALGORITMO PARA DETECÇÃO DO CENTRO DO CAMPO DOS SISTEMAS RADIOLÓGICOS
Fundamentação Teórica
Dinâmica do Movimento Plano de um Corpo Rígido: Força e Aceleração
Visão Computacional Shape from Shading
Estimação da direção de múltiplas fontes de luz Baseado no artigo Estimation of Illuminant Direction and Intensity of Multiple Light Sources, de W. Zhou.
Elementos essenciais da Câmera Fotográfica
Visão Computacional Formação da Imagem
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
Computação Gráfica Aula 3 Transformações Geométricas
Capítulo II – Imagem Digital
TRANSFORMAÇÕES DE TENSÕES
Reconstrução Tridimensional usando IPP Trabalho final do curso de Visão Computacional DCC / UFMG Apresentação: Antônio Wilson Vieira.
Visão Computacional
Professor Antonio Carlos Coelho
Visão por Computador Formação da Imagem
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.
Sensoriamento Remoto e Realce de Imagem
1 Iluminação Global Rodrigo de Toledo UFRJ, CG1,
Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br.
Pré-processamento de imagens 1.Correcções geométricas 2.Correcções radiométricas.
Visão Computacional Geometria de Transformações Luiz M. G. Gonçalves.
Lentes e Aberturas Lentes de vidro – comprimento focal fixo
Computação Gráfica MO603/MC930 Viewing (Definindo volume de visualização)
Sistemas de Rastreamento de Baixo Custo para Desktops Tecgraf (Grupo de Tecnologia em Computação Gráfica) Depto. de Informática, PUC-Rio Alberto Raposo,
Parte 2. Operações Topológicas
Figura 5 - O plano mostrando detalhes da projeção em perspectiva.
Visão Computacional Formação da Imagem Radiometria
Pré-processamento de imagens 1. Correcções geométricas 2. Correcções radiométricas.
Modelo e Câmera e Projeção no OpenGL
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Geometria projetiva e suas aplicações em visão
Proposta de trabalho: Calibração de câmera
Proposta de trabalho: Rastreamento da movimentação de uma câmera.
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.
Transcrição da apresentação:

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

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 (P i, p i ) na cena e na imagem.

Calibração de câmeras Calibração estimação de parâmetros otimização pontos da cena pontos da imagem projeção (função não linear)

Modelo de câmera pinhole dA p dA c irradiação sobre o pixel radiância dos pontos visíveis na direção da câmera Câmeras e olhos humanos são sensíveis a radiância

Câmera segue um modelo simples plano de projeção centro de projeção Projeção cônica caixa filme objeto pinhole raios de luz imagem Câmera pinhole

Câmeras reais sceneimage planelens Image Irradiance:Scene Radiance:

Câmeras com lentes O c p dA c α dA p (área correspondente a dA c )

Radiancia emitida por c na direção de p O c p α d dA c dA p

Ângulo sólido O c α d r dA c

Relação entre as áreas O c p α o i dA c dA p

Irradiação sobre o sensor O P p α d quando foco no dA c dA p

Irradiação (irradiância) no sensor da câmera é proporcional a: radiância do objeto da cena; área da lente; variação do cos 4

Trabalho de Gariel e Manuel, 2003: Variação cos 4 Descrição: Este experimento consistiu em verificar a equação fundamental da radiometria sobre a formação da imagem. Para comprovar esta variação proporcional a cos 4 utilizou-se uma tela de projeção comum de laminado de PVC e um projetor iluminando esta tela com uma única cor uniforme. A tela funcionou como uma superfície lambertiana, irradiando uniformemente em todas as direções.

Equipamento utilizado Creative WebCam Pro 640x480 (VGA) color CMOS Sensor USB 1.1 Interface

= arc tg (0,9/2,0) = 24 o cos 4 = 0,7 1,8m 2,0m Calculou-se, segundo as proporções de captura sobre as quais foram geradas as imagens da tela, o ângulo. Foi possível verificar que a iluminação nos pontos da tela decresce proporcionalmente a cos 4.

R=75 G=95 B=165 R=55 G=70 B=110 R=53 G=67 B=115 0,7 P1P1 P 1 0,7 P2P2 P 1 – pixel no centro da tela P 2 – pixel no canto da tela, na horizontal de P 1

Sem correção

Com correção radiométrica

Sem correção

Com correção radiométrica

Sem correção

Com correção radiométrica

Sem correção

Com correção radiométrica

Distorção radial

Origem da distorção radial

Tipos de distorção radial

Exemplo de distorção radial Imagem original Corrigida k 1 =0.11, k 2 =0.019

Sem correção Gabriel Malizia, 2003

(24, 15) (16, 238) (24, 457) (285,210) (O x, O y ) = (285,210), em pixel da imagem (611, 13) (620, 237) (610, 457) (319, 471) (319, 4)

(-261, 195) (-269, -28) (-261, -247) (0,0) (34, 208)(326, 197) (335, -27) (325, -247) (34, -261) Nova distribuição das coordenadas xdxd ydyd

Um processo simples para estimar k 1 e k 2

Considerando k 2 0 k 1 =5*10 -5 k 1 =4*10 -5 Valores médios de k 1 nos pontos extremos da imagem capturada

Sem correção

k 1 =4, Com correção

k 1 =2, Com correção

Sem correção

Com correção radiométrica e radial

Sem correção

Com correção radiométrica e radial

Velocidade 1/60 or 1/100 segundo ok

Abertura Escala normal f/1.4, f/2, f/2.8, f/4, f/5.6, f/8, f/11, f/16, f/22 abertura nitidez diâmetro efetivo campo de visão

Sensores

Foveon

Sensor Fujifilm

Outros modelos de camera

Variabilidade das medidas de uma camera Capture n (~100) imagens de uma mesma cena com uma câmera digital parada. Calcule, para cada pixel a média e o desvio padrão por:

Imagem 1

Imagem Média

Aqui a gente mostra o error de variação de cor por pixel, o qual va de 2.5 a 6 niveis.

Um zoom da imagen anterior

Desvio Padrão Médio Normalizado Desvio Padrão Médio Máximo: R=10.1 G=10.6 B=9.9 Média do Desvio Padrão Médio: R=2.29 G=2.26 B=2.50

Desvio Padrão Médio Normalizado - Red

Desvio Padrão Médio Normalizado - Green

Desvio Padrão Médio Normalizado - Blue

Imagem Original

Imagem tons de cinza

Média

Ruído Normalizado - desvio padrão máximo = desvio padrão médio = 1.61

Ruído Normalizado - desvio padrão máximo = desvio padrão médio = 1.61

Compressão do jpeg

Aplicações são tecnologicamente complexas: exemplo: algoritmo do JPEG FDCT Source Image Quantizer Entropy Encoder Table Compressed image data DCT-based encoding 8x8 blocks R B G

Equations for JPEG DCT Forward DCT: Inverse DCT:

Visualization of Basis Functions Increasing frequency

Notação xcxc ycyc zczc p y' x' sinal ! OpenGLVisão

Z X Y u v

(X,Y,Z) T (x,y) T (x im,y im ) T y im npnp x im ycyc vista lateral ococ zczc npnp fovy oyoy x im y im h pixels oxox ococ eixo óptico x0x0 y0y0 ycyc xcxc zczc y' x' w pixels x' y'

(x im,y im ) T (x,y) T x im y im x y sxsx sysy p' o oyoy oxox 5

(X,Y,Z) T (x im,y im ) T

Parâmetros intrínsecos com cisalhamento

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

Parâmetros extrínsecos Translação –T x, T y, T z (3 g.l.) Rotação (3 g.l.)

Parâmetros extrínsecos xcxc ycyc zczc ywyw xwxw zwzw PwPw PcPc T

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 (P i, p i ) na cena e na imagem.

Calibração de câmeras Calibração estimação de parâmetros otimização pontos da cena pontos da imagem projeção (função não linear)

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 Passo 1: conhecidos Distorção radial insignificante Assuma:

Método de Tsai

Passo 1:

Método de Tsai Passo 1:

Correspondência

Sistema Ax=0 Compute v by SVD decomposition of A=UDV T (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 f x f y e T z

Ponto de fuga

Cálculo do centro ótico pelos pontos de fuga

Passo 2 do Tsai Computing Image Center v1v1v1v1 v2v2v2v2 v3v3v3v3

Pontos de fuga do padrão 3D

Fim da parte 1

Tsai 2D

Coordenada do mundo para a câmera xcxc ycyc zczc ywyw xwxw zwzw PwPw PcPc T

Câmera para imagem

Concatenando

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

Fator de escala escolha um sinal corrija a escolha

Cáculo de f x f y e T z

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: X Y x y

Determinação de uma Homografia

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

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) onde: Tome H como solução inicial Minimize:

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 y im f x im ycyc vista lateral ococ zczc f fovy oyoy x im y im h pixels oxox ococ eixo óptico x0x0 y0y0 ycyc xcxc zczc y' x' w pixels x' y'

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

Determinação de uma Homografia

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

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) onde: Tome H como solução inicial Minimize:

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

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 no Juiz Virtual k = 1..n-1 1 a Opção

Calibração no Juiz Virtual

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

Onde é o centróide dos pontos próprios P k. Calibração no Juiz Virtual k=1..n Para eliminar a solução trivial H = 0,

Calibração no Juiz Virtual A solução desse problema se dá por resolver Minimizar || Mt || sujeito a m T t = 1, onde e M é a representação matricial da transformação, dada por: É usado o método de multiplicadores de Lagrange, conduzindo ao seguinte sistema linear: (2n x 9)

Relação entre as matrizes do OpenGL e de um sistema de visão Matrizes de posicionamento Matrizes de projeção

Matrizes de posicionamento xexe yeye zeze center eye zozo yoyo xoxo up x y z Y Z X t

Matrizes de posicionamento at eye z o = Z y o = Y x o = X up x e = x y e = y zeze z

Relação entre as matrizes instrísicas K e P ogl u z x y v void getPoglFromK(float k[9], float P[16]);

Mudando de XYZ para x e y e z e u z ye= yye= y v x e = x ze= - zze= - z

Sistemas de coordenadas do OpenGL v u yeye vista lateral eye zeze f =n p fovy oyoy u v h s y oxox eye eixo óptico x0x0 y0y0 yeye xexe zeze y' x' w s x x' y' pixel sxsx sysy f =n p fpfp

OpenGL xexe yeye zeze xnxn ynyn znzn u v pixel sxsx sysy h s y w s x w h 0

Visão xexe yeye zeze xnxn ynyn znzn u v pixel sxsx sysy h s y w s x w h 0 Esta linha vem da derivação da matrix P do OpenGL