Detecção de linhas em uma nuvem de pontos

7

Quais são as melhores soluções para detectar linha em uma nuvem de pontos? Comparação sendo feita com e entre Hough Transform , Radon Transform , RANSAC (consulte a wikipedia) e Brute-Force Search (consulte a wikipedia).
Qual é o mais robusto contra a dispersão de pontos na nuvem de pontos?
Nota:
1- A pergunta é sobre nuvem de pontos 3D e não imagem.
2 - Os pontos na nuvem de pontos são aleatoriamente dispersos (locais completamente esparsos).
3- Não há informações sobre o objeto (linha) sendo explorado em termos de orientação preferida, tamanho etc.
4- É necessário considerar uma tolerância em torno da linha candidata.
Atualizações:
De acordo com meus experimentos: o RANSAC pode perder facilmente algumas linhas. É bom para a detecção rápida de arestas, no entanto, a complexidade da dispersão de pontos pode produzir resultados indesejados. Hough e Radon são muito parecidos e não tive chance de experimentar a nuvem de pontos 3D, mas eles funcionam bem em casos 2D. Há uma dificuldade na extração de segmentos de linhas encontradas. O BFS é simplesmente impraticável para grandes conjuntos de dados.

Desenvolvedor
fonte
Radon e Hough operariam com dados volumétricos, e não com nuvens de pontos, até onde eu sei. As idéias provavelmente podem ser adaptadas para nuvens de pontos, mas não tenho certeza se elas ainda teriam o mesmo nome.
endolith
Quais são os seus critérios? A força bruta definitivamente encontraria uma linha se ela estiver lá, enquanto o RANSAC apenas "provavelmente" encontra a linha.
endolith
@endolith '... volumetric ...': Um bom ponto. Eu acho que é possível pixelizar (mapear) os pontos 3D em volume 3D (matriz 3D) com uma tolerância aceitável referente à resolução da matriz (ou seja, número de células). '... Força Bruta ...' é absolutamente preciso, mas não computacionalmente prático para um grande conjunto de pontos. 'RANSAC', como você mencionou, pode perder alguns candidatos. A idéia é discutir e encontrar algumas sugestões para lidar com esses problemas: custo de computação e inexatidão.
Desenvolvedor
Converter a nuvem de pontos em uma matriz volumétrica provavelmente seria um passo na direção errada. :) Melhor usar algoritmos que operam na nuvem de pontos e na distância euclidiana entre pontos.
endolith
@ endolith Você pode estar certo. Apenas para mencionar que minhas experiências pessoais com o Hough Transform em casos 2D foram muito satisfatórias e foram realmente rápidas e imediatas! Estou pensando em beneficiar de um método de vários estágios para obter precisão e velocidade ao mesmo tempo. Espero que os comentários e respostas deste post possam fornecer algumas orientações.
Desenvolvedor

Respostas:

1

Realmente depende, como você medirá a qualidade das soluções? quais são as suas necessidades, em tempo real, alta precisão? qual é o tamanho da nuvem de pontos?

Você mencionou métodos baseados no processamento de sinal válidos, mas sofisticados, para resolver o problema.

Deixe-me acrescentar três métodos que você não mencionou que são clássicos e de natureza mais estatística: mínimos quadrados, regressão de crista e laço.

carlosdc
fonte
11
Todos esses são métodos de otimização, mas o truque é encontrar uma boa função para otimizar. Qual é a função que você está sugerindo para otimizar?
Phonon
0

Se você está realmente preocupado com as linhas de detecção, pode fazer uma abordagem simplificada.

Projete sua nuvem de pontos - em pelo menos duas superfícies. Digamos projetá-los nos planos XY e YZ. Basicamente, comece com uma tela em branco e projete cada ponto com base em alguns critérios de geometria. Então agora você terá uma tela 2D finita que está toda em branco, mas os pontos brancos estão presentes. Agora você pode aplicar a transformação hough nessas telas.

Com base no hough, você obterá as linhas e para dois planos respectivos. O próximo passo é realmente associar essas linhas para identificar uma única linha 3D.(r,θ)(r,ϕ)

No que diz respeito à precisão, quando os dados são escassos, a pontuação do hough (ou seja, força) pode ser menor. No entanto, funcionará se no geral todas as linhas forem esparsas. É um problema quando você está comparando uma linha muito longa com uma linha curta.

Dipan Mehta
fonte