Como reconstruir uma estrutura 3D a partir de um conjunto de imagens?

24

Eu tenho um conjunto de contornos (conjunto de segmentos de linha) agrupados da seguinte maneira:

Si={I0,Iπ4,I2π4,,I7π4}

Onde

  • denotam a sequência de imagens de um objecto concreto. Si
  • denotar uma imagem, com j t h ponto de vista ( j = 0 meio vista frontal). Ijjthj=0

Aqui está um exemplo de (vista traseira): Iπ

insira a descrição da imagem aqui

Como posso reconstruir a estrutura 3d do objeto com fornecido ?Si

Alguém pode me indicar alguns papéis ou até mesmo me dar algumas palavras-chave? Sei que existem muitos artigos que funcionam com nuvens de pontos e assim por diante, mas esses não funcionam como estou operando com linhas.

om-nom-nom
fonte

Respostas:

20

Na verdade, é um assunto bastante difícil. A reconstrução clássica em 3D de múltiplas vistas lida com a correspondência de pontos em primeiro lugar, ou seja, encontre o mesmo ponto em todas as imagens. Dado os parâmetros da câmera (visualização) para cada imagem, o ponto 3d original pode ser reconstruído. (Usando um laser ou um projetor, a cena pode ser iluminada para que a correspondência possa ser feita com relativa facilidade.)

A Bíblia do campo é Geometria de Múltiplas Visões em Visão Computacional por Hartley e Zisserman

No livro, há uma seção sobre o tensor trifocal, que é uma restrição multilinear entre 3 visualizações. Ele contém não apenas restrições de ponto, mas também de correspondência de linha. Pode ser usado para reconstrução de edifícios muito bem.

Portanto, seus contornos devem corresponder em primeiro lugar e talvez possam ser reconstruídos sabendo os parâmetros da câmera (a calibração da câmera também é abordada no livro). Então você terá contornos em 3d, mas nada mais. Para superfícies reais, é necessário fazer uma correspondência densa de pontos. Embora o tensor que mencionei pareça bom, ele é usado para linhas retas e tenho certeza de que um carro moderno tem linhas curvas por toda parte.

Não sei como você conseguiu esses contornos, mas, vendo a imagem que postou, sou bastante cético quanto à robustez desse algoritmo, portanto a reconstrução será ruim.

Outro método que me veio à cabeça é o casco visual ou a escultura no espaço . A matemática do contorno também deve ser feita. Executando o método em cada contorno, você pode ter o modelo.

Bálint Fodor
fonte
π/4
1
Não vejo como você obtém um ponto 3D fora do contorno por projeção. Existem técnicas de modelagem 3d que lidam com superfícies NURBS esticadas entre splines, mas você precisa fornecer splines características para isso. (Talvez um artista 3d possa definir a característica da palavra nesse contexto, mas não eu.) Novamente, acho que a forma do contorno (o mesmo que o casco visual) pode criar um modelo aproximado para você. Depois disso, você pode refiná-lo com base nas imagens. Mas não há maneiras padrão para isso.
Bálint Fodor
2

Embora mencionado pelo livro de Fodor Hartley e Zisserman, definitivamente vale a pena ler, é mais para compreensão geral do que para algoritmos práticos. É bastante desatualizado e esses métodos não são eficientes. Sobre o seu problema - a formulação do problema em si é muito incomum. Como foi mencionado por Fodor, começar com pontos de recurso correspondentes em vez de contornos é muito mais fácil. Em caso de pontos absolutamente melhor visão geral de métodos modernos disponíveis é o papel por Triggs "Bundle Ajuste - A Síntese Moderna" Mas antes de usar o ajuste pacote você teria que ponto correspondente jogo nas imagens usando algo como SIFT ou casamento de modelos. Google para reconstrução 3Dpara exemplos de alguns métodos completos. Você também pode usar pacotes de código aberto para isso, existem vários disponíveis.

Se você insistir em usar contornos, o problema é muito mais difícil, embora ainda seja (quase) tratável. Primeiro, você terá que identificar e combinar os contornos correspondentes em todas as imagens, depois escrever a função de custo - da soma dos erros de reprojeção para cada grupo de contornos correspondentes, em função da posição e orientação da câmera de cada imagem. Depois disso, encontre o conjunto de posição da câmera que minimiza essa função de custo. Cada etapa desse processo é extremamente difícil e não há uma boa visão geral como o Triggs. Você pode pesquisar no Google alguns documentos relevantes, como uma combinação dos termos "contornos" "correspondentes à correspondência" "ajuste de pacote" "erro de reprojeção" "reconstrução 3D".

mirror2image
fonte
Embora seja definitivamente mais fácil lidar com recursos do tipo SIFT, existe um problema que o SIFT no meu domínio geralmente capta sombras / reflexos na superfície brilhante dos carros, então, usando o SIFT, estou obtendo uma quantidade enorme de recursos de ruído que não dependem de um real forma do carro, portanto, tenho uma diminuição da precisão.
Om-nom-nom
Você pode tentar uma abordagem baseada em modelo se souber que está olhando no carro. Parametrize o modelo de carro genérico e tente ajustá-lo à imagem usando todos os pixels da imagem. Escreva a função de custo em função dos parâmetros da câmera e do modelo do carro e minimize-a. Pode funcionar (ou não) - você parece ter um problema bastante difícil.
Mirror2image 11/11/11
Infelizmente, não entendi o que você propôs fazer. Por favor, forneça um exemplo (pode ser um artigo externo, um trabalho relacionado ou algo parecido com isto).
Om-nom-nom
Quer dizer modelo activo forma en.wikipedia.org/wiki/Active_shape_model ou poucos imilar
mirror2image
2

Confira Reconstrução do modelo a partir de imagens, que é um pouco diferente do que você está fazendo, mas falo sobre como passar de imagens para um modelo 3D. Verifique também o MeshLab , ele possui alguns algoritmos de reconstrução nos quais você pode alimentar seus dados.

yxk
fonte