Additional material
This page lists pointers to additional material that complements the slides, recommended textbooks, and readings. The goal of this additional material is to help participants
- understand in more details the theory and techniques discussed during the lectures
- get more details about methods and techniques, e.g., implementation and "how to use" tips
- use implementations of methods and techniques discussed in the course
- customize existing technique implementations or build one's own
Important: Scan the entire list of resources below before digging deep into (and starting to use) one specific tool or library! There is overlap between the functionality of different tools. Hence, finding the best depends on checking them all against your specific requirements and constraints.
Datasets
1. Datasets
You receive a single shape dataset with one label (class) per shape. It is interesting to know where the original shapes are coming from. The answer is two well-known 3D shape benchmarks:
Princeton benchmark
This is one of the best-known 3D shape benchmarks used in vision, graphics, shape processing, and and shape retrieval. It contains about 1800 models distributed in 19 classes (finer-grained subclasses are also available). The link also contains sample C code for
- reading, writing and manipulating the shapes
- visualizing the shapes
- evaluating retrieval tasks and plotting retrieval quality metrics
- building a minimalistic shape retrieval application
Labeled PSB Benchmark
This is a benchmark of 380 meshes from 19 shape classes from the Princeton Shape Benchmark. Meshes are segmented, with per-segment annotations. More interestingly, a rich set of features are also provided for these meshes:
- curvature (64 features)
- PCA components (48 features)
- geodesic shape contexts (270 features)
- geodesic distance features (15 features)
- shape diameter (72 features)
- distance from medial surface (24 features)
- spin images (100 features)
The link also contains C++ and Matlab code for manipulating the above data and computing shape features.
Note: it is actually not important to study the original benchmarks in detail. They are provided here for reference and for the ones interested in their additional applications.
Software, demos, and tutorials
1. Data representation and processing
OpenGL crash course
If you're not sure about your OpenGL skills, this mini-tutorial (with source code) should help you creating your first minimal 3D viewer.
Another OpenGL crash course
Here's a second GL crash course. This website is state-of-the-art worldwide for GL resources. Go to the legacy tutorials. The first 5..10 legacy mini-tutorials should be enough to get you going. Don't wander off too far over the rest of the website, there's simply too much material in there to assimilate quickly.
Reading image data in OpenGL
Download this simple OpenGL program that shows how to read the contents of the current window (which renders a 3D shape) into a PGM image file. Useful for the assignment step 3.2 variant B.
3D meshes
Minimal sample code for all mesh types, including reading PLY files. Unstructured meshes are especially interesting to study.
MeshLab tool
The best tool for interactive 3D mesh processing out there! Reads/writes most 3D mesh formats. Implements operations such as mesh refinement, simplification, cleaning, normal computation, smoothing, and computing statistics. Highly recommended to quickly inspect (and possibly fix) your 3D meshes!
PyMeshLab
A Python wrapper allowing you to use the functions of MeshLab (see above) in your program. Highly recommended if you want to batch process many shapes using MeshLab.
GeomView tool
Another tool for interactive 3D mesh processing. Slightly older than MeshLab.
Polygon Mesh Processing (PMP) library
PMP is an excellent, generic, C++ library for 3D mesh processing. It supports mesh importing (various formats), remeshing, cleaning, smoothing, curvature computation, and interactive visualization. A good solution for all your entire infrastructure!
Open3D library for 3D data processing
Open3D can be seen as the bigger brother of PMP. It is a state-of-the-art library for anything related to 3D data processing. It offers the same wide range of 3D mesh processing operations as PMP. It also has bindings for C++ and Python.
OFF mesh tools
Handy collection of command-line tools to process meshes in OFF file format (Java, source code included). Operations supported: mesh refinement, merging close vertices, reducing all faces to triangles).
VEDO
A powerful Python library for processing and visualizing 3D meshes. Also comes with functions for charting and plotting data.
Triangle mesh tools
Another handy collection of command-line tools to process meshes in PLY, OFF, OBJ formats (C++, source code included). Implements mesh viewing, format conversion, alignment, cleaning, and decimation.
Trimesh
A native Python library for 3D mesh processing.
PyMesh
A powerful Python library for 3D mesh processing. Offers more functionality than Trimesh, but is somewhat more complex to set up and learn to use.
Simple mesh decimation and refinement
Bare-bones (C++) code for simple area-based mesh decimation and refinement.
2. Feature extraction
Curvature computation of 3D surfaces
Sample code (C++) for computing and visualizing the curvature tensor for a 3D meshed surface using PCA.
Convex hull
Simple demo (C++) that computes the convex hull of a 3D point cloud. Uses the QHull library.
2D Skeletonization
Probably the easiest-to-use algorithm to compute pixel-exact Euclidean skeletons of 2D binary shapes (C++ source code). This method can process images up to 1000x1000 pixels in roughly a second on a modern CPU.
A GPU implementation of a similar method (requires an NVidia graphics card), which runs about 50 times faster, is available here.
3. Querying
Implementations of the Earth Mover's Distance (EMD) in C and Python:
https://pypi.org/project/pyemd/0.0.10/
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wasserstein_distance.html
https://samvankooten.net/2018/09/25/earth-movers-distance-in-python
https://github.com/garydoranjr/pyemd
Demo: Here is an interactive demo that allows you to sketch two distributions and computes their EMD. Full code (OpenGL/C++), no libraries needed.
4. Scalability
t-SNE toolkit
The original t-SNE implementation (in many programming languages), written and documented by its author.
t-SNE explained
A very readable blog walking you step-by-step through the entire t-SNE theory and how to implement it!
How to use t-SNE effectively
A simple interactive webpage to try out t-SNE with various parameters and understanding its perplexity parameter setting.
Approximate Nearest Neighbors (ANN)
A complete, easy-to-use, C++ library for performing nearest neighbors search in n dimensions.
Autoencoders tutorial
A very readable but comprehensive tutorial on autoencoders, including Python source code.