Part 1 : Sub goal being solved, input (what/from whom etc), output,
Sue Baldor worked on preprocessing the raw volume data. She tried to reduce noise as well as segment skin, muscles and bones by translating the raw volume data into more recognizable values for easier isocontouring. My part was to work on the preprocessed raw volume data set to do the isocontouring. There are two approaches which already are implemented. So I mainly needed to do some technical stuff in order to apply the already implemented algorithms.
Tiling
The tiling approach focuses on the fact, that the volume data is readable slice by slice. The Isocontouring value is used to partition each slice in an inner and an outer region. The tiling algorithm tries to find connections between the inner regions of two adjacent slices in order to create a mesh surface.
There is a tiling implementation from K. L. Chandra Sekhar. The slice data needs to be expressed by polygons, on slice per file. The output is a number of files, where each one represents the regions between two dataslices and contains triangles connecting the inner regions of the surrounding slices.
In order to apply this tiling code, the raw volume data needs to be parsed and polygons for each slice need to be extracted. There is a program called newTrace with a visual interface, where the polygons can be previewed, and manually deleted in order to get rid of polygons gained from noisy data. I also wrote a tool for that purpose which is described in the section tools->slicescanner. A little java viewer (also described in tools section) helps to visualize the extracted polygons. The TileConverter (described in tools section) merges the output files of the tiling program and converts it to an iv file.
Parallel Isocontouring
This software from Dr Xiaoyu implements a fully scalable parallel and out-of-core isocontouring algorithm. A raw volume data file is needed to extract isosurfaces according to a certain isovalue. The software is developed for multiprocessing.
The generated iv data is passed to Zaiqing Xu for level of detail processing.
Part 2 : Results achieved
There are several tools which were developed within the above mentioned range of tasks.
checkiso
This tool searches for the longest chain of values who are above a certain threshold. Since the conversion from little to big endians and vice versa often caused confusion, this tool was useful to get an idea, if the examined file makes sense.
filedumper
Dumps either hex, chars, or integervalues of a file starting with a certain byte. Also useful, to check a raw file for correctness.
filestats
Creates a histogram over the datawords in a file starting from a certain byte. Also useful for examination of files.
float2char
Converts a raw volume file from floatvalues to unsigned charvalues to reduce the filesize of preprocessed raw volume files.
meshseparator
Separates connected objects of a mesh data (input: iv file). Making the assumption, that bones are not connected, this program will separate all bones of an entire mesh.
rawtools
Helper for raw volume data. It has two functions: it dumps out the header of a raw file, and it allows to cut a subcube out of the volume data, to focus on a local region of the data. This is useful for finding isovalues in small regions with programs like contour_iv, because one doesn't have to look at the entire dataset at once.
slicescanner
Used for preprocessing data for tiling. It reads either a ascii (png like) imagefile, or volume data slice by slice in order to generate polygon files which can be used as input for the tiling_win program from K. L. Chandra Sekhar.
swapendians
Swaps the endians in a region of a file. The wordlength is arbitrary.
TileConverter
Converts the output of K. L. Chandra Sekhar's tiling_win program into a iv file.
writefloat
Writes a 4 byte float at a certain adress into a file. This is used to fix wrong headers of raw volume files.
writeint
Writes a 4 byte integer at a certain adress into a file. This is used to fix wrong headers of raw volume files.
Part 3 : Lessons learnt, including what we were unable to implement