Algumas câmeras podem ter uma distorção causada por suas lentes. Dois tipos principais de distorção são a distorção radial e a distorção tangencial

Distorção radial

Esse tipo faz com que linhas retas pareçam estar curvadas. Essa distorção fica maior quanto mais nos afastamos do centro da imagem. A distorção radial é expressa matematicamente como:

Untitled

Distorção tangencial

Similarmente, esse tipo acontece quando a lente de captura não está perfeitamente alinhada com o plano da imagem. Dessa forma, algumas partes da imagem parecem estar mais perto do que aparentam. A distorção radial é expressa matematicamente como:

Untitled

Com isso, temos de descobrir 5 parâmetros, conhecidos como coeficientes de distorção:

Untitled

Além disso, também precisamos dos parâmetros intrínsecos e extrínsecos da câmera.

Parâmetros intrínsecos

Esses parâmetros são específicos para cada câmera, e incluem informações como distância focal (fx, fy) e centros ópticos (cx, cy). Esses dois dados podem ser utilizados para criar uma matriz da câmera, que servirá para para remover a distorção de lente de uma câmera específica. Por ser uma matriz única para cada câmera, uma vez calculada, pode ser reutilizada em outras imagens tiradas pela mesma câmera:

Untitled

Parâmetros extrínsecos

Esses parâmetros correspondem a vetores de rotação e translação, que convertem as coordenadas de um ponto 3D em um sistema de coordenadas.

Para aplicações estéreo, essas distorções têm de ser previamente corrigidas. Para encontrar esses parâmetros, devemos fornecer algumas imagens simples com certos padrões, como um tabuleiro de xadrez. Achamos alguns pontos específicos que já sabemos as coordenadas, como as bordas dos quadrados do tabuleiro. Sabendo das coordenadas tanto na vida real, quanto na imagem, podemos usar as equações acima para determinar os parâmetros e assim, corrigir as distorções. É recomendado ter ao menos 10 padrões testados, para uma precisão maior.

Código

Para os 10 testes, podemos utilizar as imagens de tabuleiros de xadrez que o próprio OpenCV fornece nos seus arquivos (samples/data/left01.jpg – left14.jpg). Com essas imagens, temos todas as coordenadas 2D que precisamos da imagem, e para as coordenadas 3D reais, podemos simplesmente assumir que as imagens são fotos tiradas no plano XY, considerando Z = 0. Assim, podemos assumir valores de XY como (0,0), (2,0), (2,0), (3,0), … ou definir um valor para o tamanho de cada quadrado do tabuleiro, de 30 mm por exemplo, assim as coordenadas seriam (0,0), (30,0), (60,0), … . Desse modo, os resultados seriam em milímetros.