Documentos de Académico
Documentos de Profesional
Documentos de Cultura
mecatrónica.
Reconstrucción 3D
INTRODUCCION
Una nube de puntos es una estructura de datos utilizada para representar una colección de
puntos multidimensionales y se usa comúnmente para representar datos tridimensionales. En una
nube de puntos 3D, los puntos generalmente representan las coordenadas geométricas X, Y y Z de
una superficie muestreada subyacente. Cuando la información de color está presente.
Existe la librería Point Cloud Library que es un proyecto abierto a gran escala para
procesamiento de imágenes 2D y 3D y de nubes de puntos. El framewrok de esta librería contiene
numerosos algoritmos del estado del arte incluyendo filtros, reconstrucción de superficies,
alineamientos y segmentación. Estos algoritmos se usan en un conjunto de datos conruido,
uniendo nubes de puntos 3D, segmentar partes relevantes de una escena y crear superficies a partir
de nubes de puntos y visualizarlas.
DESARROLLO
Comenzamos importando las librerías y creando la clase donde Reconstrucción, en ella
abrimos la imagen a color y la imagen de profundidad convertida a escala de grises.
Figura 1
Continuamos creando una función para obtener los datos de las imágenes en array e
insertar los datos en un DataFrame con la ayuda de pandas. Retornamos el DataFrame
Figura 2
Creamos otra función, donde abrimos la imagen de profundidad convertida en
array y recibimos el DataFrame de la función anterior. Estos datos se combinan en el
DataFrame para que la librería PyntCloud cree la nube de puntos y la muestre en las
gráficas.
Figura 3
RESULTADOS.
Figura 6. Representación3D
CONCLUSION
En el siguiente trabajo se implementó un código para la reconstrucción 3D capaz de extraer
los objetos de una escena de una imagen en 2D. Este trabajo nos servirá para implementar el código
a una secuencia de imágenes para la navegación autónoma de nuestro robot.
ANEXO A
import pandas as pd
import numpy as np
from pyntcloud import PyntCloud
from PIL import Image
class Reconstruccion:
def __init__(self):
self.colourImg = Image.open("img_color.jpg")
self.colourPixels = self.colourImg.convert("RGB")
self.depthImg = Image.open('img_depth.jpg').convert('L')
print(self.colourImg, self.depthImg)
def data(self):
colourArray = np.array(self.colourPixels.getdata()).reshape((self.colourImg.height,
self.colourImg.width) + (3,))
indicesArray = np.moveaxis(np.indices((self.colourImg.height, self.colourImg.width)), 0, 2)
def building(self):
dataframe = self.data()
depthArray = np.array(self.depthImg.getdata())
dataframe.insert(loc=2, column='z', value=depthArray)
dataframe[['x','y','z']] = dataframe[['x','y','z']].astype(float)
dataframe['z'] = dataframe['z']*0.5
dataframe[['red','green','blue']] = dataframe[['red','green','blue']].astype(np.uint)
cloud = PyntCloud(dataframe)
cloud.plot()
#cloud.show()
tresD = Reconstruccion()
#tresD.data()
#tresD.building()