fbpx
Sigmoidal
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
  • English
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
Sigmoidal
Sem Resultado
Ver Todos Resultados

Processamento de Nuvens de Pontos com Open3D e Python

Carlos Melo por Carlos Melo
janeiro 2, 2025
em Machine Learning, Teoria, Tutoriais, Visão Computacional
0
45
COMPARTILHAMENTOS
1.5k
VIEWS
Publicar no LinkedInCompartilhar no FacebookCompartilhar no Whatsapp

O campo da compreensão em 3D tem atraído atenção crescente nos últimos tempos, impulsionado significativamente pelas tecnologias de AR e Computação Espacial, apoiadas por grandes empresas como Apple e Meta.

No centro deste fascinante campo está a visão computacional em 3D, um ramo especializado da visão computacional que foca em compreender e processar dados visuais tridimensionais do mundo real.

Nuvem de pontos de uma cena de tráfego gerada por LIDAR.

Este artigo apresenta o processamento de nuvens de pontos 3D usando a biblioteca Open3D, uma biblioteca open-source projetada para capacitar desenvolvedores e pesquisadores com um conjunto abrangente de ferramentas para processamento de dados em 3D. Todos esses conceitos serão explorados através de exemplos práticos em Python, proporcionando uma base sólida para explorar e aplicar habilidades de processamento de dados 3D.

Baixe o código

  • Todo o código publicado no campo de machine learning 3D pode ser encontrado no repositório oficial do GitHub.
  • O código específico deste artigo está disponível aqui.

Open3D: Uma Biblioteca Moderna para Processamento de Dados 3D

O Open3D está na vanguarda da tecnologia de processamento de dados 3D, oferecendo uma biblioteca open-source que acelera significativamente o desenvolvimento de softwares focados no manuseio de dados 3D. Projetado com uma API clara e intuitiva, o Open3D oferece aos desenvolvedores e pesquisadores acesso fácil a um conjunto robusto de estruturas de dados e algoritmos para computação em 3D, tanto em C++ quanto em Python.

As principais funcionalidades do Open3D são cuidadosamente projetadas para cobrir todos os aspectos do manuseio de dados 3D, incluindo suporte abrangente para estruturas de dados 3D e algoritmos de processamento, essenciais para tarefas como reconstrução de cenas, alinhamento de superfícies e visualização 3D.

Visão geral dos diferentes componentes do Open3D.
Visão geral dos diferentes componentes do Open3D (crédito da imagem)

Além disso, a biblioteca vai além das capacidades tradicionais de processamento ao oferecer renderização baseada em física (PBR), que adiciona uma camada de realismo aos modelos 3D, e suporte para machine learning em 3D, permitindo integração com frameworks populares como PyTorch e TensorFlow.

O suporte do Open3D para aceleração por GPU melhora significativamente a eficiência das operações principais em 3D, beneficiando aplicações que requerem processamento e visualização em tempo real de dados 3D, como experiências interativas de AR/VR, robótica e navegação de veículos autônomos.

Métodos de Representação de Formas 3D

No processamento de dados 3D, as formas podem ser representadas de duas maneiras principais: formas rasterizadas e formas geométricas.

Representações rasterizadas utilizam grades regulares e incluem imagens multivista, mapas de profundidade e dados volumétricos. Imagens multivista capturam objetos de vários ângulos, mapas de profundidade registram a distância de um ponto de vista até a superfície do objeto, e representações volumétricas utilizam uma grade de voxels para modelar objetos no espaço 3D.

Por outro lado, representações geométricas modelam formas através de elementos irregulares e discretos. Essa categoria inclui malhas poligonais, compostas por vértices, arestas e faces; nuvens de pontos, que são conjuntos de vértices em um sistema de coordenadas tridimensional; e modelos CAD baseados em primitivas, que utilizam formas geométricas básicas (como esferas, cubos e cilindros) para construir objetos complexos.

Cada tipo de representação possui aplicações e vantagens específicas, com as formas rasterizadas sendo úteis para reconstrução 3D baseada em imagens, enquanto as formas geométricas oferecem maior precisão em modelagem e simulação.

