//============================================================================ void AAM_TDM::Write(std::ofstream& os) { int _npixels = nPixels(); int _nModes = nModes(); os.write((char*)&_npixels, sizeof(int)); os.write((char*)&_nModes, sizeof(int)); WriteCvMat(os, __MeanTexture); WriteCvMat(os, __TextureEigenValues); WriteCvMat(os, __TextureEigenVectors); }
//============================================================================ void AAM_CAM::Clamp(CvMat* c, double s_d /* = 3.0 */) { double* fastc = c->data.db; double* fastv = __AppearanceEigenValues->data.db; int nmodes = nModes(); double limit; for(int i = 0; i < nmodes; i++) { limit = s_d*sqrt(fastv[i]); if(fastc[i] > limit) fastc[i] = limit; else if(fastc[i] < -limit) fastc[i] = -limit; } }
//============================================================================ void AAM_TDM::Clamp(CvMat* lamda, double s_d /* = 3.0 */) { double* fastp = lamda->data.db; double* fastv = __TextureEigenValues->data.db; int nmodes = nModes(); double limit; for(int i = 0; i < nmodes; i++) { limit = s_d*sqrt(fastv[i]); if(fastp[i] > limit) fastp[i] = limit; else if(fastp[i] < -limit) fastp[i] = -limit; } }
//============================================================================ void AAM_TDM::SaveSeriesTemplate(const CvMat* AllTextures, const AAM_PAW& m_warp) { LOGD("Saving the face template image...\n"); AAM_Common::MkDir("registration"); AAM_Common::MkDir("Modes"); AAM_Common::MkDir("Tri"); char filename[100]; int i; for(i = 0; i < AllTextures->rows; i++) { CvMat oneTexture; cvGetRow(AllTextures, &oneTexture, i); sprintf(filename, "registration/%d.jpg", i); m_warp.SaveWarpTextureToImage(filename, &oneTexture); } for(int nmodes = 0; nmodes < nModes(); nmodes++) { CvMat oneVar; cvGetRow(__TextureEigenVectors, &oneVar, nmodes); sprintf(filename, "Modes/A%03d.jpg", nmodes+1); m_warp.SaveWarpTextureToImage(filename, &oneVar); } IplImage* templateimg = cvCreateImage (cvSize(m_warp.Width(), m_warp.Height()), IPL_DEPTH_8U, 3); IplImage* convexImage = cvCreateImage (cvSize(m_warp.Width(), m_warp.Height()), IPL_DEPTH_8U, 3); IplImage* TriImage = cvCreateImage (cvSize(m_warp.Width(), m_warp.Height()), IPL_DEPTH_8U, 3); m_warp.SaveWarpTextureToImage("Modes/Template.jpg", __MeanTexture); m_warp.TextureToImage(templateimg, __MeanTexture); cvSetZero(convexImage); for(i = 0; i < m_warp.nTri(); i++) { CvPoint p, q; int ind1, ind2; cvCopy(templateimg, TriImage); ind1 = m_warp.Tri(i, 0); ind2 = m_warp.Tri(i, 1); p = cvPointFrom32f(m_warp.Vertex(ind1)); q = cvPointFrom32f(m_warp.Vertex(ind2)); cvLine(TriImage, p, q, CV_RGB(255, 255, 255)); cvLine(convexImage, p, q, CV_RGB(255, 255, 255)); ind1 = m_warp.Tri(i, 1); ind2 = m_warp.Tri(i, 2); p = cvPointFrom32f(m_warp.Vertex(ind1)); q = cvPointFrom32f(m_warp.Vertex(ind2)); cvLine(TriImage, p, q, CV_RGB(255, 255, 255)); cvLine(convexImage, p, q, CV_RGB(255, 255, 255)); ind1 = m_warp.Tri(i, 2); ind2 = m_warp.Tri(i, 0); p = cvPointFrom32f(m_warp.Vertex(ind1)); q = cvPointFrom32f(m_warp.Vertex(ind2)); cvLine(TriImage, p, q, CV_RGB(255, 255, 255)); cvLine(convexImage, p, q, CV_RGB(255, 255, 255)); sprintf(filename, "Tri/%03i.jpg", i+1); cvSaveImage(filename, TriImage); } cvSaveImage("Tri/convex.jpg", convexImage); cvReleaseImage(&templateimg); cvReleaseImage(&convexImage); cvReleaseImage(&TriImage); }