É possível converter de 2D para 3D?

8

Eu capturei posições de carro em quadros diferentes do vídeo . Suponha que o centróide do carro (carro lateral esquerdo que está vindo em nossa direção nas imagens) no quadro de vídeo1 seja P (x1, y1) e Q (x2, y2) no quadro de vídeo4.

É possível representar pontos P e Q em 3D? para que eu possa calcular a distância correta do pixel d (PQ) e finalmente calcular a distância real

Nota: você pode assumir que a câmera está estacionária, localizada a uma altura de 10 m do nível do solo. Você também pode assumir quaisquer dados adequados, se desejar, carro em movimento na estrada também pode consultar a próxima figura.

vista lateral e vista frontal

sagar
fonte
1
Marcar 50% das suas perguntas em negrito, realmente não ajuda.
jojek
1
@jojek senhor i ter adicionado uma figura de referência
sagar

Respostas:

4

[EDITADO] Veja como é feito.

Etapas: 1. Isole a peça do divisor de estrada.

Imagem RecortadaIsolar as tiras amarelas

Em seguida, usando as linhas de acesso, descubra as linhas mais longas na imagem. Descubra os pontos extremos que cruzam o limite da imagem. Você conseguiu os pontos Quadilaterais. Eu pulei esta parte escolhendo-os manualmente. No meu caso, a largura da estrada na parte superior da imagem é 10 e na parte inferior é 60.

O Quadilateral para Transformar

Agora, para o Destino, precisamos criar uma imagem para que o Divisor Quadilateral tenha largura uniforme de 60, para salvar em outra matriz novos pontos, que têm os mesmos pontos inferiores, mas os pontos superiores são modificados à medida que formam um retângulo com a mesma altura da imagem. (ou maior, você pode ajustar como preferir depois de executá-lo e ver os resultados), mas com a largura 60. Lembre-se de que estamos transformando nossa imagem para que o divisor se encaixe nessa área retangular. A imagem mudará automaticamente.

Agora, usando Mat TransformMat = getPerspectiveTransform(ipPts, opPts);

de opencv em pontos quadrilaterais iniciais e de destino, obtemos uma matriz de transformação, que aplicamos à nossa imagem de teste.

warpPerspective(ipImg, opImg, TransformMat, ipImg.size());

Imagem transformada

Você verá muita área cortada para ajustar a saída no tamanho da imagem de entrada. No entanto, você notará que a imagem é transformada para obter um divisor paralelo, como esperávamos. Ao realizar algumas traduções e outras coisas e obter uma imagem de tamanho maior, você obterá isso. Nunca podemos obter uma imagem de saída perfeitamente acondicionada, pois seu tamanho pode ser muito grande. Mas alcançaremos algumas restrições que cumprirão nossa tarefa. Aqui está a última imagem:

Imagem final transformada

shreelock
fonte
1
@ Um senhor Matlabber em Matlab existe alguma função para converter de projeção 2D para 3D. ??
sagar
Seu problema não é um problema de projeção 2D para 3D. É um problema de transformação homográfica e mapeamento de perspectiva, além de processamento adicional que o ajudará a calcular a distância (o que você está tentando realizar criando um '3d'). Talvez essa discussão possa ajudá-lo.
shreelock
1
@A Matlabber senhor está ficando difícil de entender transformação Homographic e Perspectiva Mapping.i procurei no google, mas não obtenção de idéia sobre isso ..
sagar
Você pode pesquisar no Google vários exemplos de Transformação Homográfica e Mapeamento de Perspectivas. Este é um tópico introdutório, ensinado em muitos dos cursos on-line de visão computacional. Estou bastante ocupado agora, caso contrário, eu teria lhe dado algumas referências sobre eles. Tente procurar cursos sobre Processamento de imagens / Visão computacional, eles raramente têm exercícios de demonstração / programação sobre esse tipo de problema.
shreelock
@ Matlabber ok, vou fazer o que você diz. Obrigado.
sagar
3

Parece um tipo de problema de rastreamento de raios . Se você conhece a posição e a orientação da sua câmera, deve poder calcular a matriz de projeção 3x4 e sua inversa.

Isso deve permitir a conversão dos pontos da imagem para a posição 3d (na estrada). Esta discussão http://opencv-users.1802565.n2.nabble.com/2D-to-3D-projection-with-given-plane-td7272428.html pode ter informações mais úteis.

Quanto à aplicação no matlab. Existe um affine3d que você pode usar para armazenar a transformação. Também pode haver coisas úteis para projeções / rastreamento de raios na troca de arquivos, como http://www.mathworks.com/matlabcentral/fileexchange/25974-raytracer, mas não procurei em detalhes o que é relevante para o que você quer.

nivag
fonte
senhor está ficando difícil de entender transformação Homographic e Perspectiva Mapping.i procurei no google também links u dado, mas não obtenção de idéia sobre isso ..
sagar
1
@sagar Procure "Geometria de Múltiplas Vistas em Visão Computacional" da Hartley & Zisserman. Este é o livro que explica a homografia de maneira natural (usando coordenadas homogêneas, nas quais a transformação é linear).
Libor
1

Se você puder calibrar sua câmera e detectar alguns pontos de referência na superfície da estrada, poderá obter coordenadas 3D dos pontos de imagem que estão na estrada. Isso pressupõe que a estrada esteja em um avião. Em outras palavras, se você pode detectar um carro, pode calcular as coordenadas 3D da parte inferior do carro. Veja este exemplo no MATLAB usando a Caixa de ferramentas do sistema Computer Vision.

Dima
fonte