Contents — find the section you need
SLAM visual, odometria visual, geometria epipolar e PnP pressupõem um mapeamento correto das coordenadas dos pixels para o espaço 3D. Mas a luz que passa por uma lente nunca forma uma imagem da mesma forma que um orifício estenopeico ideal. Qual é a distância focal, em unidades de pixel? Qual é o deslocamento do ponto principal em relação ao centro da imagem? Qual é a curvatura de uma linha reta na imagem? A calibração da câmera é o processo de calcular numericamente essas grandezas. Se a calibração for negligenciada, não importa quão sofisticado seja o algoritmo SLAM ou SfM aplicado, um erro sistemático se propagará a partir da base.
0. Resumo de 30 segundos
-
A calibração da câmera é o processo de estimar parâmetros intrínsecos (distância focal, ponto principal, inclinação) e coeficientes de distorção a partir de correspondências conhecidas entre pontos 3D e pontos da imagem. Os parâmetros extrínsecos (a pose da câmera em cada disparo) são recuperados simultaneamente.
-
As lentes apresentam distorção geométrica radial e tangencial. A representação padrão é o modelo de Brown-Conrady, que expressa a distorção radial como k_1,k_2,k_3 e a distorção tangencial como p_1,p_2. Lentes grande-angulares e olho de peixe requerem um modelo diferente.
-
O método de Zhang — que consiste em fotografar um padrão plano (como um tabuleiro de xadrez) a partir de várias poses, resolver linearmente os parâmetros intrínsecos a partir da homografia de cada vista e, em seguida, refinar, incluindo a distorção, por meio de otimização não linear — é o método de calibração padrão na prática.
-
A qualidade da calibração é avaliada pelo erro de reprojeção. Analisar apenas o valor médio não é suficiente — você também precisa verificar a distribuição espacial do erro na imagem e a variância entre as poses, ou perderá distorções localizadas que não foram totalmente capturadas.
- A calibração não é uma constante, válida para sempre uma vez encontrada. Zoom, foco, temperatura, choque e alterações na resolução ou recorte podem alterar os parâmetros intrínsecos. O SLAM visual, a VO e o PnP subsequentes se degradam silenciosamente quando essa premissa é quebrada.
1. Revisitando o Modelo Estenopeico a partir de Coordenadas
Um ponto de coordenadas do mundo real \mathbf{X}=(X,Y,Z,1)^\mathsf{T} (coordenadas homogêneas) é projetado na imagem, em escala, no modelo estenopeico como:
R\in SO(3) e \mathbf{t} são a rotação e a translação das coordenadas do mundo real para as coordenadas da câmera (os parâmetros extrínsecos), e K é a matriz intrínseca.
Aqui, f_x,f_y são as distâncias focais em unidades de pixel, (c_x,c_y) é o ponto principal (onde o eixo óptico intercepta o plano da imagem) e s é a distorção (quase zero na maioria dos sensores modernos). A calibração é o problema inverso de recuperar este K, os coeficientes de distorção e o R,\mathbf{t} de cada disparo, puramente a partir de dados observados.
Como mostra o diagrama, uma única foto não consegue separar os parâmetros intrínsecos dos extrínsecos. Somente coletando diversas observações em diferentes poses (inclinação, distância) é possível determinar K de forma quase inequívoca — e essa é exatamente a ideia central por trás do método de Zhang, abordado a seguir.
2. Uma Lente Não É um Orifício Estenopeico Ideal: o Modelo de Distorção
Lentes reais apresentam distorção radial e distorção tangencial. Escrevendo as coordenadas normalizadas da imagem como (x,y)=(X_c/Z_c,\,Y_c/Z_c) e o raio como r^2=x^2+y^2, o modelo de distorção de Brown-Conrady pode ser escrito da seguinte forma:
k_1,k_2,k_3 são os coeficientes de distorção radial e p_1,p_2 são os coeficientes de distorção tangencial. A distorção radial é um fenômeno no qual a imagem encolhe ou se expande dependendo da distância do centro da lente, manifestando-se como a pronunciada distorção em "barril" vista em lentes grande-angulares ou a distorção em "alfinete" vista em teleobjetivas. A distorção tangencial é um componente menor e assimétrico que surge de imperfeições de implementação, onde o grupo de lentes e o sensor de imagem não são perfeitamente paralelos. As coordenadas finais do pixel são obtidas como: \tilde{\mathbf{x}}_{px}=K(x_d,y_d,1)^\mathsf{T} .
Para lentes com um campo de visão extremamente amplo, como lentes olho de peixe, o modelo polinomial de Brown-Conrady tende a divergir próximo às bordas e não é prático. É comum usar uma aproximação de projeção equidistante baseada em ângulo, como o modelo olho de peixe do OpenCV. Em vez de "memorizar um modelo de distorção", é importante ter em mente que o modelo deve ser escolhido com base no campo de visão e no projeto óptico da lente.
3. Método de Zhang: Calibração com um Padrão Plano
O método mais amplamente implementado hoje é o método de calibração com padrão plano publicado por Zhengyou Zhang em 2000. Não é necessário nenhum equipamento especial de calibração 3D — basta fotografar um padrão plano, como um tabuleiro de xadrez impresso, em várias poses, movendo a câmera ou o próprio padrão. O mapeamento do plano do padrão (considerando Z=0) em alguma pose i para a imagem pode ser escrito como uma homografia usando a primeira e a segunda colunas da matriz de rotação \mathbf{r}_1,\mathbf{r}_2 e a translação \mathbf{t}.
Aqui, o H_i de cada pose pode ser estimado linearmente a partir dos pontos da grade conhecidos no padrão e suas correspondências na imagem, usando o método DLT abordado no Guia de Homografia. Usando a restrição de que as colunas da matriz de rotação são ortonormais — \mathbf{r}_1^\mathsf{T}\mathbf{r}_2=0,\ \|\mathbf{r}_1\|=\|\mathbf{r}_2\| — obtemos uma equação linear em B=K^{-\mathsf{T}}K^{-1}:
que resulta em duas equações desse tipo por pose (\mathbf{h}_1,\mathbf{h}_2 são a primeira e a segunda colunas de H_i). Como B é uma matriz simétrica com 6 graus de liberdade, dadas 3 ou mais poses, B pode ser encontrada por meio de mínimos quadrados lineares e, em seguida, K pode ser encontrada em forma fechada por meio de um procedimento equivalente à decomposição de Cholesky. É por isso que o método de Zhang precisa apenas de "algumas fotos de um plano". No entanto, se todas as poses forem quase paralelas ao plano da imagem (fronto-paralelas), as equações degeneram, sendo necessárias poses com diferentes inclinações.
A solução analítica é apenas um valor inicial que ignora a distorção. A partir daí, a abordagem padrão de dois estágios, utilizada na prática, refina todos os parâmetros, incluindo os coeficientes de distorção, por meio de otimização não linear (geralmente Levenberg-Marquardt), usando o erro de reprojeção descrito na próxima seção como função objetivo.
4. Erro de Reprojeção e Otimização de Parâmetros
A função objetivo da calibração é minimizar, para cada pose e cada ponto da grade, a diferença entre o pixel observado e a posição projetada calculada com os parâmetros estimados. Escrevendo a observação na pose i, o ponto j como \mathbf{u}_{ij} e o ponto 3D conhecido correspondente no plano como \mathbf{X}_j,
é o que é minimizado. \boldsymbol{\kappa}=(k_1,k_2,k_3,p_1,p_2) é o vetor de coeficiente de distorção e \pi_d é a função de projeção incluindo a distorção. As incógnitas são grandes — K (4–5 graus de liberdade), \boldsymbol{\kappa} (3–5 graus de liberdade) e R_i,\mathbf{t}_i por pose (6 graus de liberdade × número de poses) — mas com pontos observados suficientes, o problema fica bem delimitado. Esta formulação pode ser vista como um caso especial da estrutura de "otimização conjunta da pose da câmera e da estrutura 3D" abordada no Guia Introdutório de Ajuste de Feixe. Como as coordenadas dos pontos 3D são conhecidas e fixas na calibração, trata-se de um subproblema mais simples do que o ajuste de feixe comum.
É comum relatar a raiz quadrada média (RMS) do erro de reprojeção \left\|\mathbf{u}_{ij}-\hat{\mathbf{u}}_{ij}\right\| como "precisão da calibração", mas é arriscado considerar a calibração concluída apenas observando o valor médio. Verifique sempre também o seguinte:
- Se há variação no erro médio de cada pose (uma pose com um erro particularmente grande em um ângulo específico sugere distorção do padrão, desfoque de movimento ou iluminação irregular)
- A distribuição espacial do erro na imagem (erro sistemático persistente nas bordas sugere que a ordem ou o tipo do modelo de distorção pode ser insuficiente)
- Precisão subpixel da detecção de pontos da grade (se a detecção de cantos for instável, nenhuma otimização poderá distinguir isso do erro do modelo)
5. Esqueleto de Implementação em OpenCV
O procedimento típico de calibração de câmera única é o seguinte. Ajustar as condições de disparo (resolução, zoom, foco) e fotografar o padrão nos quatro cantos, no centro e em várias inclinações da imagem representa 90% de uma boa calibração.
import cv2 as cv
import numpy as np
pattern_size = (9, 6) # number of internal corners
objp = np.zeros((pattern_size[0]*pattern_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2)
objp *= square_size_m # measured side length of one square [m]
obj_points, img_points = [], []
for gray in calibration_images: # multiple frames shot at different poses
found, corners = cv.findChessboardCorners(gray, pattern_size)
if found:
corners = cv.cornerSubPix(gray, corners, (11, 11), (-1, -1),
(cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 30, 0.001))
obj_points.append(objp)
img_points.append(corners)
ret, K, dist, rvecs, tvecs = cv.calibrateCamera(
obj_points, img_points, gray.shape[::-1], None, None)
# ret is the RMS reprojection error [px]. Also compute per-pose error separately to check.
Para lentes grande-angulares ou olho de peixe, use a família de APIs cv.fisheye.calibrate em vez da calibrateCamera comum. Para um sistema estéreo, use cv.stereoCalibrate para encontrar a pose relativa, além dos parâmetros intrínsecos de ambas as câmeras, e cv.stereoRectify para alinhar as imagens esquerda e direita às linhas epipolares horizontais. Este procedimento se conecta diretamente ao projeto básico abordado em Como as Câmeras Estéreo Funcionam e Como as Câmeras de Profundidade Funcionam.
6. Por que a Deriva de Calibração Prejudica os Sistemas Posteriores
Grande parte da matemática em Visual SLAM, VO e PnP é escrita sob a suposição de que os valores de calibração permanecem constantes, desde que as condições de captura não mudem. A estimativa da Matriz Essencial em O Guia Introdutório de Geometria Epipolar assume coordenadas normalizadas K^{-1}\tilde{\mathbf{x}}; A minimização do erro de reprojeção no Guia PnP também considera K como conhecido. Se K ou os coeficientes de distorção não corresponderem mais ao sistema óptico real, cada um desses cálculos estará sendo realizado com "a régua errada".
Especificamente, os valores de calibração se degradam silenciosamente por motivos como estes:
-
Alterações de zoom/foco: com uma lente cuja distância focal muda, f_x,f_y muda de uma foto para outra. Permitir que o autofoco funcione significa que os parâmetros intrínsecos no momento da calibração e em tempo de execução não corresponderão.
-
Temperatura e choque mecânico: uma pequena mudança de posição no corpo da lente ou na montagem do sensor desloca o ponto principal e os coeficientes de distorção. Isso é particularmente relevante para aplicações externas, automotivas e com drones.
-
Alterações na resolução, recorte ou zoom digital: como K é um parâmetro em pixels, se a imagem for redimensionada ou recortada, f_x,f_y,c_x,c_y também deve ser atualizado de acordo com a escala. Esquecer de fazer isso é um erro extremamente comum.
- Deformação de um conjunto de câmeras esquerda/direita: em configurações estéreo, se a pose relativa (calibração extrínseca) — e não apenas os parâmetros intrínsecos — sofrer pequenas alterações ao longo do tempo, um erro sistemático afetará a profundidade calculada a partir da disparidade.
Esses erros são difíceis de perceber em uma única estimativa de pose isolada. Mas em sistemas que integram a pose sequencialmente ao longo do tempo, como VO ou SLAM, o erro sistemático de reprojeção se acumula como deriva, produzindo um mapa distorcido que o fechamento de loop não consegue corrigir completamente. Em sistemas de produção, é aconselhável monitorar a deriva de calibração online usando características 3D fixas e conhecidas (linhas retas em um edifício, placas de tamanho conhecido) ou incorporar uma rotina de recalibração periódica.
7. Falhas Comuns e Contramedidas
| Padrão de Falha | O Que Acontece | Contramedida |
|---|---|---|
| Diversidade de pose insuficiente (apenas fotos frontais) | K e distorção ficam mal determinadas, especialmente k_3 e o ponto principal | Fotografe nos quatro cantos da imagem, no centro e em vários ângulos de inclinação diferentes |
| Padrão distorcido em um plano plano | A própria premissa da calibração falha, espalhando um erro sistemático por toda a imagem | Monte-a em um painel plano rígido; corrija os erros de escala de impressão por meio de medição física |
| Precisão grosseira na detecção de cantos | Aumenta o limite do erro de reprojeção, independentemente do poder expressivo do modelo | Correção subpixel, resolução suficiente, gerenciamento de foco e exposição |
| Aplicando um modelo de distorção de orifício comum a uma lente grande angular | Erro divergente nas bordas da imagem, otimização instável | Escolha um modelo compatível com o campo de visão, como um modelo olho de peixe |
| Não atualizando K após redimensionamento/corte | O ponto principal e a distância focal ficam dessincronizados com a escala, causando erro sistemático na estimativa de pose | Converta K para a escala correspondente em cada transformação de imagem |
| Ignorando o obturador rolante | O centro de projeção real varia linha por linha, mesmo dentro de um único quadro | Adote um obturador global ou corrija com um modelo de temporização por linha |
8. Resumo
A calibração da câmera é o primeiro passo que transforma uma imagem de "apenas uma matriz 2D" em "uma observação geometricamente interpretável". Os parâmetros intrínsecos e extrínsecos do modelo de orifício, juntamente com os coeficientes de distorção radial e tangencial, são recuperados a partir de observações em várias poses — como no método de padrão planar de Zhang — e finalizados com a otimização não linear do erro de reprojeção. A qualidade dessa calibração não se reflete na métrica de precisão de nenhum algoritmo individual, mas é a premissa subjacente a todas as equações em cada etapa subsequente — geometria epipolar, PnP, SLAM visual, SfM, ajuste de feixe. A calibração não é um ritual único — faz parte de um fluxo de trabalho que deve ser monitorado continuamente à medida que as condições de captura mudam.
Um pequeno erro em uma imagem de calibração é suficiente?
O ajuste pode favorecer essa visão. Verifique inclinações variadas, bordas da imagem e imagens de validação separadas.
Referências
- Zhang, Uma Nova Técnica Flexível para Calibração de Câmera (IEEE TPAMI, 2000)
- Heikkilä & Silvén, Um Procedimento de Calibração de Câmera em Quatro Etapas com Correção Implícita de Imagem (CVPR 1997)
- Hartley & Zisserman, Geometria de Múltiplas Vistas em Visão Computacional (página oficial dos autores)
- OpenCV — Calibração de Câmera e Reconstrução 3D
- OpenCV — Tutorial de Calibração de Câmera
- OpenCV — Módulo de Calibração Olho de Peixe
- Kalibr (ferramenta de calibração de câmera/IMU, repositório oficial)
Comentários
Entre na sua conta para continuar.
Ainda não há dados.