matlab中高維數組怎麼做PCA?

PCA需要先求數據的散布矩陣x*x",再求其特徵向量,那麼隨便一個400*450的圖像,就是180000維,矩陣就是180000*180000,matlab無法容納,那麼通常的PCA對圖像的降維,比如求eigenface是怎麼實現的?難道都是很小的圖像?


其實有個很簡單也很常用的方法,把圖片拆成小的patch。

比如你的圖片是450*450的,那麼拆成5*5的小patch,一共90*90個,每個是dim=25,這樣數據matrix是25*8100,XX"是25*25,再做svd就簡單了


推薦Deng Cai的代碼:http://www.cad.zju.edu.cn/home/dengcai/Data/DimensionReduction.html

其中有PCA的代碼和示例,效果很好。

另外,其個人主頁上有大量維數約簡,流行學習,矩陣分解等代碼,可以參考學習使用。


蔡登的代碼應該是可以work的(我沒看哦);

可以參考PRML-12.1.4 專門討論了這個問題 在計算過程中加入了一些技巧


如果你看了eigenface for recognition。你就不會有這個疑問了。懶得打字,傳張圖吧

你會發現AAt的特徵向量其實就是AtA的特徵向量乘以A,這樣就實現了減小計算特徵向量的維度,具體你可以去看一下這篇論文


Suppose you store the images as column vectors of length NxN (the

number of pixels in each image) and that you have M images, you"ll end

up with a matrix G (N^2 x M) :

1

CovMat = -------- G G^T

M - 1

this is what you are trying to find the eigenvalues/eigenvectors for,

right?

There is a trick widely used when doing PCA on sets of images, it is

based on the fact that the (M x M) matrix:

1

lmCovMat = -------- G^T G

M - 1

has the same non-zero eigenvalues of CovMat. So what you do is to

compute the eigenvalues and eigenvectors of this low memory covariance

matrix and then, for the eigenvectors, compute:

E = G lmE

where E is a matrix containing the wanted eigenvectors and lmE is the

matrix of the eigenvectors compouted from the lmCovMat.

This is implemented already in the OpenCV libraries.

Hope it helps.


看你有多少樣本,樣本少就反過來乘


推薦閱讀:

新手想學習人臉識別及跟蹤技術該學習哪些東西?
隨著人臉生成技術的發展,基於人臉識別的身份驗證安全手段會越來越不安全嗎?
映客直播中 人臉特效是基於人臉識別還是AR?有什麼可以使用的SDK么?
開源人臉識別軟體有哪些?
鎚子新機堅果 pro2 的人臉識別跟 iPhone X 的有什麼區別?

TAG:圖像處理 | 人臉識別 | MATLAB | 模式識別 |