opencv求特徵值和特徵向量

來源:互聯網
上載者:User
  IplImage:表示圖片。 
 cvTermCriteria:用來決定學習演算法何時結束。 
 cvSize:用來表示圖片大小。 
 cvCvtColor:用來轉換圖片的色彩空間。 

 cvLoadImage:載入一張圖片。 
 cvCreateImage:依照IplImage結構配置記憶體。 
 cvCalcEigenObjects:計算傳入影響陣列的eigen vector(特徵向量)、  eigen value(特徵根)、image average(影像平均值) 
 cvEigenDecomposite:透過eigen vector和原始影像集來解析每張圖  片降維後對應的係數coefficients。 
 cvEigenProjection:投影圖片在特徵空間。 
 cvSaveImage:儲存圖片。 
 cvReleaseImage:釋放記憶體 宣告eigenObjects 用來儲存載入的圖片。 IplImage **objects = new IplImage*[nEigens]; 將檔案夾中的圖片讀入objects(灰階的) IplImage* tmpImg; 
 for(int i=0;i<this->FileListBox1->Count;i++) 
 { 
  tmpImg = cvLoadImage(this->FileListBox1-        >FileName.c_str(),CV_LOAD_IMAGE_COLOR); 
  objects[i]=cvCreateImage( cvSize(tmpImg-        >width,tmpImg->height),IPL_DEPTH_8U,1); 
  cvCvtColor(tmpImg,objects[i],CV_BGR2GRAY); 
  this->FileListBox1->ItemIndex++; 
 }

 接下來,在計算eigenvector之前,我們要先配置一些記憶體空間給變數  eigenObjects,讓計算出來的eigenvector可以存放在變數  eigenObjects中。 
CvSize size = cvSize(objects[0]->width,objects[0]->height);   
for(int k = 0; k < nEigens; k++) 
  eigenObjects[k]= 
  cvCreateImage=(size,IPL_DEPTH_32F,1);

配置記憶體空間,用來存放訓練樣本圖片的平均值。 
avg = cvCreateImage(size, IPL_DEPTH_32F, 1);指定PCA要訓練到何時才能結束,CV_TERMCRIT_EPS表示精確度到0.05就可以結束,CV_TERMCRIT_ITER表示迭代nEigens次就可以結束。(nEigens=nTrainFaces-1,nTrainFaces表示xunl)CvTermCriteria cri=cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, nEigens, 0.05);接下來我們就可以用cvCalcEigenObjects計算eigenface//Calculate EigenFaces, and put in eigenObjects 
cvCalcEigenObjects( 
nTrainFaces-1 ,objects,eigenObjects, 0,0,0, &cri, avg, eigVals);

在上面方法中,我們必須傳入-1的個數值(nTrainFaces-1),objects訓練樣本,cri訓練終止條件,avg用來儲存圖片集平均值的變數,eigVals用來儲存計算出來的eigenvalue。接下來,因為要對圖片集objects裡面的每張圖片分別處理。所以有一個for迴圈。我們先用cvEigenDecomposite求出cofficients

再用求出的係數當做input傳給cvEigenProjection方法,計算投影圖片。因此最後得到人臉投影在特徵空間(eigenspace)上的結果,存在out變數中,這就是我們要找的eigenface 
(我們可以用cvSaveImage方法將eigenface存成圖片)

for(int k = 0; k < nTrainFaces; k++) 

    float  *coeffs = new float[kValueUses]; 
    IplImage *out = cvCreateImage 
              (size,IPL_DEPTH_8U, 1); 
    //compute coefficients 
    cvEigenDecomposite(objects[k], 
    kValueUses ,eigenObjects, 0,0, avg, coeffs); 
    //image reconstruction 
    cvEigenProjection( eigenObjects, 
    kValueUses, 0, 0, coeffs, avg, out); 
    cvSaveImage(filename, out); 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.