コード例 #1
0
ファイル: parameters.cpp プロジェクト: GuoXinxiao/meshlab
double Parameters::pixelDiff(Shot &test, CMeshO &mesh)
{
	double maxdist = 0.0;
	double avedist = 0.0;
	int count = 0;
	CMeshO::VertexIterator vi;
	for(vi = pointSamples->vert.begin(); vi != pointSamples->vert.end(); ++vi ) 
	{
   		vcg::Point3f c;
		c.Import((*vi).P());
		Point2f diff = pixelDiff(test, c);
		double dd = diff.Norm();
		if(dd <= 0) continue; //outside of viewpoint
		if(dd > maxdist) maxdist = dd;
		avedist += dd*dd;
		count++;
    }
	//for(int i = 0; i < nsamples; i++)
	//{
	//	double r = (double)rand() / ((double)(RAND_MAX)+(double)(1));
	//	double g = (double)rand() / ((double)(RAND_MAX)+(double)(1));
	//	r = r*16000*16000+g*16000;
	//	int v = ((int)r)%(mesh.vert.size());
	//	vcg::Point3d c;
	//	c.Import(mesh.vert[v].P());
	//	Point2d diff = pixelDiff(test, c);
	//	double dd = diff.Norm();
	//	if(dd <= 0) continue; //outside of viewpoint
	//	if(dd > maxdist) maxdist = dd;
	//	avedist += dd*dd;
	//	count++;
	//}
	if(max_norm) return maxdist;
	return sqrt(avedist/count);
}
コード例 #2
0
ファイル: parameters.cpp プロジェクト: 34985086/meshlab
double Parameters::pixelDiff(Shot &test, CMeshO &mesh, int nsamples) {
  double maxdist = 0.0;
  double avedist = 0.0;
  int count = 0;
  for(int i = 0; i < nsamples; i++) {
    double r = (double)rand() / ((double)(RAND_MAX)+(double)(1));
    double g = (double)rand() / ((double)(RAND_MAX)+(double)(1));
    r = r*16000*16000+g*16000;
    int v = ((int)r)%(mesh.vert.size());
    vcg::Point3f c;
    c.Import(mesh.vert[v].P());
    Point2f diff = pixelDiff(test, c);
    double dd = diff.Norm();
    if(dd <= 0) continue; //outside of viewpoint
    if(dd > maxdist) maxdist = dd;
    avedist += dd*dd;
    count++;
  }
  if(max_norm) return maxdist;
  return sqrt(avedist/count);
}