{"id":15189683,"url":"https://github.com/jlgregorio/tutorials-pointcloud-python","last_synced_at":"2025-10-27T12:32:07.871Z","repository":{"id":247753173,"uuid":"826752018","full_name":"jlgregorio/tutorials-pointcloud-python","owner":"jlgregorio","description":"Tutorials for pointcloud processing in Python (basic operations, spatial indexing, registration, segmentation \u0026 primitive fitting)","archived":false,"fork":false,"pushed_at":"2024-11-18T17:42:32.000Z","size":23154,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-01T05:31:56.871Z","etag":null,"topics":["jupyter","point-cloud","python","tutorial"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jlgregorio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-10T09:58:35.000Z","updated_at":"2024-11-18T17:42:36.000Z","dependencies_parsed_at":"2024-07-26T16:24:04.955Z","dependency_job_id":"686b7eff-be14-4c8c-a663-d16ba46180a4","html_url":"https://github.com/jlgregorio/tutorials-pointcloud-python","commit_stats":{"total_commits":13,"total_committers":2,"mean_commits":6.5,"dds":0.07692307692307687,"last_synced_commit":"bcfffd09d4c4af126553b32e6abe20806eb495c0"},"previous_names":["jlgregorio/tutorials-pointcloud-python"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlgregorio%2Ftutorials-pointcloud-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlgregorio%2Ftutorials-pointcloud-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlgregorio%2Ftutorials-pointcloud-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlgregorio%2Ftutorials-pointcloud-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jlgregorio","download_url":"https://codeload.github.com/jlgregorio/tutorials-pointcloud-python/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238497544,"owners_count":19482272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jupyter","point-cloud","python","tutorial"],"created_at":"2024-09-27T20:02:00.517Z","updated_at":"2025-10-27T12:32:07.866Z","avatar_url":"https://github.com/jlgregorio.png","language":"Jupyter Notebook","readme":"# Tutorials for pointcloud processing in Python\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\u003cimg src=\"images/example_pointcloud.png\"\u003e\u003c/p\u003e\n\u003c/div\u003e\n\nThe use of pointclouds tends to increase over the years, as 3D acquisition systems and 3D modeling software become more widely available. Pointclouds are nowadays used in many areas, such as computer-aided design, metrology, extended reality, robotics, and autonomous driving, to name just a few.\n\nThese tutorials are for those wishing to learn a little bit more about the basics of pointcloud processing. Having gone through this stage during my Ph.D., I hope here to share some of what I have learned so far.\n\nThe notebooks are designed to make pointcloud processing algorithms easier to understand, without compromising performance too much and trying to minimize the use of specialized third-party software. They require basic knowledge of Python and its main scientific libraries.\n\n## Content\n\nTutorials are broken down as follows:\n\n0. Basics: structure and attributes.\n1. Spatial transformations: translations, rotations, reflections \u0026 scaling.\n2. Spatial indexing: voxel grids, octrees \u0026 kd-trees.\n3. Registration: corresponding sets \u0026 non-corresponding sets (Iterative Closest Point \u0026 Principal Axis Alignment).\n4. Segmentation: Region Growing, Hough Transform \u0026 RANSAC.\n5. Primitive fitting: plane, sphere, cylinder, cone \u0026 torus.\n6. Normals and descriptors: normals estimation/orientation and other local descriptors.\n\n## Dependencies\n\nThe code is in `python` and relies on `numpy`, `scipy`, `matplotlib`, and `jupyterlab`.\n\nThese dependencies may installed with `pip` with\n\n    pip install numpy scipy matplotlib jupyterlab\n\nor via `conda` with\n\n    conda install numpy scipy matplotlib jupyterlab\n\nJupyterLab may be started using the terminal or Anaconda prompt simply by typing\n\n    jupyter lab\n\n## Going further\n\nThe lists below do not pretend to be not exhaustive but may be a good starting point for those who whish to dive deeper in the topic of pointcloud processing with Python.\n\n### Software\n\nLibraries:\n\n- **CGAL**, an open-source library for efficient and reliable geometric algorithms (in C++, with Python bidings)\n- **CloudComPy**, a Python wrapper for CloudCompare (see below)\n- **Open3D**, an open-source library for 3D data processing (in C++ and Python, with a 3D viewer app)\n- **PCL**, a standalone, large scale, open project for 2D/3D image and pointcloud processing (in C++, with Python bidings)\n- **PDAL**, an open-source library for translating and manipulating pointcloud data (in C++, with Python support)\n- **PyMeshLab**, a Python library that interfaces to MeshLab (see below)\n- **PyVista**, a library providing a pythonic interface to VTK (see below)\n- **VTK**, an open-source software for manipulating and displaying scientific data (in C++, with wrappers in Python, Java and Tcl)\n\nApplications:\n\n- **Blender**, an open-source  3D computer graphics software that may be used to visualize and process pointclouds (with Python scripting capabilities)\n- **CloudCompare**, an open-source 3D pointcloud (and triangular mesh) processing software (with Python scripting capabilities through **CloudComPy**)\n- **MeshLab**, an open-source 3D triangular meshes (and pointclouds) processing and editing software (with Python scripting capabilities through **PyMeshLab**)\n- **ParaView**, an open-source visualization application (with Python scripting capabilities)\n\n### Resources \n\nBooks:\n- Poux, F. (2025). *3D Data Science with Python*. O'Reilly Media.\n- Liu, S., Zhang, M., Kadam, P., \u0026 Kuo, C. C. J. (2021). *3D Point Cloud Analysis: Traditional, Deep Learning, and Explainable Machine Learning Methods*. Springer.\n- Vosselman, G., \u0026 Maas, H. G. (2010). *Airborne and terrestrial laser scanning*. Whittles Publishing.\n- Samet, H. (2006). *Foundations of multidimensional and metric data structures*. Morgan Kaufmann.\n- Schneider, P., \u0026 Eberly, D. H. (2002). *Geometric tools for computer graphics*. Elsevier.\n- Goulette, F. (1999). *Modélisation 3D automatique : outils de géométrie différentielle*. Presses des Mines.\n\nVideos:\n- Florent Poux YouTube channel: www.youtube.com/@FlorentPoux (last accessed in June 2025)\n- CloudCompare playlist on Daniel Girardeau-Montaut YouTube channel www.youtube.com/@danielgirardeau-montaut9044 (last accessed in June 2025)\n\n## Citation\n\nYou are mostly free to share and reuse this work as you wish. Please do not forget to cite it if you do!\n\nAn example using BibTeX:\n\n    @unpublished{gregorio2024tutorials,\n         author={Grégorio, Jean-Loup},\n         title={Tutorials for pointcloud processing in Python},\n         year={2024},\n    }\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlgregorio%2Ftutorials-pointcloud-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjlgregorio%2Ftutorials-pointcloud-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlgregorio%2Ftutorials-pointcloud-python/lists"}