[vtkusers] Artifacts in volume rendering

Elvis Stansvik elvis.stansvik at orexplore.com
Tue Apr 12 10:06:37 EDT 2016


2016-04-12 15:56 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:

> Hi all,
>
> Following Berk Geveci's great blog post from 2014 on writing a custom HDF5
> reader in Python [1], I tried to take his code and modify it to load HDF5
> files where the densities are float32 and vary between 0 and 64.
>
> The only change I did to his reader was to modify RequestData to scale the
> loaded data and convert it to uint16, like this:
>
>     data = (data * 1023).astype(uint16)
>
> (should get me roughly in the range 0-65535).
>
> I then generated a test HDF5 file containing a cylindrical volume like
> this:
>
> def create_cylinder_file(filename, height, radius):
>     """Create a cylindrical volume and save it in test.hdf5.
>
>     The densities are saved as float32 and will vary sinusoidically
>     from 0 to 64 along the cylinder height.
>
>     The result is saved in the "test" dataset in the output file.
>     """
>     z_values = 32 + 32 * sin(linspace(0, 2*pi, height))
>     diameter = radius * 2
>     data = zeros(shape=(diameter, diameter, height), dtype=float32)
>
>     for x in range(diameter):
>         for y in range(diameter):
>             if (x - radius)**2 + (y - radius)**2 <= radius**2:
>                 data[x, y, :] = z_values
>
>     # Write array to HDF5 file.
>     with h5py.File(filename, 'w') as file_:
>         data_set = file_.create_dataset(
>             name='test',
>             shape=data.shape,
>             dtype=data.dtype,
>             data=data
>         )
>
> I then test it all out using a vtkVolumeRayCastMapper based pipeline like
> this:
>
>     reader = HDF5Source()
>     reader.SetFileName('test.hdf5')
>
>     rayCastFunction = vtk.vtkVolumeRayCastCompositeFunction()
>
>     mapper = vtk.vtkVolumeRayCastMapper()
>     mapper.SetVolumeRayCastFunction(rayCastFunction)
>     mapper.SetInputConnection(reader.GetOutputPort())
>
>     colorTransferFunction = vtk.vtkColorTransferFunction()
>     colorTransferFunction.AddRGBPoint(0, 0, 0, 0)     # Black
>     colorTransferFunction.AddRGBPoint(20000, 1, 0, 0) # Red
>     colorTransferFunction.AddRGBPoint(40000, 0, 1, 0) # Green
>     colorTransferFunction.AddRGBPoint(65535, 0, 0, 1) # Blue
>
>     opacityTransferFunction = vtk.vtkPiecewiseFunction()
>     opacityTransferFunction.AddPoint(0, 0)     # Transparent
>     opacityTransferFunction.AddPoint(65535, 1) # Opaque
>
>     volumeProperty = vtk.vtkVolumeProperty()
>     volumeProperty.SetColor(colorTransferFunction)
>     volumeProperty.SetScalarOpacity(opacityTransferFunction)
>     volumeProperty.ShadeOff()
>     volumeProperty.SetInterpolationTypeToLinear()
>
>     volume = vtk.vtkVolume()
>     volume.SetMapper(mapper)
>     volume.SetProperty(volumeProperty)
>
>     renderer = vtk.vtkRenderer()
>     renderer.AddVolume(volume)
>     renderer.SetBackground(.85, .84, .83)
>
>     renderWindow = vtk.vtkRenderWindow()
>     renderWindow.AddRenderer(renderer)
>     renderWindow.SetSize(600, 600)
>
>     interactor = vtk.vtkRenderWindowInteractor()
>     interactor.SetRenderWindow(renderWindow)
>     interactor.Initialize()
>
>     renderWindow.Render()
>     interactor.Start()
>
> I'm attaching a main.py which contains the full code, including the
> HDFSource reader with my slight modification, and a screenshot showing the
> result.
>
> Noticy how there's some strange artifacts in the denser (greener, bluer)
> parts of the cylinder. Anyone know where these artifacts may come from?
> It's entirely possible that it has nothing to with the custom reader, but
> something with my pipeline..?
>
> Very grateful for any ideas!
>

I forgot to say: This is with VTK 6.2 from Ubuntu packages.

Elvis


>
> Cheers,
> Elvis
>
> [1]
> https://blog.kitware.com/developing-hdf5-readers-using-vtkpythonalgorithm/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160412/2b7abcd5/attachment.html>


More information about the vtkusers mailing list