回答
[coeff, score] = princomp(X)
是正确的做法,但知道如何使用它有点棘手。
我的理解是,你不喜欢的东西:
sift_image = sift_fun(img)
它给你一个二进制图像:sift_feature? (即使不是二进制,这仍然工作。)
输入,配制X:
要使用princomp
/pca
制订X,使得每个列是numel(sift_image)
×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是正确的,原来的形状
系数_(1,:)是一个矢量(NUM_IMAGES×1)
得分是像素×NUM_IMAGES
(声明:我可以具有的列/行混在一起,但描述是正确的。)
这有帮助吗?
如果您有权访问统计工具箱,则可以使用命令princomp
,或在最近的版本中使用命令pca
。
我知道princomp函数,但问题是我无法得到“n-by-p数据矩阵X”部分。我有一个图像数据集,我用vl_sift函数逐个提取它们的sift描述符。在这种情况下,数据矩阵X会是什么? – oulcan
我不知道 - 这取决于你如何收集筛选描述符以及你打算如何处理它们。通常对于PCA,你有'n'个对象,你已经收集了'p'个变量,并且你将'p'变量减少为'q',其中'q << p'。也许你有'n'图像,每个都有'p' sift描述符测量?或者也许你有一个带有'n'区域的单一图像,每个区域都带有'p'描述符? –
- 1. 合并筛选描述矩阵,numpyarray
- 2. 给定补丁的计算筛选描述符
- 3. 128筛选描述符的值?
- 4. RIA服务筛选描述符
- 5. OpenCV:描述符矩阵的L1归一化
- 6. 查看R中的PCA组件矩阵
- 7. 矩阵计算
- 8. 矩阵计算
- 9. 计算矩阵
- 10. 计算一个大矩阵内出现的矩阵的算法
- 11. Ext2:组描述符
- 12. Magento - 按描述筛选类别
- 13. 筛选功能实体描述
- 14. 转置矩阵与计算逆矩阵的计算强度
- 15. 为什么DLIB计算LBP一致描述符的平方根?
- 16. 符号块的矩阵计算在Maple
- 17. CSS矩阵计算
- 18. 矩阵计算MATLAB
- 19. 计算在矩阵
- 20. 打印关键点描述符矩阵的值opencv
- 21. 描述wsdl文件中的字符串矩阵
- 22. 将opencv的冲浪描述符转换为矩阵
- 23. 矩阵R中计算矩阵
- 24. 如何计算描述性统计
- 25. 计算描述GDI中曲线周围区域的点阵列+
- 26. 生成一个矩阵来描述一个二维特征
- 27. 如何在OpenCV中创建描述符矩阵
- 28. XML值的矩阵计算
- 29. 计算矩阵的质心
- 30. R中的计算矩阵
感谢您提供真正有用的解释,但是我能做些什么来将图片带入公共空间? – oulcan
使它们进入同一个空间的目标是它们具有相同的尺寸(像素/体素尺寸)并对齐(又名注册)。 – Frederick
(...从最后发表的帖子...)根据你的数据,这可能很容易。 MATLAB有一些内置的东西(http://www.mathworks.com/help/images/ref/imregister.html),我在这里看到了堆栈溢出的一些东西。我处理医学图像,并使用专为这些问题设计的工具。 – Frederick