cvSVD

cvSVD是opencv中對矩陣進行奇異值分解的函式。

基本介紹

  • 中文名:cvSVD
  • 外文名:cvSVD
  • 特色:矩陣進行奇異值分解的函式
  • 實質:當對矩陣A進行SVD分解後
cvSVD是opencv中對矩陣進行奇異值分解的函式。
我們知道,當對矩陣A進行SVD分解後,A=USV',這裡就不介紹具體SVD分解的數學理論了。下面的程式代碼是通過C++在opencv基礎上編寫的,最後可以把U,S和V求出來。
#include <iostream>
#include <algorithm>
#include <string>
#include <io.h>
#include "highgui.h"
#include "cv.h"
#pragma comment(lib, "cxcore.lib")
using namespace std;
void SVD(double *SA, double *SU, double *SS, double *SV);
int main()
{
double A[16]={1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0}, U[16], S[16], V[16];
SVD(A, U, S, V);
return 0;
}
void SVD(double *SA, double *SU, double *SS, double *SV)
{
CvMat A, U, S, V;
cvInitMatHeader(&A,4,4,CV_64FC1,SA,CV_AUTOSTEP);
cvInitMatHeader(&U,4,4,CV_64FC1,SU,CV_AUTOSTEP);
cvInitMatHeader(&S,4,4,CV_64FC1,SS,CV_AUTOSTEP);
cvInitMatHeader(&V,4,4,CV_64FC1,SV,CV_AUTOSTEP);
cvSVD(&A, &U, &S, &V, CV_SVD_U_T);
}
程式運行完後沒有輸出結果,不過你可以在主函式中添加輸出U、S、V的程式,如
for(i=0;i<16;i++)
{cout<<V[i]<<',';j++;
if(j%4==0) cout<<endl;}
個別小知識介紹:對A進行SVD分解後,矩陣V的最後一列其實是齊次方程Ax=0的一組解

相關詞條

熱門詞條

聯絡我們