Diferentes formas de representação de um conjunto de dados de nuvem de pontos 3D (crédito da imagem: Florent Poux, Ph.D.)

1 de 4
- +
Example of 3D Point Cloud
An aerial LiDAR simulated point cloud
Example of shell representation
Example of a solid 3D model through voxelization

 

Fundamentos Teóricos das Nuvens de Pontos

Nuvens de pontos são uma forma fundamental de representação de superfícies, capturando a essência dos objetos em forma de pontos discretos distribuídos por suas superfícies. Matematicamente, uma nuvem de pontos pode ser definida como um conjunto P = \{p_1, p_2, ..., p_n\}, onde cada p_i \in \mathbb{R}^3 representa um ponto no espaço tridimensional com coordenadas que correspondem à sua posição.

Essa simplicidade permite a aquisição direta de dados espaciais do ambiente, tornando as nuvens de pontos uma ferramenta indispensável em áreas como visão computacional, gráficos por computador e robótica. A proliferação de sensores 3D acessíveis tornou os dados de nuvens de pontos mais democratizados, permitindo uma ampla gama de aplicações, desde mapeamento detalhado do ambiente até tarefas complexas de reconhecimento de objetos.

Representações 3D, incluindo nuvem de pontos
Representações 3D: a nuvem de pontos é a mais próxima dos dados brutos do sensor e possui uma representação simples (crédito da imagem)

Os algoritmos projetados para processamento de nuvens de pontos frequentemente dependem de relações espaciais e variações de densidade dentro dos dados para inferir propriedades de superfícies e limites de objetos. Técnicas como a construção de uma árvore k-d para busca eficiente dos vizinhos mais próximos ou a aplicação de algoritmos de reconstrução de superfícies, como reconstrução de Poisson ou formas alfa, são comumente empregadas para derivar interpretações significativas a partir dos dados brutos da nuvem de pontos.

Apesar de sua simplicidade, as nuvens de pontos encapsulam um rico conjunto de informações sobre a geometria e a topologia de objetos físicos, servindo como uma ponte crítica entre os mundos digital e físico em diversos domínios tecnológicos.

Início Rápido com Python e Open3D

Nesta seção, exploraremos os fundamentos do uso do Open3D, uma poderosa biblioteca para processamento de dados 3D, com foco na visualização de nuvens de pontos. O Open3D simplifica a manipulação e a visualização de dados 3D, tornando-o acessível para desenvolvedores que trabalham em diferentes plataformas, como Ubuntu, macOS e Windows, com versões do Python de 3.8 a 3.11.

Instalação e Verificação

Para começar a usar o Open3D, você pode instalá-lo utilizando o comando pip. Existem duas opções de instalação disponíveis: uma instalação padrão e uma versão apenas para CPU em sistemas Linux x86_64, que é menor e pode ser preferida em ambientes sem GPU dedicada.

pip install open3d       # Instalação padrão
pip install open3d-cpu   # Versão apenas para CPU em Linux

Após a instalação, é uma boa prática verificar se o Open3D foi instalado corretamente, checando sua versão. Isso pode ser feito com um comando simples em Python.

python -c "import open3d as o3d; print(o3d.__version__)"

O Open3D também oferece uma API Python para processamento e visualização de dados 3D, além de uma interface de linha de comando (CLI) para executar exemplos predefinidos.

Visualizando uma Nuvem de Pontos

O núcleo deste tutorial foca em carregar e visualizar uma nuvem de pontos utilizando o Open3D. O processo começa com o carregamento de um arquivo de nuvem de pontos no formato .ply, um formato popular para armazenar dados 3D. O método read_point_cloud é utilizado para esta finalidade, decodificando automaticamente o arquivo com base em sua extensão.

import open3d as o3d
import numpy as np

# Carregando e visualizando uma nuvem de pontos em formato PLY
print("Carregando uma nuvem de pontos PLY, imprimindo e renderizando...")
ply_point_cloud = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(ply_point_cloud.path)

# Imprimindo informações sobre a nuvem de pontos e o array de pontos
print(pcd)
print(np.asarray(pcd.points))

