If you have only your mesh data it's not so easy but it can be done.
By rendering:
Render your mesh from bottom to depth buffer, using orthogonal camera. Then run a shader on a resulting depth image and for each pixel compare its depth with depth of neighboring pixels.
If all neighbors are further than you current pixel - it's the local minimum. The precision of this method will depend on your rendering resolution, you may also get some rasterization artifacts, all depends on your mesh.
By mesh analyze: - the better one
You need to compute vertex neighbors, and store them per-vertex maybe like this: (this pseudo-code assumes the mesh is indexed)
for each triangle:
for each vertex:
add two another vertices to this vertex neighbours
Then looking for your minimums is quite simple:
for each vertex:
var z = vertex.z;
for each vertex neighbor:
if neighbor.z < z:
not a local minimum!