# Mesh Simplification¶


This tour explore the simplication of a highly detailed mesh into a coarser one.

In [2]:
addpath('toolbox_signal')


## Random Edge Contraction¶

Simplest way to perform mesh simplification is through edge collapse. Each step replaces two vertex joined by an edge by a single vertex, and removes the edge.

In [3]:
name = 'venus';
options.name = name;
n = size(vertex,2);


Display full quality.

In [4]:
plot_mesh(vertex,faces,options);


Initialize the simplification.

In [5]:
faces1 = faces;
vertex1 = vertex;


Compute the collection of edges.

In [6]:
edges = compute_edges(faces1);
nedges = size(edges,2);


Select an edge. Here selection is done at random.

In [7]:
k = floor(rand*(nedges-1))+1;
e = edges(:,k);


Change the vertex location, and remove one of the two vertices.

In [8]:
vertex1(:,e(1)) = mean( vertex1(:,e),2 );
vertex1(:,e(2)) = Inf;


Change the face indexing.

In [9]:
faces1(faces1==e(2)) = e(1);
a = sum( diff(sort(faces1))==0 );
faces1(:,a>0) = [];


Exercise 1

Perform iterative collapse to reach |p = round(2*n/3)| vertices. isplay

In [10]:
exo1()

In [11]:
%% Insert your code here.


Exercise 2

As a post processing, find a way to remove from |faces1| and |vertex1| the unecessary information (remove vertex and faces that are not used).

In [12]:
exo2()

In [13]:
%% Insert your code here.


## Error Driven Edge Contraction¶

To ameliorate the quality of the output mesh, it is necessary to order to select the edge to collapse according to some quality priority.

Exercise 3

Perform iterative collapse to reach |p = round(2*n/3)| vertices. Use an ordering of the edge by their length. isplay

In [14]:
exo3()