Peak and edge thresholds are useful to reduce the number of keypoints produced by the SIFT. Identifying the "right" thresholds for a given task, however, is not trivial.
I have found an alternative approach quite useful. Given the full list of keypoints, I sort it by peak / edge scores and keep only the highest ranked results. Unfortunately, the current vlfeat implementation does not expose such scores to the user. This commit changes that, extending the VlSiftKeypoint struct.
Keep track of peak and edge scores of each SIFT keypoint.
A similar functionality exists in vl_covdet().