Content
Introduction
supervisor: Peter Rautek
student: Stefan Marek
This web page is meant for the documentation of the laboratory project
"Volumetric Flow Visualization", done in the summer term 2006.
The content of this page is optimized for a resolution of 1024*768 pixels.
Project Tasks
The conceptual formulation of the laboratory project "Volumetric Flow Visualization"
is as following:
The laboratory project tasks are specification, visualization and categorization of the volumetric flow.
The volumetric flow (see optical flow in 2D) is defined as the changing of the volume over time.
The volumetric flow is considered on a regular grid.
At each voxel position on the grid, there is a given vector, which could be seen as the flow on this position.
The volumetric flow will be trilinear interpolated between the voxels.
Basically the project has three parts:
- Editing of Volumetric Flow:
Interactive editing of the volumetric flow can be managed by many ways.
The aim of the application should be an easy interface with understandable possibilities of interaction,
describing and changing the volumetric flow.
- Visualization:
The volumetric flow will be generated and saved in order of the outgoing data (=density values on the grid).
The visualization can be done either by vector visualization methods or by volume deformation
described by the volumetric flow.
- Clustering of the Flow:
The volumetric flow can be splitted into clusters, which are differentiated by their features
(direction, gradient magnitude, opacity, ...).
The cluster can be shown in different ways.
For further informations take a look at: Motion Magnification
In this laboratory the editing and visualization tasks are implemented.
Program Description
For the implementation of the project the framework VolumeShop was used. This framework is written in C++, OpenGL and GLSL and was developed with Visual Studio 2003. The project is developed and tested with the dataset "hand_small.dat".
![]() |
The picture shows the program with the loaded dataset "hand_small.dat" and a user defined transfer function. |
Requirements
The hardware requirements are the same as for volume shop, which means:
1. At least a Nvidia graphics card series 6000 or higher.
2. At least one gigabyte random access memory.
User Interface
The user interface is basically devided into two parts 1. Controls and 2. View. The following paragraphs will give a short overview of this two sections.
![]() |
The picture shows the grouping blocks of the program. The control area is on the left and right top side of the application window and the viewing area is on the right side. |
Controls:
The controls are basically the same as you will find in the volume shop.
At the bottom of the control section you will find a new control group
which is called "Optical Flow Management".
There are two sliders in this group. The first slider with the label "Optical Flow"
allows the manipulation of the time steps used for rendering the volumetric optical
flow. The range of the slider is between 0 and 20.
The second slider with the label "Gaussian Sigma" is meant for changing the
sigma value of the normal distribution used for defining the optical flow
vectors. Its values are within the parameters of 0.0 and 4.0.
On the right top side of the application window you will find two buttons which
are meant for user interaction and rendering of the volumetric flow.
![]() |
![]() |
![]() |
The picture shows the new control section. "Optical Flow" slider has a range between 0 and 20. "Sigma Gaussian" sider has a range between 0.0 and 4.0. |
The picture shows the interactor icon. Activating this icon allows user interaction in the viewing area. |
The picture shows the rendering icon. Pushing this icon renders the volumetric flow into the viewing area. |
View:
The viewing section is also the same as you will find in volume shop.
In the viewing area you will see the changing made by the controls.
Functionality
General Description:
The functionality of the Application is implemented in three modules:
1. Data Importer
2. Interactor
3. Volumetric Flow Renderer
The following section will give a more detailed overview of how this modules works.
Data Importer:
The data importer module is implemented as a volume shop plugin.
The functionality is the same as the data importer plugin except for the
gradient vectors which are all set to null vector.
Interaktor:
The interactor plugin is the main part of the project. In this module
the optical flow vector is calculated. The user defines a position on the
volume surface and one position in an arbitrary direction by mouse interaction
in the viewing area of the application. As a result of this user interaction the
application knows the position were the flow takes place and the direction of the flow.
This information will be used to generate the optical flow vectors by multiply the direction
vector with a value calculated by a normal distribution of the projected length of the voxel
position onto the direction vector. The new vector will be saved on the voxel positions inside
a region around the user selected volume position. This region could be seen as an oriented
bounding box with extends of the direction vectors half length.
Volumetric Flow Renderer:
The renderer plugin renders the volumetric flow with direct
volume rendering. The gradients has to be calculated in the rendering
loop of the fragment shader because the memory space designated for the
gradients is used for the optical flow vector. There is also another loop
for the time steps in the rendering loop of the fragment shader which renders
the volumetrical flow over time.
Conclusion
The tasks implemented are editing and visualization. Where editing is
done by drawing a line in the viewing area. The line is interpreted
as a common direction of the flow. Each voxel in an area around the
user selection given by an oriented bounding box gets an optical flow
vector assigned. This vectors are interpreted as optical flow over time
and where used for visualization of the volumetric flow.
The following pictures show the volumetric flow with user interaction.
![]() |
![]() |
bone hand with gaussian sigma 2 and time step 20 | skin hand with gaussian sigma 2 and time step 20 |