//discard!! void ImageProcessSystem::faceMeansStatistics() { QString filePath=QFileDialog::getExistingDirectory(this,"Open Directory",QDir::currentPath()); QDir dir(filePath); dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); dir.setSorting(QDir::Size | QDir::Reversed); fstream f("D:\\a.txt"); f<<"R"<<'\t'<<"G"<<'\t'<<"B"<<'\t'<<"data1"<<'\t'<<"data4"<<'\t'<<"brightness"<<endl; QFileInfoList list = dir.entryInfoList(); double rMeans=0,gMeans=0,bMeans=0,data1Means=0,data4Means=0,brightnessMeans=0; for(int i=0;i<list.size();++i) { const QFileInfo &fileInfo=list.at(i); QString fileFullPath=fileInfo.absoluteFilePath(); QImage src=QImage(fileFullPath); double R=0,G=0,B=0,data1,data4,brightness; Mat fMat(src.height(),src.width(),CV_8UC1); Mat sMat(src.height(),src.width(),CV_8UC3); BasisOperation::qimage2Mat(src,sMat); memset(fMat.data,NOTFACE_PIXEL_VALUE,src.height()*src.width()*sizeof(uchar)); faceDetector::detectingFace(sMat,fMat,FACE_COLORMODEL|FACE_USINGOPENCV,face); int count=0; for(int j=0;j<src.width();++j) for(int k=0;k<src.height();++k) { if(fMat.at<uchar>(k,j)==FACE_PIXEL_VALUE) { count++; R+=(double)sMat.at<Vec3b>(k,j)[2]; G+=(double)sMat.at<Vec3b>(k,j)[1]; B+=(double)sMat.at<Vec3b>(k,j)[0]; } } R/=count; G/=count; B/=count; data1=R*100/G; data4=G*100/B; brightness=0.3*R+0.59*G+0.11*B; f<<R<<'\t'<<B<<'\t'<<B<<'\t'<<data1<<'\t'<<data4<<'\t'<<brightness<<endl; rMeans+=R; gMeans+=G; bMeans+=B; data1Means+=data1; data4Means+=data4; brightnessMeans+=brightness; } f<<"==================="<<endl; rMeans/=list.size(); gMeans/=list.size(); bMeans/=list.size(); data1Means/=list.size(); data4Means/=list.size(); brightnessMeans/=list.size(); f<<rMeans<<'\t'<<gMeans<<'\t'<<bMeans<<'\t'<<data1Means<<'\t'<<data4Means<<'\t'<<brightnessMeans<<endl; }
void cgComparisonTest(){ CL::TinyCL tiny(CL::DEVICE::GPU); SparseMatrix sMat("../res/bcsstk05.mtx"); std::cout << "Computing CG on matrix of dim: " << sMat.dim << std::endl; std::vector<float> b; for (int i = 0; i < sMat.dim; ++i) b.push_back(i); //Compare my kernel with the book kernel to make sure it's correct std::vector<float> localRes, myRes; //Measure elapsed time for my kernel and book kernel std::cout << "Book CG:\n"; std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now(); localRes = localConjGradSolve(sMat, b, tiny); std::chrono::high_resolution_clock::duration bookTime = std::chrono::high_resolution_clock::now() - start; std::cout << "------\nMy CG:\n"; start = std::chrono::high_resolution_clock::now(); myRes = conjugateGradient(sMat, b, tiny); std::chrono::high_resolution_clock::duration myTime = std::chrono::high_resolution_clock::now() - start; std::cout << "-----\nBook solve time: " << std::chrono::duration_cast<std::chrono::milliseconds>(bookTime).count() << "ms\n" << "My solve time: " << std::chrono::duration_cast<std::chrono::milliseconds>(myTime).count() << "ms\n" << "Time difference, mine - book: " << std::chrono::duration_cast<std::chrono::milliseconds>(myTime - bookTime).count() << "ms" << std::endl; //If the results are differ at a digit higher than the some minimal //error then my implementation is wrong float avgDiff = 0, maxDif = 1e-6; int nDifferent = 0; for (int i = 0; i < localRes.size(); ++i){ float diff = std::abs(localRes.at(i) - myRes.at(i)); if (diff > maxDif){ avgDiff += diff; ++nDifferent; } } if (nDifferent != 0) avgDiff /= nDifferent; std::cout << "# of values differing by more than " << std::scientific << maxDif << " : " << nDifferent << " of " << myRes.size() << "\nAverage difference between values: " << avgDiff << std::endl; }