You are confusing the 'scales' here. Each octave has fixed number of scale levels. detectSURFFeatures() does not return that value. This function returns the scale that is dependent on size of the image. You can verify this by resizing the image and then checking the unique scales returned. It would be different from 54.