0
votes

I have a problem in Matrix type conversion.

So, I want to extract the SIFT features from an image by using VLFEAT function " vl_covdet"

Here is the detail:

 Input images = <141x142x3 uint8>

And because vl_covdet only can read 1 channel and an image with type of single , I give R channel of my input image to vl_covdet:

 R_input_Images = Input images(:,:,1) <141x142 uint8>
 R_Single_Images= im2single(R_input_Images);


[frames, descrs,info] = vl_covdet(R_Single_Images,'Method','multiscalehessian','EstimateAffineShape', false,'EstimateOrientation', true, 'DoubleImage', false, 'Verbose');

And now, I got features

  descrs = <128x240 single> which values are ranging from 0 - 0.368

But to compute BoW, I have to use K-Means clustering from VLFEAT ("vl_hikmeans") which require uint8 input type.

  descrs must be of class UINT8.

So then I tried to convert it again into uint8

   descrs=uint8(descrs);

Now

   descrs = <128x240 uint8> **AND ALL THE VALUES BECOME 0**.

What I have to do now??

1

1 Answers

0
votes

values are ranging from 0 - 0.368

Well, if you round those to integer, it's no surprise they become zeros.

Since an image in floating-point format has range 0-1, and in uint8 format has range 0-255, try

descrs = uint8(descrs * 255);