OpenCV 中的PCA演算法(cvCalcPCA)

2021-06-21 09:32:03 字數 1330 閱讀 8594

2012-05-20 15:05:16

|  分類:

opencv 學習

|  標籤:

opencv

pca |舉報

|字型大小訂閱

對於pca,一直都是有個概念,沒有實際使用過,今天終於實際使用了一把,發現pca還是挺神奇的。

在opencv中使用pca非常簡單,只要幾條語句就可以了。

1、初始化資料

//每一行表示乙個樣本

cvmat* pdata = cvcreatemat( 總的樣本數, 每個樣本的維數, cv_32fc1 );

cvmat* pmean = cvcreatemat(1, 樣本的維數, cv_32fc1);

//peigvals中的每個數表示乙個特徵值

cvmat* peigvals = cvcreatemat(1, min(總的樣本數,樣本的維數), cv_32fc1);

//每一行表示乙個特徵向量

cvmat* peigvecs = cvcreatemat( min(總的樣本數,樣本的維數), 樣本的維數, cv_32fc1);

2、pca處理,計算出平均向量pmean,特徵值peigvals和特徵向量peigvecs

cvcalcpca( pdata, pmean, peigvals, peigvecs, cv_pca_data_as_row );

3、選出前p個特徵向量(主成份),然後投影,結果儲存在presult中,presult中包含了p個係數

cvmat* presult = cvcreatemat( 總的樣本數, pca變換後的樣本維數(即主成份的數目), cv_32fc1 );

cvprojectpca( pdata, pmean, peigvecs, presult );

4、 重構,結果儲存在precon中

cvmat* precon = cvcreatemat( 總的樣本數, 每個樣本的維數, cv_32fc1 );

cvbackprojectpca( presult, pmean, peigvecs, precon );

5、重構誤差的計算

計算precon和pdata的"差"就可以了.

使用時如果是想用pca判斷「是非」問題,則可以先用正樣本計算主成分,判斷時,對需要判斷得資料進行投影,然後重構,計算重構出的資料與原資料的差異,如果差異在給定範圍內,可以認為「是」。

如果相用pca進行分類,例如對數字進行分類,則先用所有資料(0-9的所有樣本)計算主成分,然後對每一類資料進行投影,計算投影的係數,可簡單得求平均。即對每一類求出平均係數。分類時,將需要分類得資料進行投影,得到係數,與先前計算出得每一類得平均係數進行比較,可判為最接近得一類。當然這只是最簡單得使用方法。

opencv的cv函式彙總一

cvnamedwindow original image cv window autosize 畫視窗,名字為 original image cvshowimage original image imagegray 顯示影象的視窗,需要顯示的影象 cvsub roimage,imagegray0,s...

在matlab中實現PCA演算法

function v,s,e princa x m,n size x 計算矩陣的行m和列n 第一步 標準化矩陣 mv mean x 計算各變數的均值 st std x 計算各變數的標準差 x x repmat mv,m,1 repmat st,m,1 標準化矩陣x 第二步 計算相關係數矩陣 r1 x...

OpenCV中CV 8UC3等型別含義

define cv usrtype1 void cv usrtype1 support has been dropped in opencv 4.0 define cv cn max 512 define cv cn shift 3 define cv depth max 1 cv cn shift...