回答
[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