コード例 #1
0
//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;
}
コード例 #2
0
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;
}