コード例 #1
0
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);
 
}
コード例 #2
0
ファイル: input_volume.c プロジェクト: BIC-MNI/libminc
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 );
}
コード例 #3
0
ファイル: smoothness.c プロジェクト: BIC-MNI/glim_image
/* ----------------------------- 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;
}