# Definindo parâmetros de visualização
view_params = {
    "zoom": 0.3412,
    "front": [0.4257, -0.2125, -0.8795],
    "lookat": [2.6172, 2.0475, 1.532],
    "up": [-0.0694, -0.9768, 0.2024]
}

# Renderizando a nuvem de pontos
o3d.visualization.draw_geometries([pcd], **view_params)

Após carregar a nuvem de pontos, podemos inspecioná-la imprimindo o objeto pcd e o array de pontos contido nela. Isso oferece uma visão da estrutura e dos dados presentes na nuvem de pontos. A visualização é realizada pela função draw_geometries, que renderiza a nuvem de pontos em uma janela, permitindo que os usuários interajam com os dados 3D. Esses parâmetros ajudam a ajustar a perspectiva da câmera, oferecendo uma visão detalhada da estrutura dos dados após a simplificação.

Visualizando uma Nuvem de Pontos com Open3D

A visualização pode dar a impressão de uma superfície densa; no entanto, é importante lembrar que o que estamos vendo é uma nuvem de pontos renderizada como surfels. A interface gráfica do Open3D oferece funcionalidades adicionais, como o ajuste do tamanho dos pontos através de atalhos de teclado, melhorando a experiência de visualização. Por exemplo, pressionar a tecla - diminui o tamanho dos pontos, oferecendo uma perspectiva diferente dos dados.

Redução de Pontos com Voxel (Voxel Downsampling)

Esse processo aplica uma grade de voxels para reduzir uniformemente a densidade da nuvem de pontos de entrada, simplificando os dados para maior eficiência computacional nas etapas de processamento subsequentes. O método funciona agrupando pontos em voxels e, em seguida, calculando a média dos pontos dentro de cada voxel para uma única localização.

Isso reduz o número de pontos, mantendo a forma e as características gerais da nuvem de pontos original.

print("Reduzindo a nuvem de pontos com um tamanho de voxel de 0.05")

# Aplicando a redução de pontos com voxel
downpcd = pcd.voxel_down_sample(voxel_size=0.05)

# Definindo parâmetros de visualização para a nuvem de pontos reduzida
downsample_view_params = {
    "zoom": 0.3412,
    "front": [0.4257, -0.2125, -0.8795],
    "lookat": [2.6172, 2.0475, 1.532],
    "up": [-0.0694, -0.9768, 0.2024]
}

# Renderizando a nuvem de pontos reduzida
o3d.visualization.draw_geometries([downpcd], **downsample_view_params)

No trecho de código sobre a redução de pontos com voxel, o processo começa especificando um tamanho de voxel de 0.05, que determina a resolução da grade de voxels. A função voxel_down_sample é chamada na nuvem de pontos original pcd, reduzindo sua densidade ao calcular a média dos pontos dentro de cada voxel. Isso resulta em downpcd, uma versão simplificada da nuvem de pontos original.

A função o3d.visualization.draw_geometries é utilizada para visualizar downpcd. Parâmetros como zoom, front, lookat e up são configurados para ajustar o ângulo e a posição da câmera, proporcionando uma visualização clara da nuvem de pontos reduzida.

Estimação de Normais dos Vértices

A estimação de normais dos vértices calcula as normais para cada ponto na nuvem de pontos, algo essencial para muitas tarefas de processamento 3D. A visualização das normais pode ser ativada pressionando a tecla N, e seu comprimento pode ser ajustado com as teclas - e +. Essa função calcula as normais identificando pontos adjacentes e utilizando a análise de covariância para encontrar o eixo principal.

Uma instância de KDTreeSearchParamHybrid, que especifica um raio de busca e o número máximo de vizinhos próximos, controla o nível de detalhe da estimação das normais para equilibrar precisão e carga computacional.

print("Recalculando as normais para a nuvem de pontos reduzida")

# Estimando normais para a nuvem de pontos reduzida
downpcd.estimate_normals(
    search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))

# Definindo parâmetros de visualização para exibir as normais
normals_view_params = {
    "zoom": 0.3412,
    "front": [0.4257, -0.2125, -0.8795],
    "lookat": [2.6172, 2.0475, 1.532],
    "up": [-0.0694, -0.9768, 0.2024],
    "point_show_normal": True
}

