double MeshDenoisingViaL0Minimization::getAverageDihedralAngle(TriMesh &mesh)
{
    mesh.request_face_normals();
    mesh.update_face_normals();

    double mean_dihedral_angle = 0.0;
    double num = 0.0;
    for(TriMesh::EdgeIter e_it = mesh.edges_begin(); e_it != mesh.edges_end(); e_it++)
    {
        if(!mesh.is_boundary(*e_it))
            mean_dihedral_angle += mesh.calc_dihedral_angle(*e_it);
        num++;
    }

    return mean_dihedral_angle / num;
}