Um problema na visão computacional e na reconstrução 3d está recebendo os parâmetros intrínsecos da câmera. Uma solução comum é usar um objeto em que se saiba as medidas da forma antes da mão, como um tabuleiro de damas. O problema desse método é que ele deve ser feito sempre que o parâmetro da câmera for alterado, como distância focal e ampliação.
Estou tentando implementar a auto-calibração da câmera discutida em Uma técnica simples para auto-calibração . A matriz essencial é restringida por seus dois valores singulares. Isso pode ser usado para recuperar os intrínsecos da câmera sem fazer uma calibração manual (ou seja, com um tabuleiro de damas). Estou um pouco confuso com a forma como a função de custo pode ser minimizada. Aqui está o que eu entendo até agora:
matriz essencial
matriz intrínseca
- produto da distância focal e fator de ampliação [resolver]
- relação de aspecto [suponha fornecido, eu acho da câmera ou dados EXIF?]
- são as coordenadas do ponto principal [assuma 0, 0]
- inclinação [assumir 0]
função de custo
Pergunta: Como essa função de custo está sendo minimizada?
Respostas:
Eu acho que esse é um problema direto de otimização não linear (a ser resolvido com variações de Newton, como métodos Trust-Region), onde você nem precisa calcular analiticamente o jacobiano. Parece-me que o problema de otimização está escrito sobreKEu e, portanto, é a entrada para a função de custo. Para calcular o custo, em cada chamada para essa função, você basicamente calcula os valores singulares deKEu e calcular o custo de acordo com a equação 4 (No papel). Como seu parâmetro de entrada éK , os derivativos são calculados sobre os elementos de K . Isso torna sua otimização4 dimensional (ou 5 se você considerar a inclinação) por câmera. Os derivados são calculados automaticamente, e você não precisa se preocupar com isso. Se você estiver usando o MATLAB,
lsqnonlin
funcionaria para você.O cálculo do peso é explicado detalhadamente no artigo, então pulo esta parte.
Depois de verificar o artigo mais uma vez, notei que os autores estão realmente usando o esquema de diferenciação numérica que mencionei. Se você deseja entender mais profundamente como diferenciar um SVD, consulte este ou este .
fonte