void get_volume_XYZV_indices(VIO_Volume data, int xyzv[]){ int axis, i, vol_dims; char **data_dim_names; vol_dims = get_volume_n_dimensions(data); data_dim_names = get_volume_dimension_names(data); for(i=0; i<VIO_N_DIMENSIONS+1; i++) xyzv[i] = -1; for(i=0; i<vol_dims; i++) { if (convert_dim_name_to_spatial_axis(data_dim_names[i], &axis )) { xyzv[axis] = i; } else { /* not a spatial axis */ xyzv[VIO_Z+1] = i; } } delete_dimension_names(data, data_dim_names); }
VIOAPI VIO_Status start_volume_input( VIO_STR filename, int n_dimensions, VIO_STR dim_names[], nc_type volume_nc_data_type, VIO_BOOL volume_signed_flag, VIO_Real volume_voxel_min, VIO_Real volume_voxel_max, VIO_BOOL create_volume_flag, VIO_Volume *volume, minc_input_options *options, volume_input_struct *input_info ) { VIO_Status status; int d; VIO_STR expanded_filename; minc_input_options default_options; status = VIO_OK; if( options == (minc_input_options *) NULL ) { set_default_minc_input_options( &default_options ); options = &default_options; } if( create_volume_flag || *volume == (VIO_Volume) NULL ) { if( n_dimensions < 1 || n_dimensions > VIO_MAX_DIMENSIONS ) { n_dimensions = VIO_MAX_DIMENSIONS; } if( dim_names == (VIO_STR *) NULL ) dim_names = get_default_dim_names( n_dimensions ); *volume = create_volume( n_dimensions, dim_names, volume_nc_data_type, volume_signed_flag, volume_voxel_min, volume_voxel_max ); } else if( n_dimensions != get_volume_n_dimensions( *volume ) && volume_is_alloced( *volume ) ) { free_volume_data( *volume ); } expanded_filename = expand_filename( filename ); if (filename_extension_matches( expanded_filename, FREE_ENDING ) ) { input_info->file_format = FREE_FORMAT; } #ifdef LIBMINC_NIFTI_SUPPORT else if (filename_extension_matches( expanded_filename, "mgh" ) || filename_extension_matches( expanded_filename, "mgz" ) ) { input_info->file_format = MGH_FORMAT; /* FreeSurfer */ } else if (filename_extension_matches( expanded_filename, "nii" ) || filename_extension_matches( expanded_filename, "hdr" )) { input_info->file_format = NII_FORMAT; /* NIfTI-1 */ } else if (filename_extension_matches( expanded_filename, "nhdr" ) || filename_extension_matches( expanded_filename, "nrrd" )) { input_info->file_format = NRRD_FORMAT; /* NRRD */ } #endif /*LIBMINC_NIFTI_SUPPORT*/ else { #if defined(HAVE_MINC1) && defined(HAVE_MINC2) if(options->prefer_minc2_api) { #endif #if defined(HAVE_MINC2) input_info->file_format = MNC2_FORMAT; #endif #if defined(HAVE_MINC1) && defined(HAVE_MINC2) } else { #endif #ifdef HAVE_MINC1 input_info->file_format = MNC_FORMAT; #endif #if defined(HAVE_MINC1) && defined(HAVE_MINC2) } #endif } switch( input_info->file_format ) { #ifdef HAVE_MINC1 case MNC_FORMAT: if( !file_exists( expanded_filename ) ) { file_exists_as_compressed( expanded_filename, &expanded_filename ); } input_info->minc_file = initialize_minc_input( expanded_filename, *volume, options ); if( input_info->minc_file == (Minc_file) NULL ) status = VIO_ERROR; else { for_less( d, 0, VIO_MAX_DIMENSIONS ) input_info->axis_index_from_file[d] = d; } break; #endif /*HAVE_MINC1*/ #ifdef HAVE_MINC2 case MNC2_FORMAT: input_info->minc_file = initialize_minc2_input( expanded_filename, *volume, options ); if( input_info->minc_file == (Minc_file) NULL ) status = VIO_ERROR; else { for_less( d, 0, VIO_MAX_DIMENSIONS ) input_info->axis_index_from_file[d] = d; } break; #endif /*HAVE_MINC2*/ case FREE_FORMAT: status = initialize_free_format_input( expanded_filename, *volume, input_info ); break; #ifdef LIBMINC_NIFTI_SUPPORT case MGH_FORMAT: status = initialize_mgh_format_input( expanded_filename, *volume, input_info ); break; case NII_FORMAT: status = initialize_nifti_format_input( expanded_filename, *volume, input_info ); break; case NRRD_FORMAT: status = initialize_nrrd_format_input( expanded_filename, *volume, input_info ); break; #endif /*LIBMINC_NIFTI_SUPPORT*/ default: /*Unsupported file format*/ status = VIO_ERROR; break; } if( status != VIO_OK && create_volume_flag ) delete_volume( *volume ); delete_string( expanded_filename ); return( status ); }
/* ----------------------------- MNI Header ----------------------------------- @NAME : average_smoothness @INPUT : tmp_lambda_file - tmp file with unaveraged smoothness values @OUTPUT : lambda_file - file where final values are to be placed @RETURNS : nothing @DESCRIPTION: routine to create buffers for calculating smoothness of field @CREATED : Nov. 3, 1997, J. Taylor @MODIFIED : ---------------------------------------------------------------------------- */ int average_smoothness(char *tmp_lambda_file, char *lambda_file, double scalar) { Volume volume; nc_type in_nc_type; int in_signed_flag = FALSE; volume_input_struct volume_input; int v1, v2, v3; int num_dim; int sizes[MAX_DIMENSIONS]; double avg, values[8]; int i; if(start_volume_input(tmp_lambda_file, 3, NULL, NC_UNSPECIFIED, FALSE, 0.0, 0.0, TRUE, &volume, (minc_input_options *) NULL, &volume_input) != OK){ fprintf(stderr,"\nError opening %s.\n", tmp_lambda_file); exit(EXIT_FAILURE); } in_nc_type = get_volume_nc_data_type(volume, &in_signed_flag); get_volume_sizes(volume, sizes); num_dim = get_volume_n_dimensions(volume); cancel_volume_input(volume, &volume_input); if( input_volume(tmp_lambda_file, 3, NULL, NC_FLOAT, FALSE, 0.0, 0.0, TRUE, &volume, (minc_input_options *) NULL) != OK) { (void) fprintf(stderr, "Error reading file \"%s\"\n", tmp_lambda_file); return FALSE; } for(v1=0; v1<sizes[0]; v1++) { for(v2=0; v2<sizes[1]; v2++) { for(v3=0; v3<sizes[2]; v3++) { avg = 0.0; if((v1<sizes[0]-1) && (v2<sizes[1]-1) && (v3<sizes[2])-1) { values[0] = get_volume_real_value(volume, v1+1, v2, v3, 0, 0); values[1] = get_volume_real_value(volume, v1, v2+1, v3, 0, 0); values[2] = get_volume_real_value(volume, v1, v2, v3+1, 0, 0); values[3] = get_volume_real_value(volume,v1+1, v2+1, v3, 0, 0); values[4] = get_volume_real_value(volume, v1+1,v2, v3+1, 0, 0); values[5] = get_volume_real_value(volume, v1, v2+1,v3+1, 0, 0); values[6] = get_volume_real_value(volume, v1, v2, v3, 0, 0); values[7] = get_volume_real_value(volume, v1+1, v2+1,v3+1,0,0); for(i=0; i<8; i++) { if(values[i] != INVALID_DATA) avg += values[i]; else { avg = INVALID_DATA; i = 8; } } } else avg = INVALID_DATA; if (avg == 0.0) avg = INVALID_DATA; if (avg != INVALID_DATA) avg = scalar * 8.0 / pow(avg, (1.0 / num_dim)); set_volume_real_value(volume, v1, v2, v3, 0, 0, avg); } } } if( output_modified_volume(lambda_file, in_nc_type, in_signed_flag, 0.0, 0.0, volume, tmp_lambda_file, NULL, (minc_output_options *) NULL) != OK) { (void) fprintf(stderr, "Error writing file \"%s\"\n", lambda_file); return FALSE; } return TRUE; }