This structure serves as a parameter for function IG_vect_3DIV_isosurface(), and contains the values for all the options for isosurface algorithm.
Copy Code
|
|
---|---|
typedef struct tagAT_VECT_3DIV_OPTIONS
{
AT_DOUBLE dIsoValue;
AT_INT iLowExcluRange;
AT_INT iHighExcluRange;
AT_BOOL bDoNorms;
AT_BOOL bFlipNorms;
AT_BOOL bAddCoverSlices;
AT_BOOL bLimitDepth;
AT_INT iSurfaceDepth;
AT_BOOL bDecimateY;
AT_INT iYDecimFactor;
AT_BOOL bDecimateZ;
AT_INT iZDecimFactor;
} AT_VECT_3DIV_OPTIONS;
|
Name | Type | Description |
---|---|---|
dIsoValue | AT_DOUBLE | Intensity value of pixels on the isosurface. |
iLowExcluRange | AT_INT | Lower limit of exclusion region. |
iHighExcluRange | AT_INT | Upper limit of exclusion region. |
bDoNorms | AT_BOOL | Flag to indicate whether to calculate the normals along with vertices. |
bFlipNorms | AT_BOOL | Flag to indicate whether to flip the normals after calculation. |
bAddCoverSlices | AT_BOOL | Flag to indicate whether to add cover-up slices at the ends. |
bLimitDepth | AT_BOOL | Flag to indicate whether to limit the surface depth. |
iSurfaceDepth | AT_INT | Depth of the surface. In effect only if bLimitDepth is TRUE. |
bDecimateY | AT_BOOL | Flag to indicate whether to decimate Y direction when considering surface depth. In effect only if bLimitDepth is TRUE. |
iYDecimFactor | AT_INT | Decimation factor in Y direction. In effect only if both bLimitDepth and bDecimateY are TRUE. |
bDecimateZ | AT_BOOL | Flag to indicate whether to decimate Z direction when considering the surface depth. In effect only if bLimitDepth is TRUE. |
iZDecimFactor | AT_INT | Decimation factor in Z direction, in effect only if both bLimitDepth and bDecimateZ are TRUE. |
The parameter bAddCoverSlices indicates whether "cover-up" slices should be added at both ends. If TRUE, the first and last slices will be placed at both ends, with pixels outside of the 3D object set to transparent.
When the isosurface is generated, a lot of triangles are also generated inside the 3D object, although sometimes we are only interested in the outside surface. The flag bLimitDepth allows the surface to be limited to only a certain depth, thus any triangles further inside will be discarded. This greatly improves the rendering performance, for example, when rotating the 3D object. On the flip side, if surface depth limit is set too low, it is possible that "artificial holes" will be created on the surface because of excessive discarding of triangles.
Parameters bDecimateY, iYDecimFactor, bDecimateZ and iZDecimFactor further refine the process of limiting surface depth. The higher the decimation factors, the better the surface looks, but that also means the greater number of triangles. So a balance point is required. For a brain example we looked at, values [10, 5, 5] for [iSurfaceDepth, iYDecimFactor, iZDecimFactor] reduced the number of triangles by about a half while still producing a reasonable 3D surface.
Parameters iLowExcluRange and iHighExcluRange are designed to exclude certain pixels whose intensities fall within the specified range. If this feature is not desired, the user can simply set both of those two parameters to 0.