# Renderizando a nuvem de pontos reduzida com normais
o3d.visualization.draw_geometries([downpcd], **normals_view_params)

No código de estimação de normais dos vértices, a operação começa chamando a função estimate_normals na nuvem de pontos reduzida downpcd. Essa função calcula as normais para cada ponto, o que é crucial para muitas tarefas de processamento 3D, como renderização, simulação e análises geométricas.

O argumento search_param especifica como as normais serão calculadas, utilizando uma árvore KD (k-d tree) para encontrar eficientemente pontos próximos.

Estimação de Normais dos Vértices com Open3D

Aqui, o3d.geometry.KDTreeSearchParamHybrid é configurado com um radius de 0,1 e max_nn (máximo de vizinhos próximos) de 30. Essa configuração equilibra a precisão da estimação de normais com a eficiência computacional, limitando a busca a um raio de 10 cm e considerando até 30 vizinhos para cada ponto.

Após o cálculo das normais, a função o3d.visualization.draw_geometries visualiza a nuvem de pontos reduzida com as normais habilitadas.

Conclusões

  • Papel do Open3D: O Open3D é uma biblioteca essencial para o processamento de dados 3D, permitindo a manipulação de dados complexos em 3D com suporte para C++ e Python. Ele facilita uma variedade de aplicações, desde visão computacional 3D até AR/VR e robótica.
  • Representação de Formas 3D: O artigo explica as formas rasterizadas e geométricas como os dois métodos principais para representar formas 3D. As formas rasterizadas incluem imagens multivista e dados volumétricos, enquanto as formas geométricas abrangem malhas poligonais e nuvens de pontos.
  • Fundamentos das Nuvens de Pontos: Nuvens de pontos servem como uma forma simples, mas informativa, de representação de superfícies, sendo essenciais para tarefas como mapeamento ambiental e reconhecimento de objetos. O artigo cobre a definição matemática das nuvens de pontos e sua importância em visão computacional e robótica.
  • Guia Rápido com Python: Um guia rápido para começar a usar o Open3D com Python é fornecido, incluindo instruções de instalação e operações básicas, como carregar, visualizar e reduzir nuvens de pontos, oferecendo uma introdução prática às capacidades do Open3D.
  • Uso Prático do Open3D: Demonstrando a utilidade do Open3D, o artigo fornece exemplos em Python para tarefas como visualização de nuvens de pontos, redução de pontos com voxel e estimação de normais dos vértices. Esses exemplos destacam a funcionalidade do Open3D no processamento e visualização de dados 3D.

Compreender e processar nuvens de pontos é crucial para diversas aplicações, e dentro do contexto da Visão Computacional 3D, a biblioteca Open3D oferece as ferramentas necessárias para essas tarefas. Se você achou este post informativo, não deixe de curtir, comentar e compartilhar para apoiar e disseminar o conhecimento.

Compartilhar3Compartilhar18Enviar
Post Anterior

Inteligência Artificial criando filmes? Conheça Movie Gen, a nova ferramenta da META.

Próximo Post

Oportunidades no Setor Espacial para Cientistas de Dados

Carlos Melo

Carlos Melo

Engenheiro de Visão Computacional graduado em Ciências Aeronáuticas pela Academia da Força Aérea (AFA) e Mestre em Engenharia Aeroespacial pelo Instituto Tecnológico de Aeronáutica (ITA).

Relacionado Artigos

O Que é Amostragem e Quantização no Processamento de Imagens
Artigos

O Que é Amostragem e Quantização no Processamento de Imagens

por Carlos Melo
junho 20, 2025
Curso de Pós-Graduação em Data Science
Data Science

Vale a pena fazer uma Pós-Graduação em Data Science?

por Carlos Melo
janeiro 20, 2025
Review do Livro “Mãos à obra: Aprendizado de Máquina com Scikit-Learn, Keras & TensorFlow”
Livros

Review do Livro “Mãos à obra: Aprendizado de Máquina com Scikit-Learn, Keras & TensorFlow”

janeiro 18, 2025
Carlos Melo e Sérgio Sacani – Ciência Sem Fim
Youtube

Carlos Melo e Sérgio Sacani – Ciência Sem Fim

