3
我正在進行人臉識別項目,我在PCA子空間投影時遇到問題。PCA項目和OpenCV 2.3中的後項目(C++)
當我通過調整大小的圖像將mat矢量傳遞給我的函數時,我將它們投影,然後重構它們以驗證它運行正常,但是我在「凸輪」窗口中的所有圖像都是灰色圖像(全部顏色相同)。
我不知道我在做什麼壞事。
這是函數:
void doPCA (const vector<Mat>& images)
{
int nEigens = images.size()-1;
Mat data (images.size(), images[0].rows*images[0].cols, images[0].type());
for (int i = 0; i < images.size(); i++)
{
Mat aux = data.row(i);
images[i].reshape(1,1).copyTo(aux);
}
PCA pca(data,Mat(),CV_PCA_DATA_AS_ROW,nEigens);
//Project images
Mat dataprojected(data.rows, nEigens, CV_32FC1) ;
for(int i=0; i<images.size(); i++)
{
pca.project(data.row(i), dataprojected.row(i));
}
//Backproject to reconstruct images
Mat datareconstructed (data.rows, data.cols, data.type());
for(int i=0; i<images.size(); i++)
{
pca.backProject (dataprojected.row(i), datareconstructed.row(i));
}
for(int i=0; i<images.size(); i++)
{
imshow ("Cam", datareconstructed.row(i).reshape(1,images[0].rows));
waitKey();
}
}
大家的bytefish.First,謝謝。我試着用「正常化」但它不起作用,所以我重寫我的代碼來使用你的算法(簡單的例子),如果我顯示pca.mean和特徵向量,所有我看到的是一個黑色的圖像。 – user1219145 2012-03-04 17:39:22
如果convertTo解決您的問題,請嘗試(我編輯了我的答案)。順便說一句,我在頁面上提供了一個Eigenfaces和Fisherfaces實現,如果這就是你所追求的。 – bytefish 2012-03-04 18:59:35
感謝您的幫助。最後,我使用您的博客上的代碼「簡單示例」,它運行良好。我會檢查你的博客的其餘部分。再次感謝。 – user1219145 2012-03-17 13:19:09