it returns the same number of keypoints for every frame during an execution
This is normal with dense SIFT implementation since the number of extracted keypoints only depends on input geometrical parameters[1], i.e. step and image size.
See the documentation:
The feature frames (keypoints) are indirectly specified by the sampling steps (
vl_dsift_set_steps
) and the sampling bounds (vl_dsift_set_bounds
).
[1]: vl_dsift_get_keypoint_num
returns self->numFrames
that is only updated by _vl_dsift_update_buffers
which uses geometrical information only (bounds, steps and bin sizes).