por Carlos Melo
janeiro 16, 2025
Meta Movie Gen para gerar vídeos a partir de textos
Youtube

Inteligência Artificial criando filmes? Conheça Movie Gen, a nova ferramenta da META.

por Carlos Melo
outubro 30, 2024
Próximo Post
Carlos Melo da Pós Graduação em Data Science do Sigmoidal

Oportunidades no Setor Espacial para Cientistas de Dados

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Pós-Graduação em Data Science Pós-Graduação em Data Science Pós-Graduação em Data Science

Mais Populares

  • Introdução ao MediaPipe e Pose Estimation

    Introdução ao MediaPipe e Pose Estimation

    488 compartilhamentos
    Compartilhar 195 Tweet 122
  • ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

    409 compartilhamentos
    Compartilhar 164 Tweet 102
  • O Que é Amostragem e Quantização no Processamento de Imagens

    9 compartilhamentos
    Compartilhar 4 Tweet 2
  • Geometria da Formação de Imagens: Matrizes, Transformações e Sistemas de Coordenadas

    384 compartilhamentos
    Compartilhar 154 Tweet 96
  • Processamento de Nuvens de Pontos com Open3D e Python

    45 compartilhamentos
    Compartilhar 18 Tweet 11
  • Em Alta
  • Comentários
  • Mais Recente
Como Tratar Dados Ausentes com Pandas

Como Tratar Dados Ausentes com Pandas

agosto 13, 2019
Como usar o DALL-E 2 para gerar imagens a partir de textos

Como usar o DALL-E 2 para gerar imagens a partir de textos

dezembro 25, 2022
Introdução ao MediaPipe e Pose Estimation

Introdução ao MediaPipe e Pose Estimation

julho 15, 2023

ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

abril 10, 2023
Como Analisar Ações da Bolsa com Python

Como Analisar Ações da Bolsa com Python

15
Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

13
Como Aprender Data Science?

Como Aprender Data Science?

9
Qual o Cenário de Data Science no Brasil hoje?

Qual o Cenário de Data Science no Brasil hoje?

8
Green Card aprovado por habilidades extraordinárias em Data Science

Green Card aprovado por habilidades extraordinárias em Data Science

julho 14, 2025
O Que é Amostragem e Quantização no Processamento de Imagens

O Que é Amostragem e Quantização no Processamento de Imagens

junho 20, 2025
DeepSeek vazamento de dados de usuários

DeepSeek: Vazamento de dados expõe dados de usuários

fevereiro 1, 2025
DeepSeek R1 vs OpenAI o1 – Qual é o Melhor Modelo de IA

DeepSeek R1 vs OpenAI o1 – Qual é o Melhor Modelo de IA?

janeiro 25, 2025

Seguir

    Instagram Youtube LinkedIn Twitter
    Sigmoidal

    O melhor conteúdo técnico de Data Science, com projetos práticos e exemplos do mundo real.

    Seguir no Instagram

    Categorias

    • Aeroespacial
    • Artigos
    • Blog
    • Carreira
    • Cursos
    • Data Science
    • Deep Learning
    • Destaques
    • Entrevistas
    • IA Generativa
    • Livros
    • Machine Learning
    • Notícias
    • Python
    • Teoria
    • Tutoriais
    • Visão Computacional
    • Youtube

    Navegar por Tags

    camera calibration carreira chatgpt cientista de dados cnn computer vision Cursos dados desbalanceados data science data science na prática decision tree deep learning gpt-3 histograma IA generativa image formation inteligência artificial jupyter kaggle keras machine learning matplotlib mnist nft openai opencv overfitting pandas profissão python redes neurais redes neurais convolucionais regressão linear regressão logística salário scikit-learn seaborn sklearn tensorflow titanic tutorial visão computacional vídeo youtube árvore de decisão

    © 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.

    Welcome Back!

    Login to your account below

    Forgotten Password?

    Retrieve your password

    Please enter your username or email address to reset your password.

    Log In

    Add New Playlist

    Sem Resultado
    Ver Todos Resultados
    • Home
    • Cursos
    • Pós-Graduação
    • Blog
    • Sobre Mim
    • Contato
    • English

    © 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.