Mercurial > hg > minc-tools
changeset 977:af4ed077889f
check_in_all
author | david <david> |
---|---|
date | Mon, 15 Jan 1996 17:37:54 +0000 |
parents | 2239c8884db6 |
children | c9f0a10621a3 |
files | volume_io/Volumes/evaluate.c |
diffstat | 1 files changed, 24 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/volume_io/Volumes/evaluate.c +++ b/volume_io/Volumes/evaluate.c @@ -15,7 +15,7 @@ #include <internal_volume_io.h> #ifndef lint -static char rcsid[] = "$Header: /private-cvsroot/minc/volume_io/Volumes/evaluate.c,v 1.27 1996-01-12 19:23:18 david Exp $"; +static char rcsid[] = "$Header: /private-cvsroot/minc/volume_io/Volumes/evaluate.c,v 1.28 1996-01-15 17:37:54 david Exp $"; #endif /* ----------------------------- MNI Header ----------------------------------- @@ -243,7 +243,7 @@ Real coefs[2][2][2]; Real c000, c001, c010, c011, c100, c101, c110, c111; Real du00, du01, du10, du11, c00, c01, c10, c11, c0, c1, du0, du1; - Real dv0, dv1, dw; + Real dv0, dv1, dw, scale_factor; get_volume_sizes( volume, sizes ); @@ -259,14 +259,14 @@ j = (int) y; k = (int) z; - GET_VALUE_3D( c000, volume, i , j , k ); - GET_VALUE_3D( c001, volume, i , j , k+1 ); - GET_VALUE_3D( c010, volume, i , j+1, k ); - GET_VALUE_3D( c011, volume, i , j+1, k+1 ); - GET_VALUE_3D( c100, volume, i+1, j , k ); - GET_VALUE_3D( c101, volume, i+1, j , k+1 ); - GET_VALUE_3D( c110, volume, i+1, j+1, k ); - GET_VALUE_3D( c111, volume, i+1, j+1, k+1 ); + GET_VOXEL_3D( c000, volume, i , j , k ); + GET_VOXEL_3D( c001, volume, i , j , k+1 ); + GET_VOXEL_3D( c010, volume, i , j+1, k ); + GET_VOXEL_3D( c011, volume, i , j+1, k+1 ); + GET_VOXEL_3D( c100, volume, i+1, j , k ); + GET_VOXEL_3D( c101, volume, i+1, j , k+1 ); + GET_VOXEL_3D( c110, volume, i+1, j+1, k ); + GET_VOXEL_3D( c111, volume, i+1, j+1, k+1 ); } else { @@ -274,6 +274,8 @@ j = FLOOR( y ); k = FLOOR( z ); + outside_value = convert_value_to_voxel( volume, outside_value ); + for_less( dx, 0, 2 ) for_less( dy, 0, 2 ) for_less( dz, 0, 2 ) @@ -282,7 +284,7 @@ j + dy >= 0 && j + dy < sizes[1] && k + dz >= 0 && k + dz < sizes[2] ) { - GET_VALUE_3D( coefs[dx][dy][dz], volume, i+dx, j+dy, k+dz ); + GET_VOXEL_3D( coefs[dx][dy][dz], volume, i+dx, j+dy, k+dz ); } else coefs[dx][dy][dz] = outside_value; @@ -333,12 +335,19 @@ /*--- if the value is desired, interpolate in 1D to get the value */ if( value != NULL ) - *value = c0 + w * dw; + { + *value = convert_voxel_to_value( volume, c0 + w * dw ); + } /*--- if the derivatives are desired, compute them */ if( derivs != NULL ) { + if( volume->real_range_set ) + scale_factor = volume->real_value_scale; + else + scale_factor = 1.0; + /*--- reduce the 2D u derivs to 1D */ du0 = INTERPOLATE( v, du00, du10 ); @@ -346,9 +355,9 @@ /*--- interpolate the 1D problems in w, or for Z deriv, just use dw */ - derivs[X] = INTERPOLATE( w, du0, du1 ); - derivs[Y] = INTERPOLATE( w, dv0, dv1 ); - derivs[Z] = dw; + derivs[X] = scale_factor * INTERPOLATE( w, du0, du1 ); + derivs[Y] = scale_factor * INTERPOLATE( w, dv0, dv1 ); + derivs[Z] = scale_factor * dw; } }