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.