genre | WEMGenerate |
author | Olaf Konrad |
package | MeVisLab/Standard |
dll | MLWEMModules |
definition | MLWEMModules.def |
see also | SoWEMRenderer |
keywords | generate |
The module WEMIsoSurface generates the iso surface of a scalar volume image at a certain threshold (interval).
Adjust the iso threshold value and supply the module with a scalar volume image. Use a SoWEMRenderer to generate an Open Inventor scene and to render the resulting scene.
The generated WEM may be modified by a filter (such as WEMSmooth, WEMDemergePatches, WEMSubdivide or WEMReducePolygons) after being generated and before being rendered.
The Neighboring Cells algorithm behind the WEMIsoSurface is similar to the well-known Marching Cubes algorithm: a volume (image) is scanned by discretizing it in cells. At each of the cells' corners, the image values are measured. The assignment of corner values lead to a set amount of configurations. There are 256 configurations, because in comparison to the iso threshold, a corner can be either inside or outside of the boundary to be generated. So, a corner can yield two different states and there are eight corners which sums up to 28 = 256 configurations.
In the Marching Cubes algorithm, there is a list of triangles for each configuration. Those triangles are generated in each cell, resulting in a closed surface. In the Neighboring Cells algorithm, however, each configuration leads to the generation of zero to four nodes in each cell. Those nodes are associated to edges of the cell where a surface will go through. After generating the nodes, the links or surface parts will be established in a second processing pass. Like in the Marching Cubes algorithm, there will be some ambiguities, but they are detected and resolved at construction time.
The WEMIsoSurface features two iso values: a minimum and a maximum iso value. The usage of both values can be toggles. Since the generated iso surface is always closed, we can think of an inside and an outside? surface(s). A voxel value less than the minimum value or greater than the maximum value will result in an outside, all other voxel values will result in an inside. If one of the values is not set to be used, the according minimum or maximum image value is considered instead.
In general, if the image values are positive use the minimum iso value, if the image values are negative use the maximum iso value. In both cases, turn off the usage of the image's minimum or maximum value.
If interpolation is activated, each cell's edge that is associated with a certain node is interpolated linearly, and the interpolated node's position is set to the centroid of all these interpolated cell's edges positions. If the interpolation is turned off, all nodes are positioned into the middle of their cells, which results in a voxel-precision iso surface.
The Cell Ext parameter determines the scanning cells' sizes proportional to the voxel size of the input image. If the cell extend is set to 1/1/1, each voxel will be scanned. If the cell extend is set to 2/1/1, only every second voxel in x-direction is scanned. The values of the cell extend may be rational numbers, e.g. 0.5/1/2.3. The interpolation type of subvoxel resolution cell extends is Nearest Neighbor.
While the surface generation process, the image voxel values are stored for the generated WEMNodes in a WEMPrimitiveValueList called LUT. If there is more than one voxel value associated to a WEMNode, the highest value is stored in the considered WEMNode. These values may be used later on in the SoWEMRenderer, where these values lead to a coloring of the surface, if a LUT is used.
The module has one input which must be an image of a scalar data type.
The module's output is a WEM, which is always a 2-manifold (so, there are no holes or any other borders, and all internal pointer links of the primitives are correct).
Apply: Trigger | Iso Min. Value: Double | Time Point Index (-1=all): Integer |
Auto Apply: Bool | isProcessing: Bool | Use image max. value: Bool |
Auto Update: Bool | maxTimePointIndex: Integer | Use image min. value: Bool |
autoClear: Bool | Overwrite label and description: Bool | Use interpolation: Bool |
Cell Ext.: Vector3 | progress: Float | Use world coords.: Bool |
elapsedTime: Float | Remove nodes with valence 3: Bool | useQuadrification: Bool |
id: Integer | Remove zero-length edges: Bool | Write values to faces: Bool |
Iso Max. Value: Double | removePreviousWEMs: Bool |
If checked, the module computes a new output WEM on any parameter change.
If checked, the module computes a new output WEM on any change of the input image.
Sets the minimum threshold value: the iso surface is generated between pairs of voxels where one voxel's value exceeds or equals this value and the other voxel's value fall below this value.
If checked, the image's minimum value is taken as the minimum iso value. Use this option with images with negative values.
If checked, the image's maximum value is taken as the maximum iso value. Since a voxel value is tested against this value by equal or larger (>=), no surface will be generated at all due to this value.
Sets the cell extends of the Neighboring Cells.
If the extend is set to 1/1/1, each voxel will be investigated which is the default. If the extend is set to 2/2/2, every second voxel will be investigated. The cell extend can be set to an anisotropic value, like 2/1/3.
All dimension parameters can be of float type, i.e. 1.2/0.5/3.4. Interpolation is nearest-neighbor.
If checked, the resulting WEM is generated in world coordinates. If unchecked, the WEM is generated in voxel coordinates.
If checked, a trilinear interpolation is applied to find the best approximation of the nodes' positions that reflects the image's values.
If unchecked, each node is generated in the centre of its cell, causing the resulting WEM to have voxel precision.
If checked, a PVL for the faces is established, holding the nearest image value for each face. The PVL is called FaceValues.
If checked, all nodes with a valence of three are deleted, if all their incident edges yield an angle greater than 90 degrees.