int main(int argc, char *argv[]) { char **av, fname[STRLEN], *cp ; int ac, nargs ; char *subject, *out_fname, *hemi, *ohemi ; int msec, minutes, seconds ; struct timeb start ; MRI *mri, *mri_features, *mri_ribbon, *mri_aseg, *mri_aparc ; MRI_SURFACE *mris, *mris_contra ; LABEL *cortex ; /* rkt: check for and handle version tag */ nargs = handle_version_option (argc, argv, "$Id: mri_extract_fcd_features.c,v 1.1 2016/06/15 17:51:09 fischl Exp $", "$Name: $"); if (nargs && argc - nargs == 1) exit (0); argc -= nargs; Progname = argv[0] ; ErrorInit(NULL, NULL, NULL) ; DiagInit(NULL, NULL, NULL) ; TimerStart(&start) ; ac = argc ; av = argv ; for ( ; argc > 1 && ISOPTION(*argv[1]) ; argc--, argv++) { nargs = get_option(argc, argv) ; argc -= nargs ; argv += nargs ; } if (argc < 4) usage_exit(1) ; subject = argv[1] ; hemi = argv[2] ; if (strcmp(hemi, "lh") == 0) ohemi = "rh" ; else ohemi = "lh" ; out_fname = argv[3] ; printf("reading data for subject %s and writing output to %s\n", subject, out_fname) ; if (!strlen(sdir)) { cp = getenv("SUBJECTS_DIR") ; if (!cp) ErrorExit(ERROR_BADPARM, "%s: SUBJECTS_DIR not defined in environment.\n", Progname) ; strcpy(sdir, cp) ; } sprintf(fname, "%s/%s/surf/%s.%s", sdir, subject, hemi, white_name) ; printf("reading %s\n", fname) ; mris = MRISread(fname) ; if (mris == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read surface from %s\n", Progname, fname) ; MRISsaveVertexPositions(mris, WHITE_VERTICES) ; sprintf(fname, "%s/%s/surf/%s.%s", sdir, subject, ohemi, white_name) ; printf("reading %s\n", fname) ; mris_contra = MRISread(fname) ; if (mris_contra == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read surface from %s\n", Progname, fname) ; MRISsaveVertexPositions(mris_contra, WHITE_VERTICES) ; sprintf(fname, "%s/%s/mri/%s", sdir, subject, ribbon_name) ; printf("reading %s\n", fname) ; mri_ribbon = MRIread(fname) ; if (mri_ribbon == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read ribbon from %s\n", Progname, fname) ; sprintf(fname, "%s/%s/mri/%s", sdir, subject, aparc_name) ; printf("reading %s\n", fname) ; mri_aparc = MRIread(fname) ; if (mri_aparc == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read ribbon from %s\n", Progname, fname) ; sprintf(fname, "%s/%s/mri/%s", sdir, subject, aseg_name) ; printf("reading %s\n", fname) ; mri_aseg = MRIread(fname) ; if (mri_aseg == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read aseg from %s\n", Progname, fname) ; sprintf(fname, "%s/%s/surf/%s.%s", sdir, subject, hemi, pial_name) ; if (MRISreadPialCoordinates(mris, fname) != NO_ERROR) ErrorExit(ERROR_NOFILE, "%s: could not read pial coordinates from %s\n", Progname, fname) ; sprintf(fname, "%s/%s/surf/%s.%s", sdir, subject, hemi, sphere_name) ; if (MRISreadCanonicalCoordinates(mris, fname) != NO_ERROR) ErrorExit(ERROR_NOFILE, "%s: could not read left/right spherical coordinates from %s\n", Progname, fname) ; sprintf(fname, "%s/%s/surf/%s.%s", sdir, subject, ohemi, pial_name) ; if (MRISreadPialCoordinates(mris_contra, fname) != NO_ERROR) ErrorExit(ERROR_NOFILE, "%s: could not read pial coordinates from %s\n", Progname, fname) ; sprintf(fname, "%s/%s/label/%s.%s", sdir, subject, hemi, cortex_label) ; cortex = LabelRead(NULL, fname) ; if (cortex == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read cortical label from %s\n", Progname, fname) ; LabelRipRestOfSurface(cortex, mris) ; LabelFree(&cortex) ; sprintf(fname, "%s/%s/surf/%s.%s", sdir, subject, ohemi, sphere_name) ; if (MRISreadCanonicalCoordinates(mris_contra, fname) != NO_ERROR) ErrorExit(ERROR_NOFILE, "%s: could not read left/right spherical coordinates from %s\n", Progname, fname) ; sprintf(fname, "%s/%s/mri/%s", sdir, subject, vol_name) ; printf("reading %s\n", fname) ; mri = MRIread(fname) ; if (mri == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read volume from %s\n", Progname, fname) ; if (0) mri_features = MRIcomputeSurfaceDistanceProbabilities(mris, mri_ribbon, mri, mri_aseg) ; else { MRI *mri_ohemi_features, *mri_ohemi_mapped_to_hemi_features ; mri_features = MRIcomputeSurfaceDistanceIntensities(mris, mri_ribbon, mri_aparc, mri, mri_aseg, whalf) ; mri_ohemi_features = MRIcomputeSurfaceDistanceIntensities(mris_contra, mri_ribbon, mri_aparc, mri, mri_aseg, whalf) ; mri_ohemi_mapped_to_hemi_features = MRISmapToSurface(mris_contra, mris, mri_ohemi_features, NULL) ; // map contra feature to this surface // MRIwrite(mri_ohemi_mapped_to_hemi_features, "test.mgz") ; MRIsubtract(mri_features, mri_ohemi_mapped_to_hemi_features, mri_features) ; } if (navgs > 0) { MRI *mri_tmp ; mri_tmp = MRISsmoothMRI(mris, mri_features, navgs, NULL, NULL); MRIfree(&mri_features) ; mri_features = mri_tmp ; } printf("writing output to %s\n", out_fname) ; if (Gdiag_no >= 0) printf("feature(%d) = %f\n", Gdiag_no, MRIgetVoxVal(mri_features, Gdiag_no, 0, 0, 0)) ; MRIwrite(mri_features, out_fname) ; msec = TimerStop(&start) ; seconds = nint((float)msec/1000.0f) ; minutes = seconds / 60 ; seconds = seconds % 60 ; fprintf(stderr, "feature extraction took %d minutes and %d seconds.\n", minutes, seconds) ; exit(0) ; return(0) ; }
int main(int argc, char *argv[]) { int ac, nargs ; char **av, *cp, surf_name[100], *hemi, *subject_name, *label_name, *out_fname ; MRI_SURFACE *mris ; LABEL *label ; /* rkt: check for and handle version tag */ nargs = handle_version_option (argc, argv, "$Id: label2patch.c,v 1.3 2011/03/02 00:04:11 nicks Exp $", "$Name: stable5 $"); if (nargs && argc - nargs == 1) exit (0); argc -= nargs; Progname = argv[0] ; ErrorInit(NULL, NULL, NULL) ; DiagInit(NULL, NULL, NULL) ; /* read in command-line options */ ac = argc ; av = argv ; for ( ; argc > 1 && ISOPTION(*argv[1]) ; argc--, argv++) { nargs = get_option(argc, argv) ; argc -= nargs ; argv += nargs ; } if (argc < 4) print_usage() ; subject_name = argv[1] ; hemi = argv[2] ; label_name = argv[3] ; out_fname = argv[4] ; if (strlen(subjects_dir) == 0) { cp = getenv("SUBJECTS_DIR") ; if (!cp) ErrorExit(ERROR_BADPARM, "no subjects directory in environment.\n") ; strcpy(subjects_dir, cp) ; } sprintf(surf_name,"%s/%s/surf/%s.inflated",subjects_dir,subject_name,hemi); fprintf(stderr, "reading %s...\n", surf_name) ; mris = MRISread(surf_name) ; if (!mris) ErrorExit(ERROR_NOFILE, "%s: could not read surface file %s\n", surf_name) ; MRIScomputeMetricProperties(mris) ; label = LabelRead(subject_name, label_name) ; if (ndilate) LabelDilate(label, mris, ndilate) ; if (nerode) LabelErode(label, mris, nerode) ; if (nclose) { LabelDilate(label, mris, nclose) ; LabelErode(label, mris, nclose) ; } LabelRipRestOfSurface(label, mris) ; MRISripFaces(mris) ; MRISwritePatch(mris, out_fname) ; if (verbose) fprintf(stderr, "done.\n") ; exit(0) ; return(0) ; /* ansi */ }
int main(int argc, char *argv[]) { char **av, *cp, fname[STRLEN], *subject, *out_fname ; int ac, nargs, msec, minutes, n, seconds, nsubjects, i, sno, nfeatures, correct ; struct timeb start ; LABEL *cortex_label, *training_label ; RANDOM_FOREST *rf ; double **training_data ; int *training_classes, ntraining ; /* rkt: check for and handle version tag */ nargs = handle_version_option (argc, argv, "$Id: mris_rf_train.c,v 1.1 2012/06/07 12:09:47 fischl Exp $", "$Name: $"); if (nargs && argc - nargs == 1) exit (0); argc -= nargs; Progname = argv[0] ; ErrorInit(NULL, NULL, NULL) ; setRandomSeed(0L); DiagInit(NULL, NULL, NULL) ; TimerStart(&start) ; ac = argc ; av = argv ; for ( ; argc > 1 && ISOPTION(*argv[1]) ; argc--, argv++) { nargs = get_option(argc, argv) ; argc -= nargs ; argv += nargs ; } if (argc < 3) usage_exit(1) ; if (strlen(sdir) == 0) { cp = getenv("SUBJECTS_DIR") ; if (!cp) ErrorExit(ERROR_BADPARM, "%s: SUBJECTS_DIR not defined in env or cmd line",Progname) ; strcpy(sdir, cp) ; } nsubjects = argc-(ARGC_OFFSET+1) ; printf("training random forest classifier using %d subjects\n", nsubjects) ; for (n = ARGC_OFFSET ; n < argc-1 ; n++) { subject = argv[n] ; sno = n-ARGC_OFFSET ; printf("processing subject %s: %d of %d\n", subject, sno+1, nsubjects) ; sprintf(fname, "%s/%s/label/lh.%s.label", sdir, subject, label_name) ; if (FileExists(fname) == 0) { sprintf(fname, "%s/%s/label/rh.%s.label", sdir, subject, label_name) ; if (FileExists(fname) == 0) ErrorExit(ERROR_NOFILE, "%s: subject %s has no training label for either hemisphere", Progname, subject) ; hemi = "rh" ; } else hemi = "lh" ; training_label = LabelRead(NULL, fname) ; if (training_label == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read training label %s\n", Progname, fname) ; sprintf(fname, "%s/%s/surf/%s.%s", sdir, subject, hemi, surf_name) ; mris[sno] = MRISread(fname) ; if (!mris[sno]) ErrorExit(ERROR_NOFILE, "%s: could not read surface from %s",Progname, fname) ; MRIScomputeMetricProperties(mris[sno]) ; if (nbhd_size > mris[sno]->nsize) MRISsetNeighborhoodSize(mris[sno], nbhd_size) ; sprintf(fname, "%s/%s/label/%s.%s", sdir, subject, hemi, cortex_label_name) ; cortex_label = LabelRead(NULL, fname) ; if (cortex_label == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read cortex label %s\n", Progname, fname) ; LabelRipRestOfSurface(cortex_label, mris[sno]) ; MRISclearMarks(mris[sno]) ; LabelFillUnassignedVertices(mris[sno], training_label, CURRENT_VERTICES); LabelDilate(training_label, mris[sno], ndilates) ; LabelMark(training_label, mris[sno]) ; LabelFree(&training_label) ; for (i = 0 ; i < noverlays ; i++) { sprintf(fname, "%s/%s/surf/%s.%s", sdir, subject, hemi, overlay_names[i]) ; mri_overlays[sno][i] = MRIread(fname) ; if (mri_overlays[sno][i] == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read overlay %s (%d)\n", Progname, fname, i) ; } LabelFree(&cortex_label) ; } nfeatures = noverlays*(nbhd_size+1) ; rf = RFalloc(ntrees, nfeatures, 2, max_depth, class_names, 100) ; rf->feature_names = (char **)calloc(nfeatures, sizeof(char *)) ; for (i = 0 ; i < noverlays ; i++) { rf->feature_names[i] = (char *)calloc(strlen(overlay_names[i])+1, sizeof(char)) ; strcpy(rf->feature_names[i], overlay_names[i]) ; } assemble_training_data_and_free_mris(mris, mri_overlays, nsubjects, noverlays, &training_classes, &training_data, &ntraining) ; RFtrain(rf, 1.0, training_fraction, training_classes, training_data, ntraining); correct = RFcomputeOutOfBagCorrect(rf, training_classes, training_data, ntraining); printf("out of bag accuracy = %2.1f (%d of %d)\n", (float)correct*100.0f/ntraining, correct, ntraining) ; RFevaluateFeatures(rf, stdout) ; out_fname = argv[argc-1] ; printf("writing output to %s\n", out_fname) ; RFwrite(rf, out_fname) ; msec = TimerStop(&start) ; seconds = nint((float)msec/1000.0f) ; minutes = seconds / 60 ; seconds = seconds % 60 ; printf("random forest training took %d minutes and %d seconds.\n", minutes, seconds) ; exit(0) ; return(0) ; }
MRI * MRIflattenOverlay(MRI_SURFACE *mris, MRI *mri_overlay, MRI *mri_flat, double res, LABEL *label_overlay, MRI **pmri_vertices) { double xmin, ymin, xmax, ymax, fdist, lambda[3], xf, yf, val0, val1, val2, val ; int width, height, x, y, fno, ret, z ; MHT *mht ; FACE *face; MRI *mri_vertices ; find_biggest_inscribed_rectangle(mris, &xmin, &ymin, &xmax, &ymax) ; width = (int)ceil((xmax-xmin)/res) ; width = (int)(floor(width/2.0)*2.0+1) ; xmax=xmin+width; height = (int)ceil((ymax-ymin)/res) ;height = (int)(floor(height/2.0)*2.0+1) ; ymax=ymin+height; // 1st frame is correlations and 2nd is vertex # mri_vertices = MRIalloc(width, height, 1, MRI_FLOAT) ; MRIsetValues(mri_vertices, -1) ; mri_flat = MRIalloc(width, height, mri_overlay->nframes, MRI_FLOAT) ; mri_vertices->xstart = mri_flat->xstart = xmin ; mri_vertices->xend = mri_flat->xend = xmax ; mri_vertices->ystart = mri_flat->ystart = ymin ; mri_vertices->yend = mri_flat->yend = ymax ; mri_vertices->zstart = mri_flat->zstart = 0 ; mri_vertices->zend = mri_flat->zend = mri_overlay->nframes-1 ; mri_vertices->c_r = mri_flat->c_r = xmin ; mri_vertices->c_a = mri_flat->c_a = ymin ; mri_vertices->c_s = mri_flat->c_s = 0 ; MRIsetResolution(mri_flat, res, res, 1) ; MRIsetResolution(mri_vertices, res, res, 1) ; if (label_overlay) // constrain processing to only this label LabelRipRestOfSurface(label_overlay, mris) ; mht = MHTfillTableAtResolution(mris, NULL, CURRENT_VERTICES, 1.0) ; for (x = 0 ; x < width; x++) for (y = 0 ; y < height ; y++) { xf = x*res + xmin ; yf = y*res + ymin ; // back to flattened coords MHTfindClosestFaceGeneric(mht, mris, xf, yf, 0.0, 10*res, 2, 1, &face, &fno, &fdist) ; if (fno >= 0) // otherwise this point is not in a face { ret = face_barycentric_coords(mris, fno, CURRENT_VERTICES, xf, yf, 0, &lambda[0], &lambda[1],&lambda[2]); if (ret >= 0) { if (lambda[0] > lambda[1]) { if (lambda[0] > lambda[2]) { if (face->v[0] == Gdiag_no) DiagBreak() ; MRIsetVoxVal(mri_vertices, x, y, 0, 0, face->v[0]) ; } else { if (face->v[2] == Gdiag_no) DiagBreak() ; MRIsetVoxVal(mri_vertices, x, y, 0, 0, face->v[2]) ; } } else { if (lambda[1] > lambda[2]) { if (face->v[1] == Gdiag_no) DiagBreak() ; MRIsetVoxVal(mri_vertices, x, y, 0, 0, face->v[1]) ; } else { if (face->v[2] == Gdiag_no) DiagBreak() ; MRIsetVoxVal(mri_vertices, x, y, 0, 0, face->v[2]) ; } } for (z = 0 ;z < mri_flat->depth ; z++) { val0 = MRIgetVoxVal(mri_overlay, face->v[0], 0, 0, z) ; val1 = MRIgetVoxVal(mri_overlay, face->v[1], 0, 0, z) ; val2 = MRIgetVoxVal(mri_overlay, face->v[2], 0, 0, z) ; val = lambda[0]*val0 + lambda[1]*val1 + lambda[2]*val2 ; MRIsetVoxVal(mri_flat, x, y, z, 0, val) ; } } else if (fabs(xf) < 10 && fabs(yf) < 10) { MHTfindClosestFaceGeneric(mht, mris, xf, yf, 0.0, 1000, -1, 1, &face, &fno, &fdist) ; printf("(%d, %d) --> %f %f unmapped (goes to face %d, v (%d, %d, %d) if projected\n", x, y, xf, yf, fno, face->v[0], face->v[1], face->v[2]) ; DiagBreak() ; } } } if (pmri_vertices) *pmri_vertices = mri_vertices ; MHTfree(&mht) ; return(mri_flat) ; }