문제

I want to compute a general PCA matrix for a dataset, and I will use it to reduce dimensions of sift descriptors. I have already found some algorithms to compute it, but I couldn't find a way to compute it by using MATLAB.

Can someone help me?

도움이 되었습니까?

해결책

[coeff, score] = princomp(X) 

is the right thing to do, but knowing how to use it is a little tricky.


My understanding is that you did something like:

sift_image = sift_fun(img)

which gives you a binary image: sift_feature? (Even if not binary, this still works.)

Inputs, formulating X:

To use princomp/pca formulate X so that each column is a numel(sift_image) x 1 vector
(i.e. sift_image(:))
Do this for all your images and line them up as columns in X.
So X will be numel(sift_image) x num_images.

If your images aren't the same size (e.g. pixel dimensions different, more or less of a scene in the images), then you'll need to bring them into some common space, which is a whole different problem.

Unless your stuff is binary, you'll probably want to de-mean/normalize X, both in the column direction (i.e. normalizing each individual image) and row direction (de-meaning the whole dataset).

Outputs

score is the set of eigen vectors: it will be num_pixels * num_images. To get, say the first eigen vector back into an image shape, do:

first_component = reshape(score(:,1),size(im));

And so on for the rest of the components. There are as many components as input images.

Each row of coeff is the num_images (equal to num_components) set of weights that can be applied to generate each input image. i.e.

input_image_1 = reshape(score * coeff(:,1) , size(original_im));

where input_image_1 is the correct, original shape
coeff(1,:) is a vector (num_images x 1)
score is pixels x num_images
(Disclaimer: I may have the columns/rows mixed up, but the descriptions are correct.)

Does that help?

다른 팁

If you have access to Statistics Toolbox, you can use the command princomp, or in recent versions the command pca.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top