ShapeCorresponder_x86.exe $obj1$ $obj2$ $EM-algo$ $shortcut-edges$ $grd-available$ $max-level$ $nInitialSamples$

e.g., Y:\PhD\code>ShapeCorresponder_x86.exe "data\ballerina 01.obj" "data\ballerina 02.obj" 0 1 0 6 6
command above computes level0, 1, 2, 3, 4, and 5 correspondences of C2F algo

e.g., Y:\PhD\code>ShapeCorresponder_x86.exe "data\ballerina 01.obj" "data\ballerina 02.obj" 0 1 0 -1 6
computes correspondences at all levels (0 to 11 in this case) in just 103 secs on our 6GB Intel Xeon 2.53GHz x64;
resulting correspondences are given as output\C2F\*.dat along with the corresponding visuals output\C2F\*.png
$nInitialSamples = 8$ suggested as few samples are more prone to symmetric flips

e.g., Y:\PhD\code>ShapeCorresponder_x86.exe "data\ballerina 01.obj" "data\ballerina 02.obj" 1 1 0 -1 -1
command above computes 1-to-1 and many-to-1 correspondences via EM algo


$obj1$: source mesh in obj format (1-based triangles)

$obj2$: target mesh in obj format (1-based triangles)

$EM-algo$: 1 for EM algo, otherwise C2F algo

$shortcut-edges$: 1 to enable shortcut edges for more accurate shortest paths, otherwise disable them (shortcut-edge creation rarely crashes)

$grd-available$: 1 means ground-truth correspondence known as s_i to t_i where i is in [0, numberOfVerticesOnMeshes]

$max-level$: starting from 0, max level before exiting C2F mode (not used for EM algo); use -1 for auto stop (at the finest level)

$nInitialSamples$: -1 not to force one-to-one mapping at the first level, and otherwise initial 1-to-1 map of size nInitialSamples is forced (more accurate) (not used for EM algo)


//for slightly faster output, play w/ Mesh.executionTimeOnly boolean to disable file printing of the computed correspondeces, and do your build for a brand new ShapeCorresponder_x86.exe (copy new ShapeCorresponder_x86.exe from Release\ two parents up, i.e. to ShapeCorresponder_x86.sln's folder)

//for exhaustive printing to see almost every computational step, define DBG_DETAIL in Mesh.h, and do your build for a brand new ShapeCorresponder_x86.exe (copy new ShapeCorresponder_x86.exe from Release\ two parents up, i.e. to ShapeCorresponder_x86.sln's folder)

//for C2F mode, it is enough to store geodesic distances from a sample base vertex b to all other bases within the patch of b, not all V mesh vertices. Although designed this way algorithmically, I implemented geodesic distances array (dSpanning[][]) in counting sort manner, i.e., array allocated for all mesh vertices, to simplify things. Keeping this many entries instead of ~5 per base vertex makes the memory expand quickly, also takes O(V^2 lgV) time instead of the proposed O(VlgV); making this current basic implementation restricted to the inputs of size 30K at most, on a 18GB RAM machine. You can always replace dSpanning[][] with a hash-based structure to welcome the large inputs and reach O(VlgV) efficiency, as this is just an implementation detail.



--ysf
