Point_Cloud - RicoJia/notes GitHub Wiki
========================================================================
========================================================================
-
[x,y,z]
, from Lidar, SfM, CAD, RGBD Camera, Depth from images. Iphone has RGBD for face recognition (so cannot be fooled by image)- Perception: object detection, classification
- 语义分割: how to segment a group of point clouds from another, and interpret them.
- Also need to calibrate Lidar and RGB camera.
- How to represent a 3D?
- use triangles and put them in meshes. But triangles are complex (in older games before)
- Voxel grid: wasting a lot of empty cells
- Octree: can represent an object when there is one, but quite complex.
- use triangles and put them in meshes. But triangles are complex (in older games before)
-
Challenges:
- Sparsity: point clouds far away will not be recognized properly
- Irregular: Not like pixels in a picture. No guarantee that you'll find points within a radius
- Lack of texture. 3 ppl walking side by side might be recognized as a car.
- Unordered: will confuse deep nets, just by swapping two examples.
- Rotation invariance for recognition
-
Methods
- classical: explanable: controllable. But hard to model semantics.
-
SLAM: loop closure, registration? what is registration?
-
Great books:
- probablistic graphical models, principle and techques
- Pattern recognition and machine learning (christopher bishop)
- Machine Learning, a probablistic perspective
- Computer Vision: models, learning and interference.
- Bayesian Reasoning and machine learning. (David barber)
- Deep learning: simple, object recognition is much better. But it's a black-box. Requires GPU, FPGA, and more difficult to find a job LOL
- Data collection, date labelling, data training.
========================================================================
========================================================================
- open3d
-
numpy -> open3d.PointCloud
# Pass xyz to Open3D.o3d.geometry.PointCloud and visualize pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(xyz) o3d.io.write_point_cloud("../../TestData/sync.ply", pcd)
-
open3d.PointCloud -> numpy
import open3d as o3d pcd_load = o3d.io.read_point_cloud("../../TestData/sync.ply") o3d.visualization.draw_geometries([pcd_load]) # convert Open3D.o3d.geometry.PointCloud to numpy array xyz_load = np.asarray(pcd_load.points)``` [[-3.00000000e+00 -3.00000000e+00 -3.89817183e-17]
- make sure no inf in the point cloud
-
orientation: red is +x, green is +y. In default view, z is pointing outwards
-