Saliency for 3D Meshes
- Saliency Map: Compute the saliency of every vertex location on the surface.
- Salient Viewpoint Selction: Estimate the most salient viewpoint by rendering the saliency map from multiple angles and choosing the view with most visible pixels.
Lee et al.’s paper uses curvature-based features and Itti et al.’s  center-surround mechanism. Other useful features to experiment with may include silhouettes, albedos, and so on, but not rotation-invariant features such as shading.
In order to apply the filter operation in vertex coordinates, I computed the distance between every point and then then applied the gausian basis function. Accoring to MATLAB’s profiler, this part is the bottle neck, so it should be optimized first if the code is too slow. I simplified the meshes to have somewhere between 4000 and 15,000 faces using QSlim to for all the demos on this page.
D = pdist2(Mesh.v, Mesh.v);
weighted = exp(-0.5.*(D./sigma).^2);
weighted(D >= 2*sigma) = 0;
Salient Viewpoint Selection
The 3D saliency map can be used to automatically select a viewpoint where the object is most salient. The paper uses a randomized method that starts at a random viewpoint then iteratively finds a local maximum. Instead, this implementation renders the saliency map from 60 different points (15 angles around the z axis for each of [2, 13, 26, 40] elevation. Because I used simplified meshes, this didn’t take very long.)
Here are some successful and unsuccessful examples.
automatic viewpoint selection: successful examples
In each pair of figures, the left column is the most salient viewpoint and the right column is the least salient viewpoint, automatically selected. Computing each took around 20 seconds. Many of the 3D models are from 3D Warehouse.