void ShapeModel::loadFromFile(ModelFile &file) { printf("Loading Shape model from file...\n"); file.readInt(pyramidLevel); file.readInt(nMarkPoints); file.readInt(nTrain); file.readInt(nShapeParams); file.readReal(searchYOffset); file.readReal(searchXOffset); file.readReal(searchWScale); file.readReal(searchHScale); file.readReal(searchStepAreaRatio); file.readReal(searchScaleRatio); file.readReal(searchInitXOffset); file.readReal(searchInitYOffset); // PCA shape model file.readPCA(pcaShape); meanShape.create(nMarkPoints*2, 1); for (int i=0;i<nMarkPoints*2;i++) file.readReal(meanShape(i, 0)); // Info for BTSM file.readReal(sigma2); file.readPCA(pcaFullShape); shapeInfo.readFromFile(file); }
void ASMModel::loadFromFile(ModelFile& file) { ShapeModel::loadFromFile(file); printf("Loading ASM model from file...\n"); //! parameter k for ASM file.readInt(localFeatureRad); file.readInt(ns); int i,j; int rows, cols; file.readInt(rows); file.readInt(cols); iCovarG.resize(pyramidLevel+1); for (i=0;i<=pyramidLevel;i++){ iCovarG[i].resize(nMarkPoints); for (j=0;j<nMarkPoints;j++){ iCovarG[i][j].create(rows, cols); for (int ii=0;ii<rows;ii++) for (int jj=0;jj<cols;jj++) file.readReal(iCovarG[i][j](ii, jj)); } } file.readInt(rows); file.readInt(cols); meanG.resize(pyramidLevel+1); for (i=0;i<=pyramidLevel;i++){ meanG[i].resize(nMarkPoints); for (j=0;j<nMarkPoints;j++){ meanG[i][j].create(rows, cols); for (int ii=0;ii<rows;ii++) for (int jj=0;jj<cols;jj++) file.readReal(meanG[i][j](ii, jj)); } } // Prepare BTSM pyramid double curSigma2 = 0; for (i=0; i<pcaFullShape->eigenvalues.rows; i++){ curSigma2 += pcaFullShape->eigenvalues.at<double>(i, 0); } printf("sssssssssig: %g\n", curSigma2); // Layer 2, 5 parameter for (i=0; i<5 && i<pcaFullShape->eigenvalues.rows; i++){ curSigma2 -= pcaFullShape->eigenvalues.at<double>(i, 0); } sigma2Pyr[2] = curSigma2 / (nMarkPoints*2-4); printf("sssssssssig: %g\n", curSigma2); pcaPyr[2].eigenvalues = pcaFullShape->eigenvalues.rowRange(0, i); pcaPyr[2].eigenvectors = pcaFullShape->eigenvectors.rowRange(0, i); pcaPyr[2].mean = pcaFullShape->mean; // Layer 1, 20 parameter for (; i<20 && i<pcaFullShape->eigenvalues.rows; i++){ curSigma2 -= pcaFullShape->eigenvalues.at<double>(i, 0); } sigma2Pyr[1] = curSigma2 / (nMarkPoints*2-4); pcaPyr[1].eigenvalues = pcaFullShape->eigenvalues.rowRange(0, i); pcaPyr[1].eigenvectors = pcaFullShape->eigenvectors.rowRange(0, i); pcaPyr[1].mean = pcaFullShape->mean; /*sigma2Pyr[2] = sigma2Pyr[1] = */sigma2Pyr[0] = sigma2; /*pcaPyr[2] = pcaPyr[1]= */pcaPyr[0] = *pcaShape; }