It is easy to run the descriptor code on custom keypoints. See sift_demo6.m and the following explanation.

Let I be an image let us compute the descriptor of the keypoint centered [10 10] of scale 4 and of orientation pi/4.

The first step is to smooth the image I to the appropriate level by issuing

> Is = imsmooth(I,4) ;
The smoothing level 4 simply matches the scale of the keypoint. To be very accurate, it might be appropriate to consider the input image I pre-smoothed at a small nominal value (which D. Lowe's does in his paper). Usually this value is assumed to be 0.5, so an alternative initalization could be
> Is = imsmooth(I,sqrt(4^2 - 0.5^2)) ;

The second step is to initialize the keypoint

> f = [10 10 pi/4]' ;

Normally a keypoint would include the scale as well (as the third component of the f vector), but in this case we omit that element.

The last step is to call siftdescriptor

> d = siftdescriptor(Is, f, 4) ;

Notice that the scale 4, omitted from the vector f, is passed directly to the function.

It is also possible to save time by downsampling the image when the scale is large. For instance

> Is = Is(1:2:end,1:2:end) ;
> frame = [10/2 10/2 pi/4]' ;
> d = siftdescriptor(Is, frame, 4/2) ;

would compute approximatively the same descriptor, but working with one fourth of the data.