Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

mritopgm.c

Go to the documentation of this file.
00001 /*****************************************************************************
00002    Major portions of this software are copyrighted by the Medical College
00003    of Wisconsin, 1994-2000, and are released under the Gnu General Public
00004    License, Version 2.  See the file README.Copyright for details.
00005 ******************************************************************************/
00006    
00007 #include "mrilib.h"
00008 
00009 int main( int argc , char *argv[] )
00010 {
00011    MRI_IMAGE *im , *imb ;
00012    int narg ;
00013    float perc=0.0 ;
00014 
00015    if( argc < 2 || strncmp(argv[1],"-help",2) == 0 ){
00016       printf( "Converts an image to raw pgm format.\n") ;
00017       printf( "Results go to stdout and should be redirected.\n");
00018       printf( "Usage:   mritopgm [-pp] input_image\n" ) ;
00019       printf( "Example: mritopgm fred.001 | ppmtogif > fred.001.gif\n") ;
00020       printf( "\n"
00021               "  The '-pp' option expresses a clipping percentage.\n"
00022               "  That is, if this option is given, the pp%%-brightest\n"
00023               "  pixel is mapped to white; all above it are also white,\n"
00024               "  and all below are mapped linearly down to black.\n"
00025               "  The default is that pp=100; that is, the brightest\n"
00026               "  pixel is white.  A useful operation for many MR images is\n"
00027               "    mritopgm -99 fred.001 | ppmtogif > fred.001.gif\n"
00028               "  This will clip off the top 1%% of voxels, which are often\n"
00029               "  super-bright due to arterial inflow effects, etc.\n"
00030             ) ;
00031       exit(0) ;
00032    }
00033 
00034    machdep() ;
00035 
00036    narg = 1 ;
00037    if( argv[narg][0] == '-' ){
00038      perc = 0.01 * strtod(argv[narg]+1,NULL) ;
00039      if( perc < 0.01 || perc > 1.00 ){
00040        fprintf(stderr,"** Illegal percentage: %s\n",argv[narg]+1) ;
00041      }
00042      narg++ ;
00043    }
00044    im   = mri_read_just_one( argv[narg] ) ;
00045    if( im == NULL ) exit(1) ;
00046 
00047    if( perc > 0.0 ){
00048      float val = mri_quantile( im , perc ) ;
00049      int ii ;
00050      switch( im->kind ){
00051         case MRI_short:{
00052           short *ar = mri_data_pointer(im) ;
00053           for( ii=0 ; ii < im->nvox ; ii++ ) if( ar[ii] > val ) ar[ii] = val ;
00054         }
00055         break ;
00056         case MRI_byte:{
00057           byte *ar = mri_data_pointer(im) ;
00058           for( ii=0 ; ii < im->nvox ; ii++ ) if( ar[ii] > val ) ar[ii] = val ;
00059         }
00060         break ;
00061         case MRI_float:{
00062           float *ar = mri_data_pointer(im) ;
00063           for( ii=0 ; ii < im->nvox ; ii++ ) if( ar[ii] > val ) ar[ii] = val ;
00064         }
00065         break ;
00066         default:
00067           fprintf(stderr,"** Don't know how to percent clip this type of image!\n") ;
00068         break ;
00069      }
00070    }
00071 
00072    imb = mri_to_byte( im ) ;
00073    mri_free( im ) ;
00074 
00075    printf( "P5 %d %d 255\n" , imb->nx , imb->ny ) ;
00076    fwrite( imb->im.byte_data , imb->pixel_size , imb->nx * imb->ny , stdout ) ;
00077 
00078    exit(0) ;
00079 }
 

Powered by Plone

This site conforms to the following standards: