计算一组筛选描述符的PCA矩阵

时间:2013-08-06 13:09:04

标签: matlab sift pca

我想为数据集计算一般PCA矩阵,我将使用它来减少筛选描述符的维度。我已经找到了一些算法来计算它,但我找不到使用MATLAB计算它的方法。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

如果您可以访问Statistics Toolbox,则可以使用命令princomp,或者在最新版本中使用命令pca

答案 1 :(得分:1)

[coeff, score] = princomp(X) 

是正确的做法,但知道如何使用它有点棘手。


我的理解是你做了类似的事情:

sift_image = sift_fun(img)

它给你一个二进制图像:sift_feature? (即使不是二进制,这仍然有效。)

输入,制定X:

使用princomp / pca制定X,以便每列都是numel(sift_image) x 1向量
(即sift_image(:)
对所有图像执行此操作,并将其排列为X中的列。
因此X将为numel(sift_image) x num_images。

如果您的图像尺寸不同(例如像素尺寸不同,图像中的场景或多或少),那么您需要将它们带入一些公共空间,这是一个完全不同的问题。

除非你的东西是二进制的,否则你可能想要在列方向(即规范化每个单独的图像)和行方向(取决于整个数据集)中对X进行去均值/归一化。

输出

score是一组特征向量:它将是num_pixels * num_images。 为了得到第一个特征向量回到图像形状,请执行:

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

等等其他组件。输入图像的组件数量与之相同。

coeff的每一行是num_images(等于num_components)权重集,可用于生成每个输入图像。即

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

其中input_image_1是正确的原始形状
coeff(1,:)是一个向量(num_images x 1)
得分是像素x num_images
(免责声明:我可能会将列/行混合在一起,但描述是正确的。)

这有帮助吗?