An examples of reading, writing, and manipulating volumes is presented here.
This is a complete program to read a MINC volume, change all values over 100.0 to 100.0, then write out the result in a new file.
#include <volume_io.h>
int main(
int argc,
char *argv[] )
{
int v1, v2, v3, sizes[MAX_DIMENSIONS];
Real voxel_value, voxel_100;
Volume volume;
/*--- input the volume */
if( input_volume( "volume.mnc", 3, NULL, NC_UNSPECIFIED, FALSE,
0.0, 0.0, TRUE, &volume,
(minc_input_options *) NULL ) != OK )
return( 1 );
get_volume_sizes( volume, sizes );
/*--- change all values over 100 to 100 */
voxel_100 = CONVERT_VALUE_TO_VOXEL( volume, 100.0 );
for( v1 = 0; v1 < sizes[0]; ++v1 ) {
for( v2 = 0; v2 < sizes[1]; ++v2 ) {
for( v3 = 0; v3 < sizes[2]; ++v3 ) {
GET_VALUE_3D( voxel_value, volume, v1, v2, v3 );
if( voxel_value > 100.0 ) {
SET_VOXEL_3D( volume, v1, v2, v3, voxel_100 );
}
}
}
}
/*--- output the modified volume */
if( output_modified_volume( "output.mnc", NC_UNSPECIFIED,
FALSE, 0.0, 0.0, volume, "volume.mnc",
"Modified by clamping to 100",
(minc_output_options *) NULL ) != OK )
return( 1 );
return( 0 );
}