cvCalcEigenDecomposite——opencv內置PCA算法的第二個函數小記。


 

PCA(Eigenface)方法是人臉識別的主流方法之一。cvEigenDecomposite()函數作用是將人臉圖像通過Eigenface變換矩陣,投射到子空間中。子空間中的人臉向量,是一個1×nEigens(nEigens由自己取得)的行向量,極大地降低了數據維度,便於下一步的聚類、識別。結合具體例子,盡量清楚地跟大家討論這個函數的用途。

 

 

函數說明如下:

EigenDecomposite

Calculates all decomposition coefficients for input object

計算輸入目標的所有的分解系數

void cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput,
                         int ioFlags, void* userData, IplImage* avg, float* coeffs );

 

obj
Input object.
輸入目標
nEigObjs
Number of eigen objects.
自選eigen數量
eigInput
Pointer either to the array of IplImage input objects or to the read callback function according to the value of the parameter ioFlags.
eigenface向量組成的變換矩陣,數據結構屬於IplImage隊列,或者根據ioFlag參數值變化的回調函數。
ioFlags
Input/output flags.
userData
Pointer to the structure that contains all necessary data for the callback functions.
avg
Averaged object.
coeffs
Calculated coefficients; an output parameter.
這是唯一一個輸出,即人臉在子空間的投影,,,(decomposition coefficients... 數學不太好- -)

The function cvEigenDecomposite calculates all decomposition coefficients for the input object using the previously calculated eigen objects basis and the averaged object. Depending on ioFlags parameter it may be used either in direct access or callback mode.

 

在程序中,cvCalcEigenObject()只需要在訓練時使用,依據訓練樣本,計算Eigenface的變換矩陣。如本頁的裝飾圖片所示。

而cvEigenDecomposite(),既需要產生訓練樣本的投影,又需要產生測試臉的投影。

  cvEigenDecomposite(
   faceImgArr[i],
   nEigens,
   eigenVectArr,
   0, 0,
   pAvgTrainImg,
   projectedTestFace);

這里是對於每張測試臉faceImgArr[i],產生投影。訓練時得到訓練樣本投影臉的函數調用方法如下:

 for(i=0; i<nTrainFaces; i++)
 {
  //int offset = i * nEigens;
  cvEigenDecomposite(
   faceImgArr[i],
   nEigens,
   eigenVectArr,
   0, 0,
   pAvgTrainImg,
   projectedTrainFaceMat->data.fl + i*offset);
 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM