Example #1
0
int
MRISareaErrors(MRI_SURFACE *mris) {
  int      fno, max_f = -1 ;
  FACE     *face ;
  float    ferror, max_ferror, total_error, total_sq_error,
  error, mean_error, std_error, pct_error, n ;

  MRISupdateEllipsoidSurface(mris) ;
  total_error = total_sq_error = max_ferror = 0.0f ;
  for (fno = 0 ; fno < mris->nfaces ; fno++) {
    face = &mris->faces[fno] ;
    ferror = 0.0f ;
    error = face->area - face->orig_area ;
    pct_error = error / face->orig_area * 100.0f ;
    printf("%d %2.3f %2.3f %2.3f %2.1f\n", fno, face->orig_area,
           face->area, error, pct_error) ;
    total_sq_error += (error * error) ;
    ferror += fabs(error) ;
    total_error += error ;
    if (ferror >= max_ferror) {
      max_ferror = ferror ;
      max_f = fno ;
    }
  }

  n = (float)(2*mris->nfaces) ;
  mean_error = total_error / n ;
  std_error = sqrt(total_sq_error / (float)n - mean_error*mean_error) ;
  fprintf(stderr, "max error occurs at %d, error = %2.3f\n",max_f, max_ferror);
  fprintf(stderr, "mean error = %2.3f, std = %2.3f\n", mean_error, std_error);
  return(NO_ERROR) ;
}
Example #2
0
int
MRISangleErrors(MRI_SURFACE *mris) {
  int      fno, max_f = -1, ano ;
  FACE     *face ;
  FILE     *fp ;
  float    ferror, max_ferror, total_error, total_sq_error,
  error, mean_error, std_error, pct_error, n ;

  fp = fopen("angle.err", "w") ;
  MRISupdateEllipsoidSurface(mris) ;
  total_error = total_sq_error = max_ferror = 0.0f ;
  for (fno = 0 ; fno < mris->nfaces ; fno++) {
    face = &mris->faces[fno] ;
    ferror = 0.0f ;
    for (ano = 0 ; ano < ANGLES_PER_TRIANGLE ; ano++) {
      error = deltaAngle(face->angle[ano], face->orig_angle[ano]);
      pct_error = error / face->orig_angle[ano] * 100.0f ;
      fprintf(fp, "%d %2.3f %2.3f %2.3f %2.1f\n", fno,
              (float)DEGREES(face->orig_angle[ano]),
              (float)DEGREES(face->angle[ano]),
              (float)DEGREES(error), (float)pct_error) ;
      total_sq_error += (error * error) ;
      ferror += fabs(error) ;
      total_error += error ;
    }
    if (ferror >= max_ferror) {
      max_ferror = ferror ;
      max_f = fno ;
    }
  }

  n = (float)(2*mris->nfaces) ;
  mean_error = total_error / n ;
  std_error = sqrt(total_sq_error / (float)n - mean_error*mean_error) ;
  fprintf(stderr, "max angle error occurs at %d, error = %2.3f\n",
          max_f, (float)DEGREES(max_ferror));
  fprintf(stderr, "mean angle error = %2.3f, std = %2.3f\n",
          (float)DEGREES(mean_error), (float)DEGREES(std_error));
  fclose(fp) ;
  return(NO_ERROR) ;
}
MRI_SURFACE  *
MRISprojectOntoTranslatedSphere(MRI_SURFACE *mris_src, MRI_SURFACE *mris_dst, double r,
                                double x0, double y0, double z0) {
  VERTEX  *v;
  int     vno ;
  double  x, y, z, d, dx, dy, dz, dist, total_dist, x2, y2, z2 ;


  if (FZERO(r))
    r = DEFAULT_RADIUS ;

  if (!mris_dst)
    mris_dst = MRISclone(mris_src) ;

  if ((mris_dst->status != MRIS_SPHERE) &&
      (mris_dst->status != MRIS_PARAMETERIZED_SPHERE))
    MRIScenter(mris_dst, mris_dst) ;

  mris_dst->radius = r ;

  for (total_dist = vno = 0 ; vno < mris_dst->nvertices ; vno++) {
    v = &mris_dst->vertices[vno];
    if (v->ripflag)  /* shouldn't happen */
      continue ;
    if (vno == 118009) {
      DiagBreak() ;
    }
    x = ((double)v->x);
    y = ((double)v->y);
    z = ((double)v->z);

    x2 = x*x ;
    y2 = y*y ;
    z2 = z*z ;
    dist = sqrt(x2+y2+z2) ;
    if (FZERO(dist))
      d = 0 ;
    else
      d = 1 - r / dist ;
    dx = d*x ;
    dy = d*y;
    dz = d*z;
    v->x = x-dx ;
    v->y = y-dy;
    v->z = z-dz;

    if (!finite(v->x) || !finite(v->y) || !finite(v->z))
      DiagBreak() ;

    /*    if ((Gdiag & DIAG_SHOW) && DIAG_VERBOSE_ON)*/
    {
      dist = sqrt((double)(dx*dx+dy*dy+dz*dz));
      total_dist += dist;
    }
#if 1
    x = (double)v->x;
    y = (double)v->y;
    z = (double)v->z;
    x2 = x*x ;
    y2 = y*y ;
    z2 = z*z ;
    dist = sqrt(x2+y2+z2) ;
#endif

  }
  for (total_dist = vno = 0 ; vno < mris_dst->nvertices ; vno++) {
    v = &mris_dst->vertices[vno];
    if (v->ripflag)  /* shouldn't happen */
      continue ;
    v->x += x0 ;
    v->y += y0 ;
    v->z += z0 ;
  }
  if ((Gdiag & DIAG_SHOW) && DIAG_VERBOSE_ON)
    fprintf(stdout,  "sphere_project: total dist = %f\n",total_dist);
  MRISupdateEllipsoidSurface(mris_dst) ;
  mris_dst->status = mris_src->status == MRIS_PARAMETERIZED_SPHERE ?
                     MRIS_PARAMETERIZED_SPHERE : MRIS_SPHERE ;
  return(mris_dst) ;
}