Como obtenho a calibração mais precisa da câmera?

16

Primeiro, espero que esta seja a placa correta do Stack Exchange. Minhas desculpas se não for.

Estou trabalhando em algo que exige que eu calibre a câmera. Eu implementei com sucesso o código para fazer isso no OpenCV (C ++). Estou usando as funções embutidas do tabuleiro de xadrez e um tabuleiro de xadrez que imprimi.

Existem muitos tutoriais na internet que afirmam dar mais de uma visão do tabuleiro de xadrez e extrair os cantos de cada quadro.

Existe um conjunto ideal de visualizações para a função obter a calibração mais precisa da câmera? O que afeta a precisão da calibração?

Por exemplo, se eu der 5 imagens da mesma visualização sem mover nada, ele fornecerá resultados diretos quando tento e não distorço o feed da webcam.

FYI para quem visita: Descobri recentemente que você pode obter uma melhor calibração da câmera usando uma grade de círculos assimétricos e a respectiva função OpenCV.

guepardo
fonte

Respostas:

8

É necessário capturar imagens para calibração a partir de diferentes pontos de vista e ângulos, com a maior diferença possível entre os ângulos (todos os três ângulos de Euler devem variar), mas para que o diâmetro do padrão ainda se encaixe no campo de visão da câmera. Quanto mais visualizações você usar, melhor será a calibração. Isso é necessário porque durante a calibração você detecta os parâmetros de distância focal e distorção, para obtê-los pelo método do quadrado mínimo são necessários diferentes ângulos. Se você não está movendo a câmera, não está obtendo novas informações e a calibração é inútil. Esteja ciente de que geralmente você só precisa de distância focal, os parâmetros de distorção geralmente são insignificantes, mesmo para câmeras de consumidor, câmeras da web e câmeras de telefone celular. Se você já conhece a distância focal da especificação da câmera, talvez nem precise de calibração.

O coeficiente de distorção está mais presente em câmeras "especiais" como grande angular ou 360 °.

Aqui está a entrada da Wikipedia sobre calibração . E aqui está a distorção não linear , que é insignificante para a maioria das câmeras.

mirror2image
fonte
Por ângulos de Eulers, suponho que você queira dizer girar a câmera em torno do tabuleiro de xadrez (com o tabuleiro de xadrez como pivô) no x, y e mover a câmera na direção e fora do tabuleiro de xadrez no z? Eu li sobre alguém que simplesmente imprimiu tabuleiros de xadrez transformados e manteve a câmera no mesmo lugar. Por exemplo: i.imgur.com/rYzV4.png e i.imgur.com/McG9z.png . Usar coisas como essa é uma péssima decisão, pois pode não representar como as coisas se distorram na realidade?
Cheetah
Sim sobre o movimento da câmera. Sim novamente sobre manter-se no lugar.
Mirror2image 28/02/12
@ mirror2image Você quer dizer que, em operações práticas, é melhor mudar ângulos diferentes. Mas isso significa que diferentes visões terão diferentes sistemas de coordenação mundial. Preciso usar um sistema de coordenação mundial compartilhado para manter os pontos do objeto no mesmo sistema de coordenação?
Richard
3

@ Ben - o número de visualizações depende da câmera e da precisão final necessária.

Com lentes de baixa distorção e alta qualidade (SLR de 35 mm de ponta), usando muitas imagens do tabuleiro de xadrez para mapear as distorções podem ser instáveis ​​- já que as distorções são frações de um pixel.
Você ainda precisa de várias fotos com a placa (ou câmera) girada, pois o centro da imagem normalmente está apenas a alguns pixels dos valores nominais x / 2, y / 2 e muda com o foco. E, claro, o zoom muda tudo.

Depois de ter o centro do chip da lente e a distância focal (em X e Y), você só precisa de um único tabuleiro de xadrez na foto para obter a posição da câmera

Martin Beckett
fonte
Continuo recebendo uma calibração muito ruim e honestamente não consigo entender o porquê. Eu tenho um tabuleiro de xadrez impresso na parede e estou movendo a câmera para posições diferentes, para que tenha visões diferentes no tabuleiro de xadrez, mas sempre que uso a função undortort no opencv, ela fica muito estranha e distorcida em comparação com o original. Minha câmera é um Microsoft LifeCam Studio 1080p.
Cheetah
@ Ben Desative qualquer foco automático. Em webcams de lente pequena, a distância focal e o centro da lente mudam com o foco. Você está girando o suficiente para encaixar bem no centro? Tem quadrados saindo para os cantos? Por fim, verifique se todos os alvos têm todos os quadrados detectados.
Martin Beckett
O foco automático já foi desativado. Definir o suficiente? Estou tentando o máximo possível de ângulos extremos para entender os pontos. Não sei ao certo o que você quer dizer com "quadrados saindo para os cantos", se você quer dizer a função que desenha os cantos extraídos na imagem - então sim. Eu também já tenho a verificação para ver se todos os cantos foram detectados. Penso que o meu problema PODE estar no que defino a distância focal inicial na matriz intrínseca que passo para a função de calibração. Tentei 1: 1, 16: 9 (o que eu acredito que a relação de aspecto da webcam é) e também tentaram NADA (que você pode fazer)
Cheetah
@ Martin É possível fazer a calibração mantendo a câmera na posição de papelaria e alterando a orientação do tabuleiro de xadrez sem alterar a distância entre a câmera e o tabuleiro de xadrez?
@ Santosh - sim, isso é obviamente exatamente equivalente. Você precisa fazer muita certeza de ter coberto de ângulos diferentes
Martin Beckett
3

Decidi postar esta resposta aqui porque, há algum tempo, esse foi o resultado principal do Google e suas sugestões me ajudaram. Então decidi compartilhar minha experiência também.

Depois de passar inúmeras horas tentando obter a melhor calibração estéreo no Kinect, compartilhei minhas dicas e descobertas em um post do blog aqui .

Embora seja voltada para a calibração estéreo e, mais especificamente, para o Kinect, acredito que as dicas ajudarão quem estiver tentando calibrar uma câmera.

Além disso, caso eu morra algum dia ou esqueça de renovar minha hospedagem, aqui está uma citação modificada do post:

  1. Verifique se você possui o maior padrão de calibração possível. Siga o que eu disse acima. Obtenha um bom padrão impresso profissionalmente. Certifique-se de que cada quadrado tenha pelo menos 8 cm x 8 cm. Além disso, verifique se um lado do padrão de calibração possui um número ímpar de quadrados e o outro lado possui um número par de quadrados (por exemplo, 9 × 6 ou 7 × 8). É importante para detectar corretamente a pose do alvo. Além disso, algumas caixas de ferramentas não poderão detectar que o padrão neste requisito não é atendido. Como mencionado anteriormente, os padrões utilizados para impressão em folhas grandes são carregados aqui (para quadrados de 9 cm) e aqui (para quadrados de 10 cm).
  2. Verifique se o padrão impresso possui uma borda branca suficiente ao redor, caso contrário, talvez não seja facilmente detectado pela maioria das caixas de ferramentas.
  3. Verifique se o Kinect não se move. Eu usei uma montagem para montar meu Kinect em um tripé.
  4. Tente obter o maior número possível de imagens do alvo de calibração. Minha melhor calibração foi obtida usando 300 imagens, a distâncias de 0,5 metro a 10 metros da câmera. Certifique-se de girar o padrão em torno dos eixos X, Y e Z. Além disso, tente “ladrilhar” a vista com imagens tiradas à mesma distância: ou seja, tire uma imagem, mova o alvo para o próximo ladrilho no campo de visão, pegue outra e repita até que você tenha “ladrilhado” toda a tela atual. campo de visão. O objetivo é cobrir o campo de visão inteiro a cada distância, tanto quanto possível.
  5. Use o aplicativo de calibração estéreo do MATLAB, se possível. Ele permite que você se livre dos outliers após cada fase de calibração.
M2X
fonte
2

Aqui está uma lista das 'melhores práticas' para calibração de câmera, que eu originalmente postei aqui: https://calib.io/blogs/knowledge-base/calibration-best-practices

  • Escolha o alvo de calibração do tamanho certo. Grande o suficiente para restringir adequadamente os parâmetros. De preferência, deve cobrir aprox. metade da área total quando vista fronto-paralela nas imagens da câmera.
  • Faça a calibração na distância aproximada de trabalho (WD) da sua aplicação final. A câmera deve focar a essa distância e o foco deve permanecer inalterado após a calibração.
  • O destino deve ter uma contagem alta de recursos. Usar padrões finos é preferível. No entanto, em algum momento, a robustez da detecção sofre. Nossa recomendação é usar contagens de padrões finos para câmeras acima de 3MPx e se a iluminação for controlada e boa.
  • Colete imagens de diferentes áreas e inclinações. Mova o alvo para cobrir completamente a área da imagem e tente obter uma cobertura uniforme. A distorção da lente pode ser determinada adequadamente apenas a partir de imagens fronto-paralelas, mas a estimativa da distância focal depende da observação do escorço. Inclua as imagens frontoparalelas e as imagens tiradas com a placa inclinada até +/- 45 graus, na direção horizontal e vertical. Inclinar mais geralmente não é uma boa ideia, pois a precisão da localização do recurso sofre.
  • Use boa iluminação. Isso geralmente é esquecido, mas extremamente importante. O alvo da calibração deve preferencialmente ser difusamente iluminado por meio de iluminação fotográfica controlada. Fontes de pontos fortes geram iluminação irregular, possivelmente causando falha na detecção e não utilizando muito bem o alcance dinâmico da câmera. Sombras podem fazer o mesmo.
  • Tenha observações suficientes. Normalmente, a calibração deve ser realizada em pelo menos 6 observações (imagens) de um alvo de calibração. Se uma câmera de ordem superior ou modelo de distorção for usado, mais observações serão benéficas.
  • Considere usar destinos codificados exclusivamente, como placas CharuCo. Isso permite coletar observações das bordas do sensor e da lente da câmera e, portanto, restringir muito bem os parâmetros de distorção. Além disso, eles permitem que você colete dados, mesmo quando pontos únicos de recursos não atendem aos outros requisitos.
  • A calibração é tão precisa quanto o objetivo de calibração usado. Use alvos impressos a laser apenas para validar e testar.
  • Montagem adequada do alvo de calibração e da câmera. Para minimizar a distorção e curvar-se em alvos maiores, monte-os na vertical ou apoiando-se em um suporte rígido. Considere mover a câmera nesses casos. Use um tripé de qualidade e evite tocar na câmera durante as aquisições.
  • Remova más observações. Inspecione cuidadosamente os erros de reprojeção. Por visualização e por recurso. Se algum desses itens aparecer como outliers, exclua-os e recalibre.

Uma ferramenta on-line para gerar PDFs para destinos de calibração é encontrada aqui: https://calib.io/pages/camera-calibration-pattern-generator

Jakob
fonte
Olá, seja bem-vindo ao DSP SE. As respostas de autopromoção geralmente não são bem-vindas aqui. Por favor, considere torná-lo uma resposta de maior qualidade.
jojek