Surface Correspondence - Documentation

← Benchmark Description

Using Benchmark Binaries

NOTE: parameters in square brakets are optional, you can set them to 'none'.
In the examples below directories are omitted, see directory structure here.

Test Error: ./TestErrorAuto
Description: Calculates per sample geodesic error for inter-surface (or reflective symmetry) map, using the best ground truth. Calls either ./TestAllVerteices, ./TestErrorCoarseSet, or ./TestErrorForSymmetry (if mesh1==mesh2)
Usage: ./TestErrorAuto dataset1 classid1 modelID1 dataset2 classid2 modelid2 inputmap.cor|.map outDir algName
e.g.: ./TestErrorAuto SCAPE 1 0 SCAPE 1 1 ./Data/SampleMaps/scape_myalg1.cor TempDir MyAlg1
Output: ./BenchResult_MyAlg1_mesh000_to_mesh001.txt
Parameters:
  →   dataset1/2 - One of three datasets: [SCAPE, TOSCA, SHREC]
  →   classID1/2 - For each dataset specify a model class: SCAPE (ignored), TOSCA (cat, centaur, david, dog, gorilla, horse, michael, victoria, wolf), SHREC (1..20)
  →   modelID1/2 - For each dataset/model, specify model ID: SCAPE (1..71), TOSCA (1..25 - some IDs do NOT exist), SHREC (1..20)
  →   myalg1.cor/map - if myalg1.cor file is provided a set of coarse correspondences is interpolated by GMDS. If myalg1.map file is provided error is calculated for the dense map, and method checks if myalg1.cor exists to render coarse correspondences (does not affect the errors).
  →   ./outDir/ algName - output directory and algorithm name. Algorithm name is only used for file naming conventions.

Other Scripts

File Formats

Query Files: *.query
Query Files define which pairs of maps should be constructed by an algorithm. The format is pretty simple: each expriment is described by 6 lines, first mesh1 is specified by 3 lines (dataset, classID, model ID), then mesh2 is specified by the same 3 lines.

Surfaces: *.off
Coarse Correspondences: *.cor
Coarse vertex-to-vertex correspondences. Each odd line (lines 1, 3, 5...) has vertex ID on mesh #1, each even line (lines 2, 4, 6...) have vertex IDs on mesh #2, in correspondence to preceeding vertex in mesh #1. For example:
          12
          5
          4
          9
indicates that vertex 12 in mesh #1 is in correspondence with vertex 5 in mesh #2, and vertex 4 in mesh #1 corresponds to vertex 9 in mesh #2.

Dense vertex-to-vertex map: *.map
Each line id corresponds to a vertex in the mesh #1, each line has a single integer - corresponding vertex id in the mesh #2. For example, if *.map contains the following two lines:
          8
          5
It means that vertex 1 in the mesh #1 corresponds to vertex 8 in the mesh #2. And vertex 2 in the mesh #1, corresponds to vertex 5 in the mesh #2.

Camera Parameters: camera.txt
Each line in a camera file corresponds to camera settings: [x y z] position, [tx ty tz] towards direction, [ux uy uz] upward orientation. Note that cameras can be specified per dataset (SCAPE), per class (TOSCA), or per mesh (Watertight'07).

Feature Vertex IDs: 1.pid, 1.vts
Each line starts with a vertex ID, followed by 3 doubles (irrelevant). Note that line ID corresponds to a feature point (labels are described in *.info files). For a same class feature points are in correspondence for all classes (e.g. human classes in all datasets have the same feature points in the same order).

Symmetry Info: 1.sym.info
Symmetry file, specifies correspondences between feature points (above). Each line has feature point IDs that are in correspondence (for bilateral reflective symmetry there are either 2 entries per line (reflections) or 1 entry per line (stationary points).

Results file: BenchResult*.txt
Contains per sample errors for different ground truth.
Stats: below are errors for unique ground truth where symmetric flipping is not allowed.
StatsWithFlip: errors for a ground truth that picks a best solution with either bilateral reflective (intrinsic) flip, or without it.

Each ground truth has the following types of data:
Average - average geodesic error
Folder - subdirectory which has images
PerSampleErrors - per sample geodesic errors (this is the only important field).

Directories

./Data/SCAPE/:
      →   ClassIDs/:1 - single class
      →   Meshes/: *.off, camera.txt (same settings for all meshes)
      →   Corrs/: 1.info (point labels), 1.pid (feature IDs), 1.sym.info (symmetry file) - same for all.

./Data/watertight_shrec07/:
      →   ClassIDs/:1..20. Classes that were not used in the experiment are crossed out (they still have ground truth correspondence files). Classes: 1:Human, 2:Cup, 3:Glasses, 4:Plane, 5:Ant, 6:Chair, 7:Octopus, 8:Table, 9:Teddy, 10:Hand, 11:Plier, 12:Fish, 13:Bird, 14:Spring, 15:Armadillo, 16:Bust 17:Mech, 18:Bearing, 19:Vase, 20:Animals
      →   Meshes/: *.off, camera.txt (each line corresponds to a mesh ID)
      →   Corrs/: c{classID}.info (point labels per class), {meshID}.vts (feature IDs defined for each mesh), {classID}.sym.info (symmetry file, defined per class)

./Data/TOSCA/:
      →   ClassIDs/: cat, centaur, david, dog, gorilla, horse, michael, victoria, wolf
      →   Meshes/: *.off, {classID}.txt (camera settings per class)
      →   Corrs/: {classID}.info (point labels per class), {classID}.pid (feature IDs per class), {classID}.sym.info (symmetry file per class)

./Data/SampleMaps/:
      →   myalg1.cor - example correspondence file
      →   myalg1.map - example dense map file

./Results/*.query:
Specifies which pairs of meshes were used to compare methods.

./Results/Results*/*.txt:
Output files with per sample errors for all methods.