//************************************************************** // ilMatTestFun // performs tests of matrix functions: // ilEuclidDist, ilEuclidNorm, ilMinAtDim //*************************************************************** void ilMatFunTest() { #if 0 //*** testing ilEuclidNorm (comparison with matlab) std::string matfnamein = "C:/temp/matdata3.xml"; std::string matfnameout = "C:/temp/matdata4.xml"; pFileStorage fsr = OpenFileStorage(matfnamein, RWM_Read); pMat mat1 = ReadMatrixFromFile(fsr, "matrix1"); //*** normalize pMat mat2 = CreateMat(mat1->rows, mat1->cols, mat1->type); ilEuclidNorm(mat1, mat2); //*** Save result in xml pFileStorage fsw = OpenFileStorage(matfnameout, RWM_Write); WriteMatrixToFile(fsw, "matrix2", mat2); /* % Matlab test code m1=rand(10,5); xmlsavematrices('C:/temp/matdata3.xml',{m1},{'matrix1'}); %%% run ilMatFunTest(); [matval,matname]=xmlreadmatrices('c:/temp/matdata4.xml'); enorm=euclidnorm(m1); err=mean(abs(enorm(:)-matval{1}(:))) */ #endif #if 0 //*** testing ilEuclidDist (comparison with matlab) std::string matfnamein = "C:/temp/matdata1.xml"; std::string matfnameout = "C:/temp/matdata2.xml"; // we don't own the matrices below -- file storage does pFileStorage fsr = OpenFileStorage(matfnamein, RWM_Read); pMat mat1 = ReadMatrixFromFile(fsr, "matrix1"); pMat mat2 = ReadMatrixFromFile(fsr, "matrix2"); //*** compute Euclidean distance pMat mat3 = CreateMat(mat1->rows, mat2->rows, mat1->type); ilEuclidDist(mat1, mat2, mat3); //*** Save result in xml pFileStorage fsw = OpenFileStorage(matfnameout, RWM_Write); WriteMatrixToFile(fsw, "matrix3", mat3); // cvReleaseMat(&mat1); // TODO do we have to? // cvReleaseMat(&mat2); // TODO do we have to? /* % Matlab test code m1=rand(10,5); m2=rand(20,5); xmlsavematrices('C:/temp/matdata1.xml',{m1,m2},{'matrix1','matrix2'}); %%% run ilMatFunTest(); [matval,matname]=xmlreadmatrices('c:/temp/matdata2.xml'); edist=eucliddist(m1,m2); err=mean(abs(edist(:)-matval{1}(:))) */ #endif }
//------------------------------------------------------------------------------ // main //------------------------------------------------------------------------------ int main (int argc, char * const argv[]) { std::cout.setf(std::ios::right); std::cout << std::setprecision(4) << std::fixed << std::showpoint; std::cout << std::setfill(' '); if (argc == 4 && !strncmp(argv[1], "-c", 2)) { // Compress Matrixf M; ReadMatrixFromFile(M, std::string(argv[2])); Scale(M, 2.0f, M); ZerotreeEncode(std::string(argv[3]), M); } else if (argc == 4 && !strncmp(argv[1], "-d", 2)) { // Decompress Matrixf M; ZerotreeDecode(M, std::string(argv[2])); WriteMatrixToFile(M, std::string(argv[3])); } else { printf("[-c|-d] [input] [output]\n"); } return 0; }