void CShapeModel::GenerateShape(CVisDVector& param, CShape& desshape, EDataAnalysisMethod eMethod /*=ePCA*/) { desshape.Resize(m_AvgShape.PointNum()); if ( ePCA == eMethod ) { assert(m_PCA2Model.IsReady()); //m_Model.Reconstruct(eigenparam, desshape.Points()); m_PCA2Model.Generate(desshape.Points(), param); } else if ( eNMF == eMethod ) { assert(m_NMFModel.IsReady()); m_NMFModel.Reconstruct(param, desshape.Points()); } }
void CShapeModel::GetShapeParam(CVisDVector& param, const CShape& srcshape, EDataAnalysisMethod eMethod /*=ePCA*/) { if ( ePCA == eMethod ) { assert(m_PCA2Model.IsReady()); m_PCA2Model.GetEigenParam(srcshape.Points(), param); //m_Model.GetParam(srcshape.Points(), eigenparam); } else if ( eNMF == eMethod ) { assert(m_NMFModel.IsReady()); m_NMFModel.Encode(srcshape.Points(), param); /* // debug, begin SaveToFile("raw_shape.pts", srcshape); CShape newshape = srcshape; m_NMFModel.Regularize(srcshape.Points(), newshape.Points()); SaveToFile("reg_shape.pts", newshape); printf("point_dist: %lf", srcshape.Distance(newshape)); // debug, end